有做过旋转增量式编码器的加减计数的吗?关于加减计数的误差问题。
有做过旋转增量式编码器的加减计数的吗?关于加减计数的误差问题。我的伺服电机带的编码器是2500线,AB相位差为90,电机旋转一周输出一个Z脉冲。我想把编码器做成绝对值式的一样,不管你在任何时候以任意的方式去旋转电机(正转、逆转)都能输出当前的计数值(即输出0-2499之间的一个数字)。
我实现的方法是:利用A脉冲的posedge检测B状态,如果B为1则做加计数(正转),如果B为0则做减计数(逆转)。用Z脉冲做同步清零。
现在的问题是:如果我按一个方向旋转,那么输出的数值比较接近,相差几个到几十个数值而已,但是如果我重复的正转、逆转,它输出的数值偏差就越来越大了。
猜想:由于编码器精度很高,即便电机上有很小的振动都会有AB脉冲输出(用示波器观察过),所以用手转动的时候电机不一定准确的按一个方向转,在停下来的那一刻电机可能会因为振动会往回走一点点(确实如此)。假如A脉冲刚从0变到1,还没从1变到下一个0的时候电机往回跑了一点点,自然A又从1变回刚才的0了。如果电机又往前走一点点,A又从0变到1,这样电机实际上只往一个方向移动了一个脉冲的距离,却因为上面的原因产生了两个上升沿,结果计数了两次。那么,误差就出在这了?
改进:利用posedge A检测B,如果B为1则做加计数(正转),如果B为0则保持。用negedge A检测B,如果B为1则做减计数(逆转),如果B为0则保持计数值。这样解决了上面的问题,因为电机从0变到1(做一个加计数)后如果往回跑一点点则会产生negedge,此时便做减计数了,如果电机再往前走一点点,又产生posedge,又做一个加计数,这样下来做了两个加计数和一个减计数,合起来刚好一个加计数,和电机的位移吻合。
改进后的效果:问题依旧....晕啊?????
再猜一次:是不是由于电机的微小振动使得A脉冲在同一个边沿上来回posedge和negedge,产生高频率脉冲超过了CPLD的7.5ns反应时间??我的CPLD是lattice 4000系列的。计算了一下2500线脉冲在3000rpm的时候频率是3000/60 * 2500 = 125K = 0.008ns而已啊 先用400线的编码器试试,确认了问题再想解决办法。 你的方法似乎有问题,你如果不是用控制器中的正交解码硬件做,设想:你用A的边沿看B电平决定加减,假设A有抖动,那你是不是数字变化了不止一个?其实只有一个.应该是:B为高时A的正跳变不管多少只加1,直到B恢复为0后再次变高才执行下一轮,A为高时,B的正跳变不管多少只减1,直到A恢复为0后再次变高才执行下一轮 3000/60 * 2500 = 125K = 0.008ns---------------你算错了
页:
[1]