Recognition of Spindle Emergency Stop

More
2 years 9 months ago #291278 by Gnevko
Hi people!

I'm trying to create the simple hal configuration file for the spindle (servo motor), driwing with step/dir instruction. My problem at the moment is, how to stop programm (or mashine at all), if spindle becomes an error and doesn't rotate anymore ? In the following hal configuration I try to use spindle.0.brake but it seems to be not a good idea.
Code:
#******************* #  SPINDLE #******************* setp    hm2_7i95.0.encoder.05.counter-mode 0 setp    hm2_7i95.0.encoder.05.filter 1 setp    hm2_7i95.0.encoder.05.index-invert 0 setp    hm2_7i95.0.encoder.05.index-mask 0 setp    hm2_7i95.0.encoder.05.index-mask-invert 0 setp    hm2_7i95.0.encoder.05.scale           [SPINDLE_0]ENCODER_SCALE setp   hm2_7i95.0.stepgen.05.dirsetup        [SPINDLE_0]DIRSETUP setp   hm2_7i95.0.stepgen.05.dirhold         [SPINDLE_0]DIRHOLD setp   hm2_7i95.0.stepgen.05.steplen         [SPINDLE_0]STEPLEN setp   hm2_7i95.0.stepgen.05.stepspace       [SPINDLE_0]STEPSPACE setp   hm2_7i95.0.stepgen.05.position-scale  [SPINDLE_0]OUTPUT_SCALE setp   hm2_7i95.0.stepgen.05.step_type        0 #0 = Step/Dir setp   hm2_7i95.0.stepgen.05.control-type     1 #1 = velocity control mode setp   hm2_7i95.0.stepgen.05.maxaccel        [SPINDLE_0]STEPGEN_MAXACCEL setp   hm2_7i95.0.stepgen.05.maxvel          [SPINDLE_0]STEPGEN_MAXVEL #connect the encoder to the spindle net spindle-velocity-signal hm2_7i95.0.encoder.05.velocity #the hal signal will be used in more places net spindle-speed-out-signal spindle.0.speed-out #the hal signal will be used in more places net spindle-pos-encoder   hm2_7i95.0.encoder.05.position => spindle.0.revs net spindle-velocity-signal => spindle.0.speed-in net spindle-index-enable  hm2_7i95.0.encoder.05.index-enable <=> spindle.0.index-enable #connect the spindle to the step generator net spindle-enable spindle.0.on => hm2_7i95.0.stepgen.05.enable net spindle-speed-out-signal => hm2_7i95.0.stepgen.05.velocity-cmd #******************* #stopping the program if the spindle fails #******************* loadrt near names=near_spindle_stop           # spindle stop reset, regardless of the reason loadrt timedelay names=timedelay_spindle_stop # time delay for switching to emergency shutdown mode loadrt and2 names=and2_spindle_stop_logic     # spindle stop - is the spindle stop planned or is it an emergency? # Add the new components to the servo thread addf near_spindle_stop servo-thread addf timedelay_spindle_stop servo-thread addf and2_spindle_stop_logic servo-thread setp near_spindle_stop.scale 1 #default value setp near_spindle_stop.difference [SPINDLE_0]MAX_ERROR  # Threshold for detecting spindle stop setp timedelay_spindle_stop.on-delay 0  # The time, in seconds, for which in must be true before out becomes true setp timedelay_spindle_stop.off-delay [SPINDLE_0]DELAY_TIME  # Immediate deactivation delay (optional) net spindle-velocity-signal => near_spindle_stop.in2 net near-spindle-stopped near_spindle_stop.out => timedelay_spindle_stop.in # Logic to determine if the spindle stop is expected net spindle-brake-commanded spindle.0.brake  => and2_spindle_stop_logic.in0 net and2-spindle-stopped timedelay_spindle_stop.out => and2_spindle_stop_logic.in1 # Only trigger emergency stop if the stop was unexpected net unexpected-spindle-stop and2_spindle_stop_logic.out => halui.estop.activate

Thank you in advance!

Please Log in to join the conversation.

More
2 years 9 months ago #291283 by spumco
Assuming your servo amp has a fault output, I would use motion.spindle.N.amp-fault-in.

linuxcnc.org/docs/devel/html/man/man9/mo....html#SPINDLE%20PINS

You will likely need to check and perhaps edit how 'fault' is defined in your drive and make sure that definition covers everything you consider a fault.  Like over-current, following error, etc.

Keep in mind that halui pins don't work while the machine in running a program (auto mode), so halui.estop.activate won't work like I think you want.

Bonus: if you have other components you want to trigger an estop (or similar fault condition), a somewhat recent addition to LCnC are motion.misc-error-NN pins.  These are defined in the same HAL line as your digital-in/analog-in values.  Thusly:

num_dio=[EMCMOT](DIO) num_aio=[EMCMOT](AIO) num_misc_error=[EMCMOT](MISC_ERRORS)

Please Log in to join the conversation.

More
2 years 9 months ago #291330 by Gnevko
Thank you for your response; it was truly helpful!

My initial idea was to compare the stepgen command and encoder input to identify spindle motor faults. However, using an AMP signal is a more effective approach, despite the drawback of requiring the installation of an additional signal cable.

Please Log in to join the conversation.

More
2 years 9 months ago #291350 by Gnevko
Now it looks like this:
Code:
#******************* #stopping the program if the spindle fails #******************* net servo-amplifier-fault hm2_7i95.0.inmux.00.input-07-not => spindle.0.amp-fault-in
and it works! thank you!

Please Log in to join the conversation.

More
2 years 9 months ago #291445 by Gnevko
I understand that my question might not directly relate to the topic name, but what is the best practice for accelerating (and more importantly, decelerating) the hm2 stepgen in velocity mode?

I ask because I found a parameter like this - hm2_7i95.0.stepgen.05.maxaccel - but I couldn't find anything about deceleration.

Thank you in advance!

Please Log in to join the conversation.

More
2 years 9 months ago #291460 by Aciera
The 'maxaccel' value also applies to deceleration.

For more exposure about best practice when using hm2 stepgen in velocity mode you may want to start a new topic.

Please Log in to join the conversation.

More
2 years 9 months ago #291496 by Gnevko
thank you, you are right - the new topic is hier

Please Log in to join the conversation.

Time to create page: 0.157 seconds
Powered by Kunena Forum