[Home]NonCircularTurning

LinuxCNCKnowledgeBase | RecentChanges | PageIndex | Preferences | LinuxCNC.org

Showing revision 1

Non-Circular Turning

(This page is designed to give tantalising hints of how to do non-circular turning, but with just enough information left out to make it useless.)

If a lathe has a spindle encoder then it is possible to apply spindle-angle related offsets to the cross slide (or the Z slide, for example to make a face-cam).

Videos: http://www.youtube.com/watch?v=T4q8gCpeY1A

http://www.youtube.com/watch?v=FpP7iTKuWpw

The offsets are calculated with the simple HAL component listed before. Unfortunately it is necessary to re-compile to change the profile. That could be changed, but this was just a proof of concept.

component oval "Add a spindle-position related offset to an axis for oval turning";
pin in float encoder-pos "encoder position, should be scaled 0-1";
pin in bit disable "set high to disable, for example during homing";
pin in float pos-in "the input (axis position)";
pin in float offset "the required eccentricity";
pin out float pos-out "the modified position request";
pin in float fb-in "position feedback from joint";
pin out float fb-out "position feedback to motion";
     
function _ ;
license "GPL";
author "Andy Pugh";

;;

FUNCTION(_) {
    static float profile[] = 
    {.0000,	.0055,	.0223,	.0515,	.0946,	.1547,	.0946,	.0515,	.0223,
     .0055,	.0000,	.0055,	.0223,	.0515,	.0946,	.1547,	.0946,	.0515,
     .0223,	.0055,	.0000,	.0055,	.0223,	.0515,	.0946,	.1547,	.0946,
     .0515,	.0223,	.0055,	.0000,	.0055,	.0223,	.0515,	.0946,	.1547,
     .0946,	.0515,	.0223,	.0055,	.0000,	.0055,	.0223,	.0515,	.0946,
     .1547,	.0946,	.0515,	.0223,	.0055,	.0000,	.0055,	.0223,	.0515,
     .0946,	.1547,	.0946,	.0515,	.0223,	.0055,	.0000,} ;
    int i;
    float f;
    
    if (disable) {
        pos_out = pos_in;
        fb_out = fb_in;
        return;
    }
    f = (encoder_pos - (int)(encoder_pos))*60.0;
    i = f;
    f = f-i;
    pos_out = pos_in + offset*(profile[i] + f * (profile[i+1]-profile[i]));
    fb_out = fb_in - (pos_out - pos_in);
}


LinuxCNCKnowledgeBase | RecentChanges | PageIndex | Preferences | LinuxCNC.org
This page is read-only. Follow the BasicSteps to edit pages. | View other revisions | View current revision
Edited April 23, 2011 2:50 pm by Andypugh (diff)
Search:
Published under a Creative Commons License