问题现象:
控制电机运动到某个目标位置,然后不断查询DRV_STATUS(0x6F)的31bit位stst是否为停止状态,发现stst=1停止后,过了几十ms,有时候几百ms,stst又变成了0,持续了几十ms后,stst最终又变成了1。
通过测试发现,就是离目标位置还有1微步的时候,出现以上现象,举例说明:目标位置10000,当实际位置变为9999时,stst第一次变成了1,然后过了一段时间,向10000移动,因此stst=0,最终到达10000,stst=1。
解决方案:
临时解决方案,如果是通过stst来做一些逻辑判断,在第一次stst=1时,可以下发一个stop指令,这样stst就不会再改变。
长久解决方案,查询VSTOP寄存器(0x2B),发现默认设置是1,即速度减到 1 以后,斜坡发生器用极低速去吃掉最后 1 步,驱动器的 stst 会先误判为静止。根据手册,在位置模式下,至少要设置为10。