Is there a way how to detect that a servo move has been stopped based on “CH” or “CL” current limit modifier?
I have a simple “CNC” setup and I would like to discard next steps if a step failed for this reason (obstruction or something).
@vcechura Interesting question. After a bit of discussion internally, there is unfortunately no way to currently poll the servo to see if the reason it’s holding is because of the CH command with the following exceptions:
If the servo has not reached the desired position (you know where the servo was sent and you can query its actual position and status, then you know it’s reached holding mode before the desired position).
As for CL, unless you specifically send a Limp command when the end position is reached, unless the servo is in error mode, it is likely the CL command which has caused the servo to go limp. You could periodically poll the status and angle, or alternatively, poll the current and see if it reaches close to the limit you set.
Not an ideal work-around, but being able to determine in some way that the servo has stopped due to CL or CH is not a bad idea which we may look into adding in a subsequent firmware release.
@cbenson I already tried some position checking, and the servos seem to tolerate some small difference from the target e.g. they end up at -4 instead of 0 (no CL/CH used). Would you know how much they tolerate so that I can account for that when I do the check? The CNC table feed makes 1.5 mm per round which means I work with rather large virtual position values (1 inch travel means 60960 positions) if that can make any difference for the tolerance.
The CL-limp-check idea is what I’m using by now, and it seems it could work in my setup (have do more tests yet).
@vcechura Sounds like the deviation is -0.4 out of 360.0 A deviation of ±0.5 is normal if there’s resistance at the final position and depends on how much torque would be needed to move it in order to get the final position more accurate.