〔请教〕为何对脉冲编码器的AB相输出计数反转时总是有误差?
sunwu
2005-04-20 15:00
我要对脉冲编码器的A、B相脉冲输出进行计数,但实验时发现一个奇怪的问题:电机正转时计数很准,但反转时总差那么几十个脉冲。
百思不得其解,希望各位高手来分析一下、不吝赐教。
2005-04-20 15:53
对了,刚才忘了说了,编码器是用欧姆龙的EB62-CWZ6C
2005-04-20 16:08
你用什么计数,怎么个记法呀
2005-04-20 16:15
用单片机做的,利用A相的边沿产生中断,上升沿时若b相为低(代表正转)则加计数,下降沿时若b相为低(代表反转)则减计数。
2005-04-20 17:15
反转时差几十个脉冲是什么意思?误差本身是无规律的还是有规律的?若A相上升沿时B相为高,若A相下降沿时B相为高是如何处理的?
2005-04-20 17:52
to 刘岩利
若A相上升沿时或者A相下降沿时B相为高均不进行计数。
这种方式当电机正转时计量编码器的脉冲个数很准,偶尔差1个脉冲,可以接受。但电机反转时误差较大,没有什么规律,但总差那么20个左右。比如说,编码器是2000线,我让电机精确地转10圈,此时若采用AB相计数则正转时应计到20000个,反转时应为-20000。编码器的脉冲频率在10K左右。
硬件电路似乎没有什么问题,我找个能输出脉冲的模块输出20K的脉冲到我的板子上也计得很准。
刘工能提些建议吗? 其它各位高手也请不吝赐教。我现在是非常纳闷。在此也先谢过了。
2005-04-20 17:56
再补充一下,我让编码器的脉冲频率降到5K(控制电机的转速)时,正反转计数都是比较准的。
是我的AB相计数方法有问题?还是编码器的输出脉冲有特殊之处?
2005-04-21 09:07
个人认为,计数方式有问题。即使排除所有其它因素,编码器每次换向时,你的计数器都可能会丢数。您所用的编码器型号我不清楚,但是,通常编码器输出的AB信号是正交方波。理论上,编码器信号会出现B相为稳定电平,A相为方波的情况,这时,编码器其实只是一个脉冲范围内的原地晃动,而对你的计数器而言,会认为位置已经跑开很远了。
另外,可能的因素还有,但是电机的速度够不够稳,平均每秒5转的情况下,是否会有比较大的瞬时速度?编码器输出A、B两相之间的相位差是否能保证是90度?示波器上能否看到干扰信号?
2005-04-21 09:38
Sunwu:你好,你这种做法可以实现正反计数,你说用20K的脉冲计过,很准,那可以排除是单片机的处理中断时间是够了。我估计你的20多个脉冲是20多个吧,也就是说一圈2000个的话,你没走一圈已计数2000个了吧。这是由于你这种计数的方法的缺陷造成的。当编码器在很微小的角度来回动话,意思是说B相不变化,只有A相出现高低冲时,你的程序就以为已走过了角度,(A相出现了上升沿)就产生了中断,就产生加减计数了。你应把B相的上升沿和下降沿用上,但程序会比较复杂。你这种做法,假如说B相坏了,使终是高电平或低电平,只要转编码器的话,就始终是增计数或减计数了。顺便问一下,你用C做的还是汇编做的。有空交流:sunhl77@163.com
2005-04-21 12:29
这种计数方法是不行的,除非电机不换向,只要换向或者在一个位置上摆动,则计数就会出错。实际上计数之前要利用AB的组合来判断是加还是减,利用A相上升沿作中断B相电平只能知道转向。这种错误最简单的例子,在一个位置作小范围摆动时,A相的正脉冲宽度比B相正脉冲宽度要宽。这时A相上升沿只产生一次中断,而B相由低到高然后变低,转向已经发生了改变,然而计数器只进行一次加或者减,而不是加一次然后减一次。
2005-04-21 13:47
非常感谢刘岩利、sunhl、TellTruth各位的发言建议。
我是用C语言编的计数程序,这种方式低频输入时(比如5K)还可以,高频时就计不太准了。我原来也采用了A、B相边沿组合来计数的方式,但效果更不理想,原因我想是滤波太狠的缘故吧。
我现在想这可能涉及到硬件设计、元器件选型、焊接和编码器输出脉冲的质量、信号接线以及软件等各方面的综合因素。单纯靠软件是难以比较精确地实现高频脉冲的计数了。或许在硬件上实现计数电路是一个比较好的选择,比如采用专用的计数器芯片等等。
我的email是sw126263@126.com。有机会跟大家一起讨论。我原来作过程控制比较多,对于运动控制是刚开始还没入门。希望以后大家多多帮助,先谢过了。
2005-04-21 17:14
滤波太狠?什么意思?在电路里加了阻容滤波还是在算法上加了数字滤波?
2005-04-21 17:44
呵呵,就是滤波条件太苛刻的意思,把一些不该滤的也滤掉了。
在程序中所加的一些采集条件,比如边沿等,也可以认为是一种滤波吧。
打个比方说,若要结合b相的边沿计数的话,在电机正转时的第一个脉冲(也就是说A相的第一个上升沿),百分之百会被丢掉--因为B相的边沿还没来呢。
2005-04-22 13:41
TO sunwu :
看了你前面所说的当你把电机转速降下来时,也就是使编码器的输出脉冲的频率为5K 左右时正反转都比较准时,我有一点想法。
你有没有检查过你的计数电路所能承受的最高频率,也就是说计数器它自身有一个响应频率,你的编码器的输出频率如果大于计数器的频率的话,则计数部分肯定就不准确了啊!!这个我是有亲身体验的,因为我做过这方面的实验的。
这仅仅是我的一点看法!!
2005-04-26 07:46
to 白马飞飞
我用的是软计数,不过中断程序的效率确实对计数有很大的影响,差1us效果都很明显,我也刚发现不久。
感谢你的提醒!
2005-05-09 14:21
TO sunwu :
你那个系统实验结果怎么样了?你注意到频率后,现在的正反转记数是否还有大的偏差?
哦,我是搞编码器(增量式)产品设计的,因为整天只设计接触编码器本身,所以对与之相连接的控制系统如变频器,PLC的应用不是很熟悉的。希望这方面能多向你学习!!我的E:wangfei_0992@yahoo.com.cn