Jack602 发表于 2010-11-12 09:26

用过旋转编码器的进来指导下,这样做能减少误判吗?

本帖最后由 Jack602 于 2010-11-13 21:21 编辑

旋转编码器中间脚还是接地,A相B相分别接单片机外部中断0、外部中断1

中断触发方式为下降沿

根据中断后,判断另一角是高还是低...不过精度不高,不知道有没有更好的方法

yewuyi 发表于 2010-11-12 10:16

不行。

自然的天逸 发表于 2010-11-12 10:30

手动编码器 很多出来的波形抖动还有就是 A B两相电压停止的时候不确定 有时为高有时为低

Jack602 发表于 2010-11-12 11:43

2# yewuyi

请指教...

yewuyi 发表于 2010-11-12 11:48

A相下降沿中断后如果B相为高电平则正转,否则反转。

coody 发表于 2010-11-12 11:49

一般的手动旋转编码器内部是机械触点,有抖动的。用外中断估计比较麻烦。
我一般用定时查询,很少误码,除非编码器特别差。。。

Jack602 发表于 2010-11-12 11:57

6# coody

用定时器怎么查询? 能给个思路吗?谢谢...

Jack602 发表于 2010-11-12 11:59

3# 自然的天逸

这时候高低应该没关系的吧...又不会触发中断...

coody 发表于 2010-11-12 12:22

7楼,中断查询,比较上一次的状态,可以得到边沿信息。比如检测A相下降沿时B相的电平,就可以知道方向,而下降沿的个数就是步数。我一般按最高一秒5圈的速度来设计,所以一般查询速度是100us~1ms。查询可以方便的滤掉抖动。

ar_dong 发表于 2010-11-12 12:27

还是找带编码器接口的mcu吧

armmage 发表于 2010-11-12 16:58

5楼大侠说的办法可行 我以前就这么做的,能判断正反就不太怕抖动,因为正反记数可以抵消的,硬件上不用两个中断,A线中断时读B的状态就可以了,当然细微的抖动还是会造成误差的 话说我用的是2000脉冲/圈的,细微抖动太小,实际不可能。

yewuyi 发表于 2010-11-12 20:25

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相电平值进行正反转计数判断。

yewuyi 发表于 2010-11-12 20:27

如果转动频率不是很高,其实用中断不如用查询,用定时查询方式能‘天然’的抑制很多干扰,再结合上一楼的方法,可以很有效的工作。

armmage 发表于 2010-11-12 21:18

很多细节叶大侠都讲明了,首先你先确认下你编码器是多少脉冲/转的,这个值越大,抖动误差越小,如果你的编码器是朝一个方向转很少正反切换转,那么抖动影响更小,如果你是想做360度定位,我建议用绝对值编码器而不是旋转编码器。**中我那个2000脉冲的做的项目,误差很小,你不用太担心

Jack602 发表于 2010-11-12 22:03

11# armmage

这位大侠,“正反记数可以抵消”是什么意思? 本人脑袋配置低了点..能..再解释解释?

zjw5000 发表于 2010-11-12 22:06

不需要中断,直接把a b 接2个普通io,最好用小于2ms的时基进行定时查询,然后看你用的飞梭的脉冲数,即360度有多少脉冲。 几乎是不会出现误码的。

自然的天逸 发表于 2010-11-12 22:42

我写的也是定时器查询

自然的天逸 发表于 2010-11-12 22:43

明天可以把代码贴上

QuakeGod 发表于 2010-11-13 00:44

用不用中断也无所谓,
但是关键是 正负要相抵,而且不能丢脉冲。
这次的状态必须和上次的状态相关,
这样再怎么抖动也不会产生误差。

isoar 发表于 2010-11-13 07:56

楼主用的什么牌子型号的编码器
页: [1] 2 3
查看完整版本: 用过旋转编码器的进来指导下,这样做能减少误判吗?