找回密码
 注册
关于网站域名变更的通知
查看: 170|回复: 2
打印 上一主题 下一主题

一定位一脉冲的EC11旋转编码器最简洁的单片机驱动代码

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-24 09:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
先上代碼為敬% N: ?; `1 c, R7 a- h& G( H
  •             if(!PinA && PinA_O && PinB) {
  •                 Now++;
  •             }PinA_O = PinA;
  •             if(!PinB && PinB_O && PinA) {
  •                 Now--;
  •             }PinB_O = PinB;& R9 s2 \' b. W5 c" e; E8 T9 {0 r
& {/ f! q9 l+ c7 C7 A3 m- P, j; @
复制代码
" M3 v6 y6 N: e1 [9 D) k" o, d只有六行代碼就能用EC11對Now進行加減操作
. h6 g  l( F" {: C
. `+ b" T  d- K* S# \为什么这样写呢?
- E$ r$ ~* S* W" m/ g( f上时序图
, r( }) Q3 h8 {& X( h顺时针转:
- }7 P6 Y$ B* L* t/ s4 T$ h% a/ Z  `% Z' m. e8 i

  X, @0 T% b: O' X$ g逆时针转:, B( c" y. a3 W" P7 g7 f

, J) ?2 D/ a/ B9 F9 k9 X4 l  ^7 K+ c! m" G2 {1 o7 C
我们看到,当顺时针转时8 F4 y' n+ s  x: V
Pin A会早于Pin B 转低电平,反之亦然5 H. `2 H/ E& m& X3 p
; C2 n$ \: K3 e' P, B
代码解读:% Z5 G- r3 K# a' }9 J6 H, y; {7 R
!PinA && PinA_O && PinB//当Pin A 为低电平而之前为高电平(即下降沿)并且Pin B为高电平" L/ y9 o: ]8 W0 w
这一句就捕捉到顺时针转时序图中箭指着的那一刹那的情况
3 |( `$ K. B1 t1 F1 b$ a7 s于是Now加1- Z1 I5 {& r5 w$ X$ R$ G
9 A+ |. t; E# F& e5 s, z1 j
!PinB && PinB_O && PinA//当Pin B 为低电平而之前为高电平(即下降沿)并且Pin A为高电平  |6 I: \1 c$ D" Y% N
这一句就捕捉到逆时针转时序图中箭指着的那一刹那的情况
9 c% b' S8 _- i1 ]于是Now减1
( o, k  m5 S) A( V1 A; E9 m2 q* r" K- y9 Q  b) A1 U

' e$ N& J# |- z, J
6 F9 r7 i  P# I$ a) i+ L+ u% W; }如果编码器不加电容消抖
8 J/ s* Q' m% M( @就用软件消抖
) q* b7 z- X/ Q9 K7 Z( N" C! I  T4 h. t) t( W
  •         if(ScanCount++ > 50) {        //其数值按单片机速度加减
  •             ScanCount = 0;
  •             if(PinA && !PinA_O && PinB) {
  •                 Now++;
  •             }PinA_O = PinA;
  •             if(PinB && !PinB_O && PinA) {
  •                 Now--;
  •             }PinB_O = PinB;
  •             Now>9? Now = 0:_nop_();
  •             Now<0? Now = 9:_nop_();
  •         }1 T! V6 T8 u) ^( q* G
6 U* N7 w& G8 {5 L! ~8 H9 R
复制代码
% ?. ^* }- C( t. _0 P现附上小应用实例一则
# i- D5 K* `1 Z/ X. y* w7 }; L基如STC15F104E的EC11软串口六位密码检查程序
4 ]2 V3 L, m' p: [: F如发现顺逆时针相反,对调PinA/PinB 定义脚即可
5 b" T/ v. x, `( B

该用户从未签到

2#
发表于 2022-6-24 10:18 | 只看该作者
假如顺时针扭了一点但没到位之前逆时针扭回去了呢?

该用户从未签到

3#
发表于 2022-6-24 13:51 | 只看该作者
不考慮任何不正常操作吗!
3 M: a/ z$ D: c( E5 Q不过,代码简洁易懂,挺好的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-8 18:30 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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