引用
引用第9楼冲出枪林弹雨于2024-03-18 22:46发表的 :
这个要看看驱动器的寄存器是哪一种,有的是直接给出脉冲总数,有的是分多圈和单圈;楼上的说了脉冲总数的,下面是另一种:485实时读多圈和单圈寄存器数据;多圈寄存器是电机转一圈 +1;单圈寄存器就是编码器硬件精度,比如23位编码器就是8388608个脉冲;实际位置就是 = 多圈寄存器*电机转一圈的位移距离 + { (当前单圈寄存器 - 设定原点时的单圈寄存器) / 8388608 }*电机转一圈的位移距离
程序上注意点一个是要有个设原点的按钮,就是获取当前单圈寄存器当做原点单圈寄存器数;另一个就是通讯延时的问题,电机速度为0后的100ms以上数据再保存,位置会比较准
当然了,也可以直接把总数设置为原点位置,以下供参考:
PROGRAM Main VAR MultiTurnValue : INT; // 多圈寄存器的值 SingleTurnValue : INT; // 单圈寄存器的值 AbsolutePosition : INT; // 绝对位置值 MaxSingleTurnValue : INT := 8388608; // 23位编码器单圈最大值为8388608 END_VAR // 计算绝对位置 // 绝对位置是多圈值乘以单圈的最大值加上单圈值 AbsolutePosition := (MultiTurnValue * MaxSingleTurnValue) + SingleTurnValue; END_PROGRAM