原创 旋转编码器的编程思路

2009-1-22 13:28 6929 8 11 分类: MCU/ 嵌入式

旋转编码器的应用电路为:


点击看大图



其中100pF的电容为去抖动的作用,但是软件处理的时候最好还是加上软件去抖动,以防止误判。软件去抖动最常用的就是延时和连续采样多次,在此不再详述。


AB输出波形


03d4ac8a-2205-4ed1-ad14-725854364c3c.JPG


通过输出波形图可知每个运动周期的时序为




顺时针运动



逆时针运动



A B


1 1


0 1


0 0


1 0



A B


1 1


1 0


0 0


0 1










静止状态为11
00,
A
异或B的结果为0(注1





单片机可利用定时器中断来检测AB的状态,中断时间在5~20ms之间均可。





当检测到A^B
= 0
时,表示为静止状态,记下AB的状态。


当检测到A^B
=
1
时,表示有转动,读取AB的状态,如果AB是从1101或者是从0010则为正转,反之如果AB是从1110或者是从0001则为反转。





此方法比较简单可靠,可以检测转动一格又可以检测快速转动。








1:
异或运算


异或的运算方法是一个二进制运算,C语言中用A^B表示A异或B


1^1=0
0^0=0
1^0=1
0^1=1
两者相等为0,不等为1.



原创,转载请注明出处。


PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

用户1565631 2016-4-13 14:55

这个可能是说法问题,很显然转动过程中会出现这个状态,但不是静止的。作者应该只是把他当作一个判断条件。

用户377235 2014-7-4 15:57

具参考价值,好!

用户377235 2014-4-23 23:00

为什么静止状态是A^B = 0?

用户1095637 2012-11-23 16:08

另外,可以在电路上利用A^B产生一个中断信号给MCU,使能上升沿和下降沿触发中断。 在中断程序中设一静态变量s, 每次检测到A和B有变化时将s左移两位,将A和B的新的状态值放在s的低两位,即正向旋转两次之后s的值就为1101 0010, 反向则为1110 0001,所以可以判断s的低四位或高四位,为1101和0010时可判断为正向,为1110和0001时可判断为反向。
相关推荐阅读
用户1095637 2010-05-19 11:15
THD 总谐波失真量测说明
出处:http://www.idrc.com.tw/gb_ver/menu/tec_thd.htmTHD 总谐波失真量测说明总谐波失真 THD ( Total Harmonic Distortio...
用户1095637 2010-04-19 15:21
IAR中定义EEPROM的几个问题
IAR中定义EEPROM的几个问题       在IAR for AVR中定义一个e2prom变量用__eeprom定义就可以了,如:       uint8__eeprom a[2] = {0x01...
用户1095637 2010-01-09 09:26
Loudspeaker Protection and Muting
Loudspeaker Protection and MutingRod Elliott (ESP)Updated 22 July 2007IntroductionPlease note that t...
用户1095637 2009-09-19 11:51
Qt::Setting the Application Icon
Setting the Application IconThe application icon,typically displayed in the top-left corner of an ap...
用户1095637 2009-09-14 11:35
Windows下gcc以及Qt的DLL文件调用之总结
Windows下gcc以及Qt的DLL文件调用之总结2009-06-12 10:42:58.0     来源:e800技术客关键词:  Windows     gcc     Qt     DLL  ...
用户1095637 2009-09-09 08:23
ini文件操作的測試程序(Qt Creator)
ini文件操作的測試程序平台:Qt Creatorhttps://static.assets-stash.eet-china.com/album/old-resources/2009/9/9/954c...
EE直播间
更多
我要评论
4
8
关闭 站长推荐上一条 /3 下一条