Unable to reach low or high position limit setpoint

I have set position soft low limit (HLL) to -500 (-0.25 mm) and position soft high limit to 222000 (111 mm) in Granity Goals / Homing. From the documentation I get the impression that these are the absolute setpoints where it is still permitted to move. However, if I try to set these as setpoint in Granite / Testing or via Simplemotion when using buffered motion position controlling, the setpoint cannot be reached. Instead, it always falls short by approximately 20 encoder counts. There are no faults at this point and target reached status is on. If I use setpoint that is one count within the permitted range (e.g. -499), the set point can be reached accurately.

If this is by design for some reason, it should be clearly indicated in the documentation wiki.

I’m using Ioni Pro to control ballscrew stage with Hiwin AC servo with quadrature encoder feedback. I have tried firmwares 1.6.1 and 1.7.5 and both show the same problem.

Hmm, sounds some sort of rounding issue. However, on couple of tests with same HLL/HHL values I could not replicate the issue, my motor stopped always exactly at the limit value.

Could you provide the settings .drc file so we can repeat the issue and find the cause? Thanks!

Some tech background when HHL/HLL is exceeded, drive overrides the setpoint that has been calculated with floating point numbers, which may have limited accuracy. However, that large deviation I didn’t expect. That’s why it would be interesting to see all other parameter values and see how we can improve the accuracy (in FW or with parameters).

1 Like

I got the .drc file by email, thanks!

It indeed seems to be not exact where the limit stops motor and it’s affected by the Limit switch function [LFS] parameter. The “servo stop” option has characteristic of not stopping motor exactly at the limit value because when the motor is beyond the limit, drive uses dynamic braking to stop motor (not position control). If you choose LFS=“do nothing” or “disable torque” option, then drive will have active position control even at travel limits and stopping position is exact.

I hope this helps!

Thanks for the explanation.

Still, no matter the use of dynamic braking after limit, I would expect to be able to drive exactly to the limit (in terms of integer encoder counts). This is what the wiki suggests. Could possible rounding take this into account? Or then the wiki should be updated to explain this complex behavior.