|
From: John T. <gi...@gi...> - 2011-12-26 17:29:30
|
Docs: markup fixes and latexmath fix Signed-off-by: John Thornton <jth...@gn...> http://git.linuxcnc.org/?p=emc2.git;a=commitdiff;h=107ef49 --- docs/src/examples/images/spindle-math.png | Bin 0 -> 2929 bytes docs/src/examples/spindle.txt | 186 ++++++++++++++++------------- docs/src/examples/spindle_de.txt | 186 ++++++++++++++++------------- docs/src/examples/spindle_es.txt | 186 ++++++++++++++++------------- docs/src/examples/spindle_pl.txt | 186 ++++++++++++++++------------- 5 files changed, 404 insertions(+), 340 deletions(-) diff --git a/docs/src/examples/images/spindle-math.png b/docs/src/examples/images/spindle-math.png new file mode 100644 index 0000000..e8a1b82 Binary files /dev/null and b/docs/src/examples/images/spindle-math.png differ diff --git a/docs/src/examples/spindle.txt b/docs/src/examples/spindle.txt index f32db6d..2deeb07 100644 --- a/docs/src/examples/spindle.txt +++ b/docs/src/examples/spindle.txt @@ -1,3 +1,6 @@ +:lang: en +:toc: + = Spindle Control[[cha:Spindle-Control]] (((Spindle Control))) @@ -10,32 +13,37 @@ you're using a DAC card like the m5i20 to output the control signal: First you need to figure the scale of spindle speed to control signal. For this example the spindle top speed of 5000 RPM is equal to 10 -volts. latexmath:[$ \frac{10 Volts}{5000 RPM} = 0.002 $] so our scale -factor is latexmath:[$ \frac{0.002 Volts}{1 RPM} $] +volts. + +image::images/spindle-math.png[align="center"] We have to add a scale component to the HAL file to scale the motion.spindle-speed-out to the 0 to 10 needed by the VFD if your DAC card does not do scaling. - loadrt scale count=1 - addf scale.0 servo-thread - setp scale.0.gain 0.002 - net spindle-speed-scale motion.spindle-speed-out => scale.0.in - net spindle-speed-DAC scale.0.out => <your DAC pin name> +---- +loadrt scale count=1 +addf scale.0 servo-thread +setp scale.0.gain 0.002 +net spindle-speed-scale motion.spindle-speed-out => scale.0.in +net spindle-speed-DAC scale.0.out => <your DAC pin name> +---- == PWM Spindle Speed (((PWM Spindle Speed))) If your spindle can be controlled by a PWM signal, use the pwmgen component to create the signal: - loadrt pwmgen output_type=0 - addf pwmgen.update servo-thread - addf pwmgen.make-pulses base-thread - net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value - net spindle-on motion.spindle-on => pwmgen.0.enable - net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out - # Set the spindle's top speed in RPM - setp pwmgen.0.scale 1800 +---- +loadrt pwmgen output_type=0 +addf pwmgen.update servo-thread +addf pwmgen.make-pulses base-thread +net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value +net spindle-on motion.spindle-on => pwmgen.0.enable +net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out +# Set the spindle's top speed in RPM +setp pwmgen.0.scale 1800 +---- This assumes that the spindle controller's response to PWM is simple: 0% PWM gives 0 RPM, 10% PWM gives 180 RPM, etc. If there is a minimum @@ -50,21 +58,25 @@ To link these pins to a parallel port pin put something like the following in your .hal file, making sure you pick the pin that is connected to your control device. - net spindle-enable motion.spindle-on => parport.0.pin-14-out +---- +net spindle-enable motion.spindle-on => parport.0.pin-14-out +---- == Spindle Direction (((Spindle Direction))) If you have direction control of your spindle the HAL pins motion.spindle-forward and motion.spindle-reverse are controlled by M3 -and M4. Spindle speed "Sn" must be set to a positive non-zero value for +and M4. Spindle speed 'Sn' must be set to a positive non-zero value for M3/M4 to turn on spindle motion. To link these pins to a parallel port pin, put something like the following in your .hal file making sure you pick the pin that is connected to your control device. - net spindle-fwd motion.spindle-forward => parport.0.pin-16-out - net spindle-rev motion.spindle-reverse => parport.0.pin-17-out +---- +net spindle-fwd motion.spindle-forward => parport.0.pin-16-out +net spindle-rev motion.spindle-reverse => parport.0.pin-17-out +---- == Spindle Soft Start (((Spindle Soft Start))) @@ -87,47 +99,48 @@ to the two HAL components used in the following example. - A "limit2" is a HAL component (floating point) that accepts an input value and provides an output that has been limited to a - max/min range, and *also* limited to not exceed a specified + max/min range, and also limited to not exceed a specified rate of change. - A "near" is a HAL component (floating point) with a binary output that says whether two inputs are approximately equal. More info is available from the documentation for HAL components, -or from the man pages, just enter "man limit2" or "man near". +or from the man pages, just enter 'man limit2' or 'man near'. ********************************************************************* - # load real time a limit2 and a near with names so it is easier to follow - loadrt limit2 names=spindle-ramp - loadrt near names=spindle-at-speed +---- +# load real time a limit2 and a near with names so it is easier to follow +loadrt limit2 names=spindle-ramp +loadrt near names=spindle-at-speed - # add the functions to a thread - addf spindle-ramp servo-thread - addf spindle-at-speed servo-thread +# add the functions to a thread +addf spindle-ramp servo-thread +addf spindle-at-speed servo-thread - # set the parameter for max rate-of-change - # (max spindle accel/decel in units per second) - setp spindle-ramp.maxv 60 +# set the parameter for max rate-of-change +# (max spindle accel/decel in units per second) +setp spindle-ramp.maxv 60 - # hijack the spindle speed out and send it to spindle ramp in - net spindle-cmd <= motion.spindle-speed-out => spindle-ramp.in +# hijack the spindle speed out and send it to spindle ramp in +net spindle-cmd <= motion.spindle-speed-out => spindle-ramp.in - # the output of spindle ramp is sent to the scale in - net spindle-ramped <= spindle-ramp.out => scale.0.in +# the output of spindle ramp is sent to the scale in +net spindle-ramped <= spindle-ramp.out => scale.0.in - # to know when to start the motion we send the near component - # (named spindle-at-speed) to the spindle commanded speed from - # the signal spindle-cmd and the actual spindle speed - # provided your spindle can accelerate at the maxv setting. - net spindle-cmd => spindle-at-speed.in1 - net spindle-ramped => spindle-at-speed.in2 +# to know when to start the motion we send the near component +# (named spindle-at-speed) to the spindle commanded speed from +# the signal spindle-cmd and the actual spindle speed +# provided your spindle can accelerate at the maxv setting. +net spindle-cmd => spindle-at-speed.in1 +net spindle-ramped => spindle-at-speed.in2 - # the output from spindle-at-speed is sent to motion.spindle-at-speed - # and when this is true motion will start - net spindle-ready <= spindle-at-speed.out => motion.spindle-at-speed +# the output from spindle-at-speed is sent to motion.spindle-at-speed +# and when this is true motion will start +net spindle-ready <= spindle-at-speed.out => motion.spindle-at-speed +---- - -= Spindle Feedback[[cha:Spindle-Feedback]] += Spindle Feedback[[spindle-feedback]] (((Spindle Feedback))) @@ -142,41 +155,43 @@ Encoder Index as inputs. Hardware assumptions: - - An encoder is connected to the spindle and puts out 100 pulses per +* An encoder is connected to the spindle and puts out 100 pulses per revolution on phase A - - The encoder A phase is connected to the parallel port pin 10 - - The encoder index pulse is connected to the parallel port pin 11 +* The encoder A phase is connected to the parallel port pin 10 +* The encoder index pulse is connected to the parallel port pin 11 Basic Steps to add the components and configure them: - # add the encoder to HAL and attach it to threads.footnote:[In this - example, we will assume that some encoders have already been issued - to axes/joints 0, 1, and 2. So the next encoder available for us to - attach to the spindle would be number 3. Your situation may differ.] - loadrt encoder num_chan=1 - addf encoder.update-counters base-thread - addf encoder.capture-position servo-thread +---- +# add the encoder to HAL and attach it to threads.footnote:[In this +example, we will assume that some encoders have already been issued +to axes/joints 0, 1, and 2. So the next encoder available for us to +attach to the spindle would be number 3. Your situation may differ.] +loadrt encoder num_chan=1 +addf encoder.update-counters base-thread +addf encoder.capture-position servo-thread - # set the HAL encoder to 100 pulses per revolution. - setp encoder.3.position-scale 100 +# set the HAL encoder to 100 pulses per revolution. +setp encoder.3.position-scale 100 - # set the HAL encoder to non-quadrature simple counting using A only. - setp encoder.3.counter-mode true +# set the HAL encoder to non-quadrature simple counting using A only. +setp encoder.3.counter-mode true - # connect the HAL encoder outputs to EMC2.footnote:[The HAL encoder - index-enable is an exception to the rule in that it behaves - as both an input and an output, see manual for details] - net spindle-position encoder.3.position => motion.spindle-revs - net spindle-velocity encoder.3.velocity => motion.spindle-speed-in - net spindle-index-enable encoder.3.index-enable <=> motion.spindle-index-enable +# connect the HAL encoder outputs to EMC2.footnote:[The HAL encoder +index-enable is an exception to the rule in that it behaves +as both an input and an output, see manual for details] +net spindle-position encoder.3.position => motion.spindle-revs +net spindle-velocity encoder.3.velocity => motion.spindle-speed-in +net spindle-index-enable encoder.3.index-enable <=> motion.spindle-index-enable - # connect the HAL encoder inputs to the real encoder. - net spindle-phase-a encoder.3.phase-A <= parport.0.pin-10-in - net spindle-phase-b encoder.3.phase-B footnote:[It is because - we selected "non-quadrature simple counting..." above that we - can get away with "quadrature" counting without having any - B quadrature input.] - net spindle-index encoder.3.phase-Z <= parport.0.pin-11-in +# connect the HAL encoder inputs to the real encoder. +net spindle-phase-a encoder.3.phase-A <= parport.0.pin-10-in +net spindle-phase-b encoder.3.phase-B footnote:[It is because +we selected 'non-quadrature simple counting...' above that we +can get away with 'quadrature' counting without having any +B quadrature input.] +net spindle-index encoder.3.phase-Z <= parport.0.pin-11-in +---- == Spindle At Speed[[sec:Spindle-At-Speed]] @@ -186,7 +201,7 @@ To enable EMC to wait for the spindle to be at speed before executing a series of moves you need to set motion.spindle-at-speed to true when the spindle is at the commanded speed. To do this you need spindle feedback from an encoder. Since the feedback and the commanded speed -are not usually *exactly* the same you need to use the "near" +are not usually 'exactly' the same you need to use the 'near' component to say that the two numbers are close enough. The connections needed are from the spindle @@ -202,20 +217,21 @@ file to enable Spindle At Speed. If you already have near in your HAL file then increase the count and adjust code to suit. Check to make sure the signal names are the same in your HAL file. - # load a "near" component and attach it to a thread - loadrt near - addf near.0 servo-thread - - # connect one input to the commanded spindle speed - net spindle-cmd => near.0.in1 +---- +# load a near component and attach it to a thread +loadrt near +addf near.0 servo-thread - # connect one input to the encoder-measured spindle speed - net spindle-velocity => near.0.in2 +# connect one input to the commanded spindle speed +net spindle-cmd => near.0.in1 - # connect the output to the spindle-at-speed input - net spindle-at-speed motion.spindle-at-speed <= near.0.out +# connect one input to the encoder-measured spindle speed +net spindle-velocity => near.0.in2 - # set the spindle speed inputs to agree if within 1% - setp near.0.scale 1.01 +# connect the output to the spindle-at-speed input +net spindle-at-speed motion.spindle-at-speed <= near.0.out +# set the spindle speed inputs to agree if within 1% +setp near.0.scale 1.01 +---- diff --git a/docs/src/examples/spindle_de.txt b/docs/src/examples/spindle_de.txt index f32db6d..cdc8a43 100644 --- a/docs/src/examples/spindle_de.txt +++ b/docs/src/examples/spindle_de.txt @@ -1,3 +1,6 @@ +:lang: de +:toc: + = Spindle Control[[cha:Spindle-Control]] (((Spindle Control))) @@ -10,32 +13,37 @@ you're using a DAC card like the m5i20 to output the control signal: First you need to figure the scale of spindle speed to control signal. For this example the spindle top speed of 5000 RPM is equal to 10 -volts. latexmath:[$ \frac{10 Volts}{5000 RPM} = 0.002 $] so our scale -factor is latexmath:[$ \frac{0.002 Volts}{1 RPM} $] +volts. + +image::images/spindle-math.png[align="center"] We have to add a scale component to the HAL file to scale the motion.spindle-speed-out to the 0 to 10 needed by the VFD if your DAC card does not do scaling. - loadrt scale count=1 - addf scale.0 servo-thread - setp scale.0.gain 0.002 - net spindle-speed-scale motion.spindle-speed-out => scale.0.in - net spindle-speed-DAC scale.0.out => <your DAC pin name> +---- +loadrt scale count=1 +addf scale.0 servo-thread +setp scale.0.gain 0.002 +net spindle-speed-scale motion.spindle-speed-out => scale.0.in +net spindle-speed-DAC scale.0.out => <your DAC pin name> +---- == PWM Spindle Speed (((PWM Spindle Speed))) If your spindle can be controlled by a PWM signal, use the pwmgen component to create the signal: - loadrt pwmgen output_type=0 - addf pwmgen.update servo-thread - addf pwmgen.make-pulses base-thread - net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value - net spindle-on motion.spindle-on => pwmgen.0.enable - net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out - # Set the spindle's top speed in RPM - setp pwmgen.0.scale 1800 +---- +loadrt pwmgen output_type=0 +addf pwmgen.update servo-thread +addf pwmgen.make-pulses base-thread +net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value +net spindle-on motion.spindle-on => pwmgen.0.enable +net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out +# Set the spindle's top speed in RPM +setp pwmgen.0.scale 1800 +---- This assumes that the spindle controller's response to PWM is simple: 0% PWM gives 0 RPM, 10% PWM gives 180 RPM, etc. If there is a minimum @@ -50,21 +58,25 @@ To link these pins to a parallel port pin put something like the following in your .hal file, making sure you pick the pin that is connected to your control device. - net spindle-enable motion.spindle-on => parport.0.pin-14-out +---- +net spindle-enable motion.spindle-on => parport.0.pin-14-out +---- == Spindle Direction (((Spindle Direction))) If you have direction control of your spindle the HAL pins motion.spindle-forward and motion.spindle-reverse are controlled by M3 -and M4. Spindle speed "Sn" must be set to a positive non-zero value for +and M4. Spindle speed 'Sn' must be set to a positive non-zero value for M3/M4 to turn on spindle motion. To link these pins to a parallel port pin, put something like the following in your .hal file making sure you pick the pin that is connected to your control device. - net spindle-fwd motion.spindle-forward => parport.0.pin-16-out - net spindle-rev motion.spindle-reverse => parport.0.pin-17-out +---- +net spindle-fwd motion.spindle-forward => parport.0.pin-16-out +net spindle-rev motion.spindle-reverse => parport.0.pin-17-out +---- == Spindle Soft Start (((Spindle Soft Start))) @@ -87,47 +99,48 @@ to the two HAL components used in the following example. - A "limit2" is a HAL component (floating point) that accepts an input value and provides an output that has been limited to a - max/min range, and *also* limited to not exceed a specified + max/min range, and also limited to not exceed a specified rate of change. - A "near" is a HAL component (floating point) with a binary output that says whether two inputs are approximately equal. More info is available from the documentation for HAL components, -or from the man pages, just enter "man limit2" or "man near". +or from the man pages, just enter 'man limit2' or 'man near'. ********************************************************************* - # load real time a limit2 and a near with names so it is easier to follow - loadrt limit2 names=spindle-ramp - loadrt near names=spindle-at-speed +---- +# load real time a limit2 and a near with names so it is easier to follow +loadrt limit2 names=spindle-ramp +loadrt near names=spindle-at-speed - # add the functions to a thread - addf spindle-ramp servo-thread - addf spindle-at-speed servo-thread +# add the functions to a thread +addf spindle-ramp servo-thread +addf spindle-at-speed servo-thread - # set the parameter for max rate-of-change - # (max spindle accel/decel in units per second) - setp spindle-ramp.maxv 60 +# set the parameter for max rate-of-change +# (max spindle accel/decel in units per second) +setp spindle-ramp.maxv 60 - # hijack the spindle speed out and send it to spindle ramp in - net spindle-cmd <= motion.spindle-speed-out => spindle-ramp.in +# hijack the spindle speed out and send it to spindle ramp in +net spindle-cmd <= motion.spindle-speed-out => spindle-ramp.in - # the output of spindle ramp is sent to the scale in - net spindle-ramped <= spindle-ramp.out => scale.0.in +# the output of spindle ramp is sent to the scale in +net spindle-ramped <= spindle-ramp.out => scale.0.in - # to know when to start the motion we send the near component - # (named spindle-at-speed) to the spindle commanded speed from - # the signal spindle-cmd and the actual spindle speed - # provided your spindle can accelerate at the maxv setting. - net spindle-cmd => spindle-at-speed.in1 - net spindle-ramped => spindle-at-speed.in2 +# to know when to start the motion we send the near component +# (named spindle-at-speed) to the spindle commanded speed from +# the signal spindle-cmd and the actual spindle speed +# provided your spindle can accelerate at the maxv setting. +net spindle-cmd => spindle-at-speed.in1 +net spindle-ramped => spindle-at-speed.in2 - # the output from spindle-at-speed is sent to motion.spindle-at-speed - # and when this is true motion will start - net spindle-ready <= spindle-at-speed.out => motion.spindle-at-speed +# the output from spindle-at-speed is sent to motion.spindle-at-speed +# and when this is true motion will start +net spindle-ready <= spindle-at-speed.out => motion.spindle-at-speed +---- - -= Spindle Feedback[[cha:Spindle-Feedback]] += Spindle Feedback[[spindle-feedback]] (((Spindle Feedback))) @@ -142,41 +155,43 @@ Encoder Index as inputs. Hardware assumptions: - - An encoder is connected to the spindle and puts out 100 pulses per +* An encoder is connected to the spindle and puts out 100 pulses per revolution on phase A - - The encoder A phase is connected to the parallel port pin 10 - - The encoder index pulse is connected to the parallel port pin 11 +* The encoder A phase is connected to the parallel port pin 10 +* The encoder index pulse is connected to the parallel port pin 11 Basic Steps to add the components and configure them: - # add the encoder to HAL and attach it to threads.footnote:[In this - example, we will assume that some encoders have already been issued - to axes/joints 0, 1, and 2. So the next encoder available for us to - attach to the spindle would be number 3. Your situation may differ.] - loadrt encoder num_chan=1 - addf encoder.update-counters base-thread - addf encoder.capture-position servo-thread +---- +# add the encoder to HAL and attach it to threads.footnote:[In this +example, we will assume that some encoders have already been issued +to axes/joints 0, 1, and 2. So the next encoder available for us to +attach to the spindle would be number 3. Your situation may differ.] +loadrt encoder num_chan=1 +addf encoder.update-counters base-thread +addf encoder.capture-position servo-thread - # set the HAL encoder to 100 pulses per revolution. - setp encoder.3.position-scale 100 +# set the HAL encoder to 100 pulses per revolution. +setp encoder.3.position-scale 100 - # set the HAL encoder to non-quadrature simple counting using A only. - setp encoder.3.counter-mode true +# set the HAL encoder to non-quadrature simple counting using A only. +setp encoder.3.counter-mode true - # connect the HAL encoder outputs to EMC2.footnote:[The HAL encoder - index-enable is an exception to the rule in that it behaves - as both an input and an output, see manual for details] - net spindle-position encoder.3.position => motion.spindle-revs - net spindle-velocity encoder.3.velocity => motion.spindle-speed-in - net spindle-index-enable encoder.3.index-enable <=> motion.spindle-index-enable +# connect the HAL encoder outputs to EMC2.footnote:[The HAL encoder +index-enable is an exception to the rule in that it behaves +as both an input and an output, see manual for details] +net spindle-position encoder.3.position => motion.spindle-revs +net spindle-velocity encoder.3.velocity => motion.spindle-speed-in +net spindle-index-enable encoder.3.index-enable <=> motion.spindle-index-enable - # connect the HAL encoder inputs to the real encoder. - net spindle-phase-a encoder.3.phase-A <= parport.0.pin-10-in - net spindle-phase-b encoder.3.phase-B footnote:[It is because - we selected "non-quadrature simple counting..." above that we - can get away with "quadrature" counting without having any - B quadrature input.] - net spindle-index encoder.3.phase-Z <= parport.0.pin-11-in +# connect the HAL encoder inputs to the real encoder. +net spindle-phase-a encoder.3.phase-A <= parport.0.pin-10-in +net spindle-phase-b encoder.3.phase-B footnote:[It is because +we selected 'non-quadrature simple counting...' above that we +can get away with 'quadrature' counting without having any +B quadrature input.] +net spindle-index encoder.3.phase-Z <= parport.0.pin-11-in +---- == Spindle At Speed[[sec:Spindle-At-Speed]] @@ -186,7 +201,7 @@ To enable EMC to wait for the spindle to be at speed before executing a series of moves you need to set motion.spindle-at-speed to true when the spindle is at the commanded speed. To do this you need spindle feedback from an encoder. Since the feedback and the commanded speed -are not usually *exactly* the same you need to use the "near" +are not usually 'exactly' the same you need to use the 'near' component to say that the two numbers are close enough. The connections needed are from the spindle @@ -202,20 +217,21 @@ file to enable Spindle At Speed. If you already have near in your HAL file then increase the count and adjust code to suit. Check to make sure the signal names are the same in your HAL file. - # load a "near" component and attach it to a thread - loadrt near - addf near.0 servo-thread - - # connect one input to the commanded spindle speed - net spindle-cmd => near.0.in1 +---- +# load a near component and attach it to a thread +loadrt near +addf near.0 servo-thread - # connect one input to the encoder-measured spindle speed - net spindle-velocity => near.0.in2 +# connect one input to the commanded spindle speed +net spindle-cmd => near.0.in1 - # connect the output to the spindle-at-speed input - net spindle-at-speed motion.spindle-at-speed <= near.0.out +# connect one input to the encoder-measured spindle speed +net spindle-velocity => near.0.in2 - # set the spindle speed inputs to agree if within 1% - setp near.0.scale 1.01 +# connect the output to the spindle-at-speed input +net spindle-at-speed motion.spindle-at-speed <= near.0.out +# set the spindle speed inputs to agree if within 1% +setp near.0.scale 1.01 +---- diff --git a/docs/src/examples/spindle_es.txt b/docs/src/examples/spindle_es.txt index f32db6d..701a2f7 100644 --- a/docs/src/examples/spindle_es.txt +++ b/docs/src/examples/spindle_es.txt @@ -1,3 +1,6 @@ +:lang: es +:toc: + = Spindle Control[[cha:Spindle-Control]] (((Spindle Control))) @@ -10,32 +13,37 @@ you're using a DAC card like the m5i20 to output the control signal: First you need to figure the scale of spindle speed to control signal. For this example the spindle top speed of 5000 RPM is equal to 10 -volts. latexmath:[$ \frac{10 Volts}{5000 RPM} = 0.002 $] so our scale -factor is latexmath:[$ \frac{0.002 Volts}{1 RPM} $] +volts. + +image::images/spindle-math.png[align="center"] We have to add a scale component to the HAL file to scale the motion.spindle-speed-out to the 0 to 10 needed by the VFD if your DAC card does not do scaling. - loadrt scale count=1 - addf scale.0 servo-thread - setp scale.0.gain 0.002 - net spindle-speed-scale motion.spindle-speed-out => scale.0.in - net spindle-speed-DAC scale.0.out => <your DAC pin name> +---- +loadrt scale count=1 +addf scale.0 servo-thread +setp scale.0.gain 0.002 +net spindle-speed-scale motion.spindle-speed-out => scale.0.in +net spindle-speed-DAC scale.0.out => <your DAC pin name> +---- == PWM Spindle Speed (((PWM Spindle Speed))) If your spindle can be controlled by a PWM signal, use the pwmgen component to create the signal: - loadrt pwmgen output_type=0 - addf pwmgen.update servo-thread - addf pwmgen.make-pulses base-thread - net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value - net spindle-on motion.spindle-on => pwmgen.0.enable - net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out - # Set the spindle's top speed in RPM - setp pwmgen.0.scale 1800 +---- +loadrt pwmgen output_type=0 +addf pwmgen.update servo-thread +addf pwmgen.make-pulses base-thread +net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value +net spindle-on motion.spindle-on => pwmgen.0.enable +net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out +# Set the spindle's top speed in RPM +setp pwmgen.0.scale 1800 +---- This assumes that the spindle controller's response to PWM is simple: 0% PWM gives 0 RPM, 10% PWM gives 180 RPM, etc. If there is a minimum @@ -50,21 +58,25 @@ To link these pins to a parallel port pin put something like the following in your .hal file, making sure you pick the pin that is connected to your control device. - net spindle-enable motion.spindle-on => parport.0.pin-14-out +---- +net spindle-enable motion.spindle-on => parport.0.pin-14-out +---- == Spindle Direction (((Spindle Direction))) If you have direction control of your spindle the HAL pins motion.spindle-forward and motion.spindle-reverse are controlled by M3 -and M4. Spindle speed "Sn" must be set to a positive non-zero value for +and M4. Spindle speed 'Sn' must be set to a positive non-zero value for M3/M4 to turn on spindle motion. To link these pins to a parallel port pin, put something like the following in your .hal file making sure you pick the pin that is connected to your control device. - net spindle-fwd motion.spindle-forward => parport.0.pin-16-out - net spindle-rev motion.spindle-reverse => parport.0.pin-17-out +---- +net spindle-fwd motion.spindle-forward => parport.0.pin-16-out +net spindle-rev motion.spindle-reverse => parport.0.pin-17-out +---- == Spindle Soft Start (((Spindle Soft Start))) @@ -87,47 +99,48 @@ to the two HAL components used in the following example. - A "limit2" is a HAL component (floating point) that accepts an input value and provides an output that has been limited to a - max/min range, and *also* limited to not exceed a specified + max/min range, and also limited to not exceed a specified rate of change. - A "near" is a HAL component (floating point) with a binary output that says whether two inputs are approximately equal. More info is available from the documentation for HAL components, -or from the man pages, just enter "man limit2" or "man near". +or from the man pages, just enter 'man limit2' or 'man near'. ********************************************************************* - # load real time a limit2 and a near with names so it is easier to follow - loadrt limit2 names=spindle-ramp - loadrt near names=spindle-at-speed +---- +# load real time a limit2 and a near with names so it is easier to follow +loadrt limit2 names=spindle-ramp +loadrt near names=spindle-at-speed - # add the functions to a thread - addf spindle-ramp servo-thread - addf spindle-at-speed servo-thread +# add the functions to a thread +addf spindle-ramp servo-thread +addf spindle-at-speed servo-thread - # set the parameter for max rate-of-change - # (max spindle accel/decel in units per second) - setp spindle-ramp.maxv 60 +# set the parameter for max rate-of-change +# (max spindle accel/decel in units per second) +setp spindle-ramp.maxv 60 - # hijack the spindle speed out and send it to spindle ramp in - net spindle-cmd <= motion.spindle-speed-out => spindle-ramp.in +# hijack the spindle speed out and send it to spindle ramp in +net spindle-cmd <= motion.spindle-speed-out => spindle-ramp.in - # the output of spindle ramp is sent to the scale in - net spindle-ramped <= spindle-ramp.out => scale.0.in +# the output of spindle ramp is sent to the scale in +net spindle-ramped <= spindle-ramp.out => scale.0.in - # to know when to start the motion we send the near component - # (named spindle-at-speed) to the spindle commanded speed from - # the signal spindle-cmd and the actual spindle speed - # provided your spindle can accelerate at the maxv setting. - net spindle-cmd => spindle-at-speed.in1 - net spindle-ramped => spindle-at-speed.in2 +# to know when to start the motion we send the near component +# (named spindle-at-speed) to the spindle commanded speed from +# the signal spindle-cmd and the actual spindle speed +# provided your spindle can accelerate at the maxv setting. +net spindle-cmd => spindle-at-speed.in1 +net spindle-ramped => spindle-at-speed.in2 - # the output from spindle-at-speed is sent to motion.spindle-at-speed - # and when this is true motion will start - net spindle-ready <= spindle-at-speed.out => motion.spindle-at-speed +# the output from spindle-at-speed is sent to motion.spindle-at-speed +# and when this is true motion will start +net spindle-ready <= spindle-at-speed.out => motion.spindle-at-speed +---- - -= Spindle Feedback[[cha:Spindle-Feedback]] += Spindle Feedback[[spindle-feedback]] (((Spindle Feedback))) @@ -142,41 +155,43 @@ Encoder Index as inputs. Hardware assumptions: - - An encoder is connected to the spindle and puts out 100 pulses per +* An encoder is connected to the spindle and puts out 100 pulses per revolution on phase A - - The encoder A phase is connected to the parallel port pin 10 - - The encoder index pulse is connected to the parallel port pin 11 +* The encoder A phase is connected to the parallel port pin 10 +* The encoder index pulse is connected to the parallel port pin 11 Basic Steps to add the components and configure them: - # add the encoder to HAL and attach it to threads.footnote:[In this - example, we will assume that some encoders have already been issued - to axes/joints 0, 1, and 2. So the next encoder available for us to - attach to the spindle would be number 3. Your situation may differ.] - loadrt encoder num_chan=1 - addf encoder.update-counters base-thread - addf encoder.capture-position servo-thread +---- +# add the encoder to HAL and attach it to threads.footnote:[In this +example, we will assume that some encoders have already been issued +to axes/joints 0, 1, and 2. So the next encoder available for us to +attach to the spindle would be number 3. Your situation may differ.] +loadrt encoder num_chan=1 +addf encoder.update-counters base-thread +addf encoder.capture-position servo-thread - # set the HAL encoder to 100 pulses per revolution. - setp encoder.3.position-scale 100 +# set the HAL encoder to 100 pulses per revolution. +setp encoder.3.position-scale 100 - # set the HAL encoder to non-quadrature simple counting using A only. - setp encoder.3.counter-mode true +# set the HAL encoder to non-quadrature simple counting using A only. +setp encoder.3.counter-mode true - # connect the HAL encoder outputs to EMC2.footnote:[The HAL encoder - index-enable is an exception to the rule in that it behaves - as both an input and an output, see manual for details] - net spindle-position encoder.3.position => motion.spindle-revs - net spindle-velocity encoder.3.velocity => motion.spindle-speed-in - net spindle-index-enable encoder.3.index-enable <=> motion.spindle-index-enable +# connect the HAL encoder outputs to EMC2.footnote:[The HAL encoder +index-enable is an exception to the rule in that it behaves +as both an input and an output, see manual for details] +net spindle-position encoder.3.position => motion.spindle-revs +net spindle-velocity encoder.3.velocity => motion.spindle-speed-in +net spindle-index-enable encoder.3.index-enable <=> motion.spindle-index-enable - # connect the HAL encoder inputs to the real encoder. - net spindle-phase-a encoder.3.phase-A <= parport.0.pin-10-in - net spindle-phase-b encoder.3.phase-B footnote:[It is because - we selected "non-quadrature simple counting..." above that we - can get away with "quadrature" counting without having any - B quadrature input.] - net spindle-index encoder.3.phase-Z <= parport.0.pin-11-in +# connect the HAL encoder inputs to the real encoder. +net spindle-phase-a encoder.3.phase-A <= parport.0.pin-10-in +net spindle-phase-b encoder.3.phase-B footnote:[It is because +we selected 'non-quadrature simple counting...' above that we +can get away with 'quadrature' counting without having any +B quadrature input.] +net spindle-index encoder.3.phase-Z <= parport.0.pin-11-in +---- == Spindle At Speed[[sec:Spindle-At-Speed]] @@ -186,7 +201,7 @@ To enable EMC to wait for the spindle to be at speed before executing a series of moves you need to set motion.spindle-at-speed to true when the spindle is at the commanded speed. To do this you need spindle feedback from an encoder. Since the feedback and the commanded speed -are not usually *exactly* the same you need to use the "near" +are not usually 'exactly' the same you need to use the 'near' component to say that the two numbers are close enough. The connections needed are from the spindle @@ -202,20 +217,21 @@ file to enable Spindle At Speed. If you already have near in your HAL file then increase the count and adjust code to suit. Check to make sure the signal names are the same in your HAL file. - # load a "near" component and attach it to a thread - loadrt near - addf near.0 servo-thread - - # connect one input to the commanded spindle speed - net spindle-cmd => near.0.in1 +---- +# load a near component and attach it to a thread +loadrt near +addf near.0 servo-thread - # connect one input to the encoder-measured spindle speed - net spindle-velocity => near.0.in2 +# connect one input to the commanded spindle speed +net spindle-cmd => near.0.in1 - # connect the output to the spindle-at-speed input - net spindle-at-speed motion.spindle-at-speed <= near.0.out +# connect one input to the encoder-measured spindle speed +net spindle-velocity => near.0.in2 - # set the spindle speed inputs to agree if within 1% - setp near.0.scale 1.01 +# connect the output to the spindle-at-speed input +net spindle-at-speed motion.spindle-at-speed <= near.0.out +# set the spindle speed inputs to agree if within 1% +setp near.0.scale 1.01 +---- diff --git a/docs/src/examples/spindle_pl.txt b/docs/src/examples/spindle_pl.txt index f32db6d..10ae01f 100644 --- a/docs/src/examples/spindle_pl.txt +++ b/docs/src/examples/spindle_pl.txt @@ -1,3 +1,6 @@ +// :lang: pl does not work at this time for Polish Docs +:toc: + = Spindle Control[[cha:Spindle-Control]] (((Spindle Control))) @@ -10,32 +13,37 @@ you're using a DAC card like the m5i20 to output the control signal: First you need to figure the scale of spindle speed to control signal. For this example the spindle top speed of 5000 RPM is equal to 10 -volts. latexmath:[$ \frac{10 Volts}{5000 RPM} = 0.002 $] so our scale -factor is latexmath:[$ \frac{0.002 Volts}{1 RPM} $] +volts. + +image::images/spindle-math.png[align="center"] We have to add a scale component to the HAL file to scale the motion.spindle-speed-out to the 0 to 10 needed by the VFD if your DAC card does not do scaling. - loadrt scale count=1 - addf scale.0 servo-thread - setp scale.0.gain 0.002 - net spindle-speed-scale motion.spindle-speed-out => scale.0.in - net spindle-speed-DAC scale.0.out => <your DAC pin name> +---- +loadrt scale count=1 +addf scale.0 servo-thread +setp scale.0.gain 0.002 +net spindle-speed-scale motion.spindle-speed-out => scale.0.in +net spindle-speed-DAC scale.0.out => <your DAC pin name> +---- == PWM Spindle Speed (((PWM Spindle Speed))) If your spindle can be controlled by a PWM signal, use the pwmgen component to create the signal: - loadrt pwmgen output_type=0 - addf pwmgen.update servo-thread - addf pwmgen.make-pulses base-thread - net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value - net spindle-on motion.spindle-on => pwmgen.0.enable - net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out - # Set the spindle's top speed in RPM - setp pwmgen.0.scale 1800 +---- +loadrt pwmgen output_type=0 +addf pwmgen.update servo-thread +addf pwmgen.make-pulses base-thread +net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value +net spindle-on motion.spindle-on => pwmgen.0.enable +net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out +# Set the spindle's top speed in RPM +setp pwmgen.0.scale 1800 +---- This assumes that the spindle controller's response to PWM is simple: 0% PWM gives 0 RPM, 10% PWM gives 180 RPM, etc. If there is a minimum @@ -50,21 +58,25 @@ To link these pins to a parallel port pin put something like the following in your .hal file, making sure you pick the pin that is connected to your control device. - net spindle-enable motion.spindle-on => parport.0.pin-14-out +---- +net spindle-enable motion.spindle-on => parport.0.pin-14-out +---- == Spindle Direction (((Spindle Direction))) If you have direction control of your spindle the HAL pins motion.spindle-forward and motion.spindle-reverse are controlled by M3 -and M4. Spindle speed "Sn" must be set to a positive non-zero value for +and M4. Spindle speed 'Sn' must be set to a positive non-zero value for M3/M4 to turn on spindle motion. To link these pins to a parallel port pin, put something like the following in your .hal file making sure you pick the pin that is connected to your control device. - net spindle-fwd motion.spindle-forward => parport.0.pin-16-out - net spindle-rev motion.spindle-reverse => parport.0.pin-17-out +---- +net spindle-fwd motion.spindle-forward => parport.0.pin-16-out +net spindle-rev motion.spindle-reverse => parport.0.pin-17-out +---- == Spindle Soft Start (((Spindle Soft Start))) @@ -87,47 +99,48 @@ to the two HAL components used in the following example. - A "limit2" is a HAL component (floating point) that accepts an input value and provides an output that has been limited to a - max/min range, and *also* limited to not exceed a specified + max/min range, and also limited to not exceed a specified rate of change. - A "near" is a HAL component (floating point) with a binary output that says whether two inputs are approximately equal. More info is available from the documentation for HAL components, -or from the man pages, just enter "man limit2" or "man near". +or from the man pages, just enter 'man limit2' or 'man near'. ********************************************************************* - # load real time a limit2 and a near with names so it is easier to follow - loadrt limit2 names=spindle-ramp - loadrt near names=spindle-at-speed +---- +# load real time a limit2 and a near with names so it is easier to follow +loadrt limit2 names=spindle-ramp +loadrt near names=spindle-at-speed - # add the functions to a thread - addf spindle-ramp servo-thread - addf spindle-at-speed servo-thread +# add the functions to a thread +addf spindle-ramp servo-thread +addf spindle-at-speed servo-thread - # set the parameter for max rate-of-change - # (max spindle accel/decel in units per second) |