- Configuring LinuxCNC
- Advanced Configuration
- Need help with the orient component for spindle activation (M19)
Need help with the orient component for spindle activation (M19)
15 Mar 2022 19:13 #237361
by jpg
Replied by jpg on topic Need help with the orient component for spindle activation (M19)
I put back the "spindle HAL" part if you have an idea :
# HAL config file for vismach simulation of vertical milling machine
# This file deomstrates closed-loop spindle control in both position and
loadrt encoder num_chan=2
loadrt abs count=1
loadrt scale count=1
loadrt lowpass count=1
loadrt pwmgen output_type=1
loadrt or2 count=3
addf encoder.update-counters base-thread
addf pwmgen.make-pulses base-thread
loadrt mult2 count=1
addf mult2.0 servo-thread
addf encoder.capture-position servo-thread
addf pwmgen.update servo-thread
addf abs.0 servo-thread
addf scale.0 servo-thread
addf lowpass.0 servo-thread
addf or2.0 servo-thread
addf or2.1 servo-thread
#net spindle-cmd-rpm => pwmgen.0.value
#net spindle-on <= motion.spindle-on => pwmgen.0.enable
net spindle-pwm <= pwmgen.0.pwm
setp pwmgen.0.pwm-freq 0.0
setp pwmgen.0.scale 1500.0
setp pwmgen.0.offset 0.133333333333
setp pwmgen.0.dither-pwm true
#net spindle-cmd-rpm <= motion.spindle-speed-out
net spindle-cmd-rpm-abs <= motion.spindle-speed-out-abs
net spindle-cmd-rps <= motion.spindle-speed-out-rps
net spindle-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
net spindle-at-speed => motion.spindle-at-speed
net spindle-cw <= motion.spindle-forward
net spindle-ccw <= motion.spindle-reverse
setp encoder.0.position-scale 800.000000
#net spindle-position encoder.0.position => motion.spindle-revs
#net spindle-velocity-feedback-rps encoder.0.velocity => motion.spindle-speed-in
net spindle-index-enable encoder.0.index-enable <=> motion.spindle-index-enable
net spindle-phase-a encoder.0.phase-A
net spindle-phase-b encoder.0.phase-B
net spindle-index encoder.0.phase-Z
#net spindle-cw => parport.0.pin-14-out
#net spindle-ccw => parport.0.pin-16-out
setp parport.0.pin-17-out-invert 1
net spindle-pwm pwmgen.0.pwm parport.0.pin-17-out
net spindle-index <= parport.0.pin-11-in-not
net spindle-phase-b <= parport.0.pin-12-in
net spindle-phase-a <= parport.0.pin-13-in
#net spindle-on <= motion.spindle-on
# Velocity modes.
# see wiki.linuxcnc.org/cgi-bin/wiki.pl?SpindleOrient for a diagram
# Note that the connections of the signals to "hardware" are all in the
# sim_vmc.hal file rather than here
# First load 2x pid components. These would normally have to be loaded at
# the same time as the Axis PID components
loadrt pid num_chan=2
addf pid.0.do-pid-calcs servo-thread # Velocity
addf pid.1.do-pid-calcs servo-thread # Position
loadrt orient
addf orient.0 servo-thread
loadrt mux2 #This has already been loaded in the sim_vmc.hal
addf mux2.0 servo-thread # chooses which pid output goes to the spindle speed control
#Use this to detect that the spindle is oriented
#in the 2.8 release there will be a pin for this as an output of the orient comp
#and the edge-detector isn't needed
loadrt near count=1 #(loaded in sim_vmc.hal)
loadrt edge
addf near.0 servo-thread
addf edge.0 servo-thread
setp edge.0.both 0
setp edge.0.in-edge 0
setp edge.0.out-width-ns 10000000
net spindle-pos pid.1.feedback orient.0.position
net spindle-vel pid.0.feedback encoder.0.velocity => motion.spindle-speed-in
net spindle-vel-cmd motion.spindle-speed-out pid.0.command
net spindle-vel-pid pid.0.output mux2.0.in0
net spindle-pos pid.1.feedback orient.0.position near.0.in1 encoder.0.position => motion.spindle-revs
net spindle-pos-cmd orient.0.command pid.1.command near.0.in2
net spindle-angle motion.spindle-orient-angle orient.0.angle
net spindle-pos-pid pid.1.output mux2.0.in1
setp near.0.difference 0.0005
net spindle-in-pos-raw near.0.out edge.0.in #not needed v2.8+, use orient.0.is-oriented
net spindle-in-pos edge.0.out motion.spindle-is-oriented
# this switches modes
net orient-mode motion.spindle-orient orient.0.enable pid.1.enable mux2.0.sel
net velocity-mode motion.spindle-on pid.0.enable pwmgen.0.enable
net orient-dir motion.spindle-orient-mode orient.0.mode
# this is simple for the simulated spindle.
#net spindle-cmd mux2.0.out
#for a real spindle run by a VFD
# loadrt abs
# addf abs.0.servo-thread
net spindle-cmd-fb-filtered-rps mux2.0.out abs.0.in
net spindle-fb-filtered-cmd-abs-rpm abs.0.out pwmgen.0.value => scale.0.in
#net spindle-fb-filtered-abs-rps abs.0.out => scale.0.in
setp parport.0.pin-17-out-invert 1
net spindle-pwm pwmgen.0.pwm parport.0.pin-17-out
net spindle-fwd abs.0.is-positive parport.0.pin-14-out
net spindle-rev abs.0.is-negative parport.0.pin-16-out
# Tune the PID from the INI values
setp pid.0.Pgain [SPINDLE]PGAIN_V
setp pid.0.Igain [SPINDLE]IGAIN_V
setp pid.0.Dgain [SPINDLE]DGAIN_V
setp pid.0.FF0 [SPINDLE]FF0_V
setp pid.0.FF1 [SPINDLE]FF1_V
setp pid.1.Pgain [SPINDLE]PGAIN_P
setp pid.1.Igain [SPINDLE]IGAIN_P
setp pid.1.Dgain [SPINDLE]DGAIN_P
setp pid.1.FF0 [SPINDLE]FF0_P
setp pid.1.FF1 [SPINDLE]FF1_P
# HAL config file for vismach simulation of vertical milling machine
# This file deomstrates closed-loop spindle control in both position and
loadrt encoder num_chan=2
loadrt abs count=1
loadrt scale count=1
loadrt lowpass count=1
loadrt pwmgen output_type=1
loadrt or2 count=3
addf encoder.update-counters base-thread
addf pwmgen.make-pulses base-thread
loadrt mult2 count=1
addf mult2.0 servo-thread
addf encoder.capture-position servo-thread
addf pwmgen.update servo-thread
addf abs.0 servo-thread
addf scale.0 servo-thread
addf lowpass.0 servo-thread
addf or2.0 servo-thread
addf or2.1 servo-thread
#net spindle-cmd-rpm => pwmgen.0.value
#net spindle-on <= motion.spindle-on => pwmgen.0.enable
net spindle-pwm <= pwmgen.0.pwm
setp pwmgen.0.pwm-freq 0.0
setp pwmgen.0.scale 1500.0
setp pwmgen.0.offset 0.133333333333
setp pwmgen.0.dither-pwm true
#net spindle-cmd-rpm <= motion.spindle-speed-out
net spindle-cmd-rpm-abs <= motion.spindle-speed-out-abs
net spindle-cmd-rps <= motion.spindle-speed-out-rps
net spindle-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
net spindle-at-speed => motion.spindle-at-speed
net spindle-cw <= motion.spindle-forward
net spindle-ccw <= motion.spindle-reverse
setp encoder.0.position-scale 800.000000
#net spindle-position encoder.0.position => motion.spindle-revs
#net spindle-velocity-feedback-rps encoder.0.velocity => motion.spindle-speed-in
net spindle-index-enable encoder.0.index-enable <=> motion.spindle-index-enable
net spindle-phase-a encoder.0.phase-A
net spindle-phase-b encoder.0.phase-B
net spindle-index encoder.0.phase-Z
#net spindle-cw => parport.0.pin-14-out
#net spindle-ccw => parport.0.pin-16-out
setp parport.0.pin-17-out-invert 1
net spindle-pwm pwmgen.0.pwm parport.0.pin-17-out
net spindle-index <= parport.0.pin-11-in-not
net spindle-phase-b <= parport.0.pin-12-in
net spindle-phase-a <= parport.0.pin-13-in
#net spindle-on <= motion.spindle-on
# Velocity modes.
# see wiki.linuxcnc.org/cgi-bin/wiki.pl?SpindleOrient for a diagram
# Note that the connections of the signals to "hardware" are all in the
# sim_vmc.hal file rather than here
# First load 2x pid components. These would normally have to be loaded at
# the same time as the Axis PID components
loadrt pid num_chan=2
addf pid.0.do-pid-calcs servo-thread # Velocity
addf pid.1.do-pid-calcs servo-thread # Position
loadrt orient
addf orient.0 servo-thread
loadrt mux2 #This has already been loaded in the sim_vmc.hal
addf mux2.0 servo-thread # chooses which pid output goes to the spindle speed control
#Use this to detect that the spindle is oriented
#in the 2.8 release there will be a pin for this as an output of the orient comp
#and the edge-detector isn't needed
loadrt near count=1 #(loaded in sim_vmc.hal)
loadrt edge
addf near.0 servo-thread
addf edge.0 servo-thread
setp edge.0.both 0
setp edge.0.in-edge 0
setp edge.0.out-width-ns 10000000
net spindle-pos pid.1.feedback orient.0.position
net spindle-vel pid.0.feedback encoder.0.velocity => motion.spindle-speed-in
net spindle-vel-cmd motion.spindle-speed-out pid.0.command
net spindle-vel-pid pid.0.output mux2.0.in0
net spindle-pos pid.1.feedback orient.0.position near.0.in1 encoder.0.position => motion.spindle-revs
net spindle-pos-cmd orient.0.command pid.1.command near.0.in2
net spindle-angle motion.spindle-orient-angle orient.0.angle
net spindle-pos-pid pid.1.output mux2.0.in1
setp near.0.difference 0.0005
net spindle-in-pos-raw near.0.out edge.0.in #not needed v2.8+, use orient.0.is-oriented
net spindle-in-pos edge.0.out motion.spindle-is-oriented
# this switches modes
net orient-mode motion.spindle-orient orient.0.enable pid.1.enable mux2.0.sel
net velocity-mode motion.spindle-on pid.0.enable pwmgen.0.enable
net orient-dir motion.spindle-orient-mode orient.0.mode
# this is simple for the simulated spindle.
#net spindle-cmd mux2.0.out
#for a real spindle run by a VFD
# loadrt abs
# addf abs.0.servo-thread
net spindle-cmd-fb-filtered-rps mux2.0.out abs.0.in
net spindle-fb-filtered-cmd-abs-rpm abs.0.out pwmgen.0.value => scale.0.in
#net spindle-fb-filtered-abs-rps abs.0.out => scale.0.in
setp parport.0.pin-17-out-invert 1
net spindle-pwm pwmgen.0.pwm parport.0.pin-17-out
net spindle-fwd abs.0.is-positive parport.0.pin-14-out
net spindle-rev abs.0.is-negative parport.0.pin-16-out
# Tune the PID from the INI values
setp pid.0.Pgain [SPINDLE]PGAIN_V
setp pid.0.Igain [SPINDLE]IGAIN_V
setp pid.0.Dgain [SPINDLE]DGAIN_V
setp pid.0.FF0 [SPINDLE]FF0_V
setp pid.0.FF1 [SPINDLE]FF1_V
setp pid.1.Pgain [SPINDLE]PGAIN_P
setp pid.1.Igain [SPINDLE]IGAIN_P
setp pid.1.Dgain [SPINDLE]DGAIN_P
setp pid.1.FF0 [SPINDLE]FF0_P
setp pid.1.FF1 [SPINDLE]FF1_P
Please Log in or Create an account to join the conversation.
15 Mar 2022 21:50 #237388
by andypugh
Is pwmgen.0.enable set in orient mode? It looks like it isn't.
Replied by andypugh on topic Need help with the orient component for spindle activation (M19)
# this switches modes
net orient-mode motion.spindle-orient orient.0.enable pid.1.enable mux2.0.sel
net velocity-mode motion.spindle-on pid.0.enable pwmgen.0.enable
net orient-dir motion.spindle-orient-mode orient.0.mode
Is pwmgen.0.enable set in orient mode? It looks like it isn't.
Please Log in or Create an account to join the conversation.
15 Mar 2022 21:57 #237390
by jpg
Replied by jpg on topic Need help with the orient component for spindle activation (M19)
How to define it in this mode?
Please Log in or Create an account to join the conversation.
15 Mar 2022 23:51 #237413
by andypugh
Replied by andypugh on topic Need help with the orient component for spindle activation (M19)
Can you check with halmeter if it is or isn't enabled first?
If it isn't, then the answer is probably an "or2" component so that the pwmgen is enabled if the spindle is on or orient is active. Something a bit like:
But it is likely that you already have an or2 loaded somewhere, so need to add an extra and then this new one won't be or2.0
If it isn't, then the answer is probably an "or2" component so that the pwmgen is enabled if the spindle is on or orient is active. Something a bit like:
loadrt or2
...
addf or2.0 servo-thread
...
# this switches modes
net orient-mode motion.spindle-orient orient.0.enable pid.1.enable mux2.0.sel or2.0.in0
net velocity-mode motion.spindle-on pid.0.enable or2.0.in1
net spindle-pwm-enable or2.0.out pwmgen.0.enable
net orient-dir motion.spindle-orient-mode orient.0.mode
But it is likely that you already have an or2 loaded somewhere, so need to add an extra and then this new one won't be or2.0
The following user(s) said Thank You: jpg
Please Log in or Create an account to join the conversation.
16 Mar 2022 05:39 - 16 Mar 2022 06:01 #237435
by jpg
Thanks Andy, I'm watching this tonight when I get home from work and nothing changes?
"net spindle-fwd abs.0.is-positive parport.0.pin-14-out
net spindle-rev abs.0.is-negative parport.0.pin-16-out"
well, I just tried it, ... it works both ways!! yes!! bravo and a big thank you to you Andy
there is just a little curious thing, when I type M19 r25 (and only with this value), the spindle does not stop and starts again in the other direction and only with this value, curious
Replied by jpg on topic Need help with the orient component for spindle activation (M19)
"net spindle-fwd abs.0.is-positive parport.0.pin-14-out
net spindle-rev abs.0.is-negative parport.0.pin-16-out"
well, I just tried it, ... it works both ways!! yes!! bravo and a big thank you to you Andy
there is just a little curious thing, when I type M19 r25 (and only with this value), the spindle does not stop and starts again in the other direction and only with this value, curious
Last edit: 16 Mar 2022 06:01 by jpg.
Please Log in or Create an account to join the conversation.
16 Mar 2022 11:10 #237458
by andypugh
Replied by andypugh on topic Need help with the orient component for spindle activation (M19)
Have you tried tuning the PID values?
Please Log in or Create an account to join the conversation.
16 Mar 2022 12:17 #237463
by jpg
Replied by jpg on topic Need help with the orient component for spindle activation (M19)
hello, I try your values tonight, but I already noticed that with M19 R25 , ORIENT do not stop
you have to type M5
you have to type M5
Please Log in or Create an account to join the conversation.
16 Mar 2022 12:31 #237465
by andypugh
Replied by andypugh on topic Need help with the orient component for spindle activation (M19)
"Tuning" isn't using my values, it is adjusting the values to get the best response. I have no way to know what the right numbers are.
As for the not stopping thing, does it oscillate around the set angle, or does it rotate continuously?
As for the not stopping thing, does it oscillate around the set angle, or does it rotate continuously?
The following user(s) said Thank You: jpg
Please Log in or Create an account to join the conversation.
16 Mar 2022 18:45 - 16 Mar 2022 18:49 #237484
by jpg
Replied by jpg on topic Need help with the orient component for spindle activation (M19)
Good evening Andy, I have just made some tests by modifying INI, the whole works very well, what is just curious, they are specific values which do not stop the spindle in ORIENT mode, I noted these values there: M19 r25, r65 and r155 (with these values, the spindle does not stop and restarts in the other direction) the values M19 R24.9 work (finally, the spindle stops), ORIENT seems to be allergic to these 3 angles, strange?
Last edit: 16 Mar 2022 18:49 by jpg.
Please Log in or Create an account to join the conversation.
16 Mar 2022 19:21 #237487
by andypugh
Replied by andypugh on topic Need help with the orient component for spindle activation (M19)
Very, very strange.
Do you need those angles, or just 0 for toolchange?
Do you need those angles, or just 0 for toolchange?
Please Log in or Create an account to join the conversation.
- Configuring LinuxCNC
- Advanced Configuration
- Need help with the orient component for spindle activation (M19)
Time to create page: 0.126 seconds