通过旋转编码器的脉冲数计算距离,分辨率是1000,编码器滚动一圈距离为157mm。逻辑运算是将 :(脉冲数*167)/1000=移动距离。但是(脉冲数*167)得结果已经溢出(结果超出32767范围),求高手怎么办
问题出在:
1、[DMUL D170 D190 D180]这是双字整数相乘,存放结果需要4个寄存器(D183~D180)。
2、[DDIV D180 K1000 D185]这一句双字整数相除,被除数仅取D181~D180,结果错误。
解决办法:
1、采用浮点运算,即先把D171D170转换成浮点数再进行乘除。
2、或者运算顺序改为先除后乘:脉冲数/1000*167=移动距离,但由于整数除法会有余数,相乘结果会有细小误差。