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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
先上代碼為敬
. t1 ~5 J& [8 V( ~* u' O
  •             if(!PinA && PinA_O && PinB) {
  •                 Now++;
  •             }PinA_O = PinA;
  •             if(!PinB && PinB_O && PinA) {
  •                 Now--;
  •             }PinB_O = PinB;
    - `5 Z$ d, y& q% y" B6 |
- a) A& ]# J4 ~: T3 D
复制代码  j8 Z! |. |5 v& y' B: k
只有六行代碼就能用EC11對Now進行加減操作
! ]7 I+ t: q( a* g
; J9 F1 W: l2 w. T为什么这样写呢?3 B1 b, v6 @! b/ ~; t
上时序图
, o; p! i! \  h5 _8 O顺时针转:
8 e' V9 ?; I1 M7 Q
. Y) }  e3 i# y/ _1 \6 o0 [2 Y& n6 u* [) u6 y3 n
逆时针转:
5 k4 R& w9 X) `' m; q
' D7 D3 O" X8 E% M) ]# Z1 f* e0 b! G$ L
我们看到,当顺时针转时
% b% `9 y* X3 w1 yPin A会早于Pin B 转低电平,反之亦然7 b6 }; J+ N/ r# W
% O! y/ M2 h' W1 Z" `
代码解读:9 o* G/ D2 o. q  l& X7 \2 g
!PinA && PinA_O && PinB//当Pin A 为低电平而之前为高电平(即下降沿)并且Pin B为高电平: h: K4 u9 k& Z
这一句就捕捉到顺时针转时序图中箭指着的那一刹那的情况
; N& V- w1 k+ M) R, a% E/ s于是Now加1" |& A# C+ W9 `

5 k- V/ t. l4 S* o& O: A  K8 ^!PinB && PinB_O && PinA//当Pin B 为低电平而之前为高电平(即下降沿)并且Pin A为高电平4 X3 a# O! Z" p) z+ U% V
这一句就捕捉到逆时针转时序图中箭指着的那一刹那的情况  z  J2 c. H% R1 z# B% j
于是Now减1
' Z, n. a) O1 r' c2 o" q3 w+ U0 N1 _! {% E* r1 J. p

4 ^/ S8 b; `. c% j7 P2 t! H5 _$ l
; n" S5 N5 c. W如果编码器不加电容消抖
0 Y: k2 O7 \. t6 M/ e% k- W" T就用软件消抖
& r8 ?, P1 Y; e! G1 L8 D9 I6 P" @0 r0 l0 z! a0 o9 u
  •         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_();
  •         }
    # R* S; \5 @+ M- p$ s% w7 C
- J3 S- M8 S6 `. {8 V' ?
复制代码$ n2 L& S# E6 U2 B: Y8 D: T6 ^
现附上小应用实例一则$ H; `# r. v2 h8 X& H2 ~8 k9 `. R; B
基如STC15F104E的EC11软串口六位密码检查程序
- S3 K6 p& p9 a2 N/ q" ~如发现顺逆时针相反,对调PinA/PinB 定义脚即可1 t! |) v, t$ D# b8 t& C8 s' v

该用户从未签到

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

该用户从未签到

3#
发表于 2022-6-24 13:51 | 只看该作者
不考慮任何不正常操作吗!
' F$ {) y/ ]8 b- Y: I不过,代码简洁易懂,挺好的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-4 15:44 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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