用过旋转编码器的进来指导下,这样做能减少误判吗?
本帖最后由 Jack602 于 2010-11-13 21:21 编辑旋转编码器中间脚还是接地,A相B相分别接单片机外部中断0、外部中断1
中断触发方式为下降沿
根据中断后,判断另一角是高还是低...不过精度不高,不知道有没有更好的方法 不行。 手动编码器 很多出来的波形抖动还有就是 A B两相电压停止的时候不确定 有时为高有时为低 2# yewuyi
请指教... A相下降沿中断后如果B相为高电平则正转,否则反转。 一般的手动旋转编码器内部是机械触点,有抖动的。用外中断估计比较麻烦。
我一般用定时查询,很少误码,除非编码器特别差。。。 6# coody
用定时器怎么查询? 能给个思路吗?谢谢... 3# 自然的天逸
这时候高低应该没关系的吧...又不会触发中断... 7楼,中断查询,比较上一次的状态,可以得到边沿信息。比如检测A相下降沿时B相的电平,就可以知道方向,而下降沿的个数就是步数。我一般按最高一秒5圈的速度来设计,所以一般查询速度是100us~1ms。查询可以方便的滤掉抖动。 还是找带编码器接口的mcu吧 5楼大侠说的办法可行 我以前就这么做的,能判断正反就不太怕抖动,因为正反记数可以抵消的,硬件上不用两个中断,A线中断时读B的状态就可以了,当然细微的抖动还是会造成误差的 话说我用的是2000脉冲/圈的,细微抖动太小,实际不可能。 5楼大侠说的办法可行 我以前就这么做的,能判断正反就不太怕抖动,因为正反记数可以抵消的,硬件上不用两个中断,A线中断时读B的状态就可以了,当然细微的抖动还是会造成误差的 话说我用的是2000脉冲/圈的,细微抖动 ...
armmage 发表于 2010-11-12 16:58 https://bbs.21ic.com/images/common/back.gif
如果很担心抖动,可以在进入中断,可以连读A、B两相电平3次,如果3次值均不相等,则放弃本次计数,根据3中取2的原则确定A、B电平值,再判断A的电平是否为低(A相取下降沿中断触发),如果不为低,即为抖动错误进行放弃,如果为低,则根据B相电平值进行正反转计数判断。 如果转动频率不是很高,其实用中断不如用查询,用定时查询方式能‘天然’的抑制很多干扰,再结合上一楼的方法,可以很有效的工作。 很多细节叶大侠都讲明了,首先你先确认下你编码器是多少脉冲/转的,这个值越大,抖动误差越小,如果你的编码器是朝一个方向转很少正反切换转,那么抖动影响更小,如果你是想做360度定位,我建议用绝对值编码器而不是旋转编码器。**中我那个2000脉冲的做的项目,误差很小,你不用太担心 11# armmage
这位大侠,“正反记数可以抵消”是什么意思? 本人脑袋配置低了点..能..再解释解释? 不需要中断,直接把a b 接2个普通io,最好用小于2ms的时基进行定时查询,然后看你用的飞梭的脉冲数,即360度有多少脉冲。 几乎是不会出现误码的。 我写的也是定时器查询 明天可以把代码贴上 用不用中断也无所谓,
但是关键是 正负要相抵,而且不能丢脉冲。
这次的状态必须和上次的状态相关,
这样再怎么抖动也不会产生误差。 楼主用的什么牌子型号的编码器