搜索
bottom↓
回复: 3

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

[复制链接]

出0入0汤圆

发表于 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而已啊

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入0汤圆

发表于 2011-5-20 09:03:51 | 显示全部楼层
先用400线的编码器试试,确认了问题再想解决办法。

出0入0汤圆

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

出0入0汤圆

发表于 2011-5-20 11:02:25 | 显示全部楼层
3000/60 * 2500 = 125K = 0.008ns---------------你算错了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-16 20:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表