Re-enable drives after a fault

More
16 Aug 2024 15:15 #307929 by vick.trinity
I am using LinuxCNC to drive a PUMA type robot with brushed DC motors, encoders, and harmonics on each joint.  I have a 7i77 and 5i25 controlling 5 AMD motor drives for control.    Unfortunately, the joints do not have brakes, so every time get an FERROR fault, all drives are disabled and the arm drifts down until I can run over to the computer and re-enable the drives.
Can I alter my HAL file to pause after a fault and then re-enable the drives automatically?  I have found some messages that are on the right track like:
"I would use a combination of a timedelay hal component connected to the amp enable output, then the output of that to an and2 comp combined with the fault input from the drive, then the output of the and2 to motion.axis.N.amp-fault-in. This would essentially disable the amp's fault signal until the timdelay expires after turning on. "  from Todd Z

But, I've got to say - the HAL file is like my grasp of Spanish.  I can read it and get the gist of what is happening, but ask me to actually write something correct and I am illiterate.  I'm going to need some hand holding I'm afraid.

 

Please Log in or Create an account to join the conversation.

More
21 Aug 2024 14:52 #308297 by Todd Zuercher
Automatically re-enabling after a drive fault sounds like a really bad idea to me. What if the following error was caused by a runaway that was about to happen for some reason (such as a broken encoder wire or some other problem with the servo)? I think the better solution is to cave-in and either buy a better servo motor with integrated brake or devise a way to add a brake to your joint.

I've worked with machines that simply used a small air cylinder to push in/pull out a pin to stop the rotation of the servo motor within 1/4 turn of when the pin is engaged. The precise position was already lost due to the following error, so merely stopping the motion from continuing should be good enough. Or if more precise control is needed maybe something like a pawl or dog clutch that you could disengage when the drive is enabled with smaller teeth giving more precise location.

Please Log in or Create an account to join the conversation.

More
22 Aug 2024 13:23 #308396 by vick.trinity
Todd, thanks for your response.  You are correct, the right way to do this would be to add some sort of brake to the motor shaft.  However, due to the nature and budget of this project, that is not an option. 

One of the responses that I got from the linuxcnc facebook group for this same question might be an option: Is it possible to:

"Create a component that is called by the Ferror pin which sets the joints to zero speed and re-enables the drives sounds like the right way to do it. "?
I am also curious about your statement: "The precise position was already lost due to the following error".  I think I noticed this after I increased the Ferror settings in the INI file and then drove the arm against an object.  The end effector position reported by linuxcnc kept increasing but the arm wasn't moving.  I didn't know linuxcnc worked like this - I thought It only reported the actual position from the encoders and the "desired" position was some other value.  I haven't had to worry about this on my mill because the desired and actual position are essentially the same.

Please Log in or Create an account to join the conversation.

More
22 Aug 2024 13:41 #308397 by Aciera

The end effector position reported by linuxcnc kept increasing but the arm wasn't moving.

Sounds like something is wrong with your setup.
Could you post your hal and ini files?

Please Log in or Create an account to join the conversation.

More
22 Aug 2024 14:26 - 22 Aug 2024 14:36 #308399 by Todd Zuercher
What do you have set for your MIN_FERROR and FERROR settings in your ini file? Perhaps you need to loosen those tolerances so that you only set a following error alarm when there truly is a significant problem?

Also those two settings work together and should not necessarily be the same. The MIN_FERROR setting sets the following error limit when the joint is stopped or moving extremely slowly, and can be set to a relatively small amount (maybe the machine unit equivalent to 50-100 encoder counts). The other setting FERROR sets the following error limit for that joint at it's fastest possible movement (programed max velocity limit). Generally this should be set to something significantly larger than the MIN_FERROR. What that should be will depend on the nature of the machine. For a fast linear joint that might need to be something like 10-20mm or several degrees for a rotary one.

Edit add
Linuxcnc calculates the actual following error limit linearly between the two MIN_FERROR and FERROR settings dependent on the speed of the joint.
Last edit: 22 Aug 2024 14:36 by Todd Zuercher.

Please Log in or Create an account to join the conversation.

More
22 Aug 2024 14:49 #308401 by Todd Zuercher
As to your question about the position continuing to increase with the effector against a stop, could be explained by multiple reasons. It could be a physical issue such as flex in the machine or a coupling slipping, It could be an electrical issue such as noise causing miss reading of your encoder. It could be a Linuxcnc setting, such as the display set to show commanded position instead of actual. It could even be something is wrong with your kinematics model.

Please Log in or Create an account to join the conversation.

Time to create page: 0.127 seconds
Powered by Kunena Forum