pengjunjun0807 发表于 2011-5-19 00:34:14

有做过旋转增量式编码器的加减计数的吗?关于加减计数的误差问题。

有做过旋转增量式编码器的加减计数的吗?关于加减计数的误差问题。


我的伺服电机带的编码器是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而已啊

xmjulytiger 发表于 2011-5-20 09:03:51

先用400线的编码器试试,确认了问题再想解决办法。

NJ8888 发表于 2011-5-20 10:52:46

你的方法似乎有问题,你如果不是用控制器中的正交解码硬件做,设想:你用A的边沿看B电平决定加减,假设A有抖动,那你是不是数字变化了不止一个?其实只有一个.应该是:B为高时A的正跳变不管多少只加1,直到B恢复为0后再次变高才执行下一轮,A为高时,B的正跳变不管多少只减1,直到A恢复为0后再次变高才执行下一轮

NJ8888 发表于 2011-5-20 11:02:25

3000/60 * 2500 = 125K = 0.008ns---------------你算错了
页: [1]
查看完整版本: 有做过旋转增量式编码器的加减计数的吗?关于加减计数的误差问题。