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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
先上代碼為敬
( P" U5 x$ d! W6 Y
  •             if(!PinA && PinA_O && PinB) {
  •                 Now++;
  •             }PinA_O = PinA;
  •             if(!PinB && PinB_O && PinA) {
  •                 Now--;
  •             }PinB_O = PinB;" y5 N" x; ?$ j0 T2 Q/ r6 J

, I7 T! X7 s% H$ C7 N# O2 Z" U复制代码$ C' q5 T( H8 r- h* u' C8 m' Y
只有六行代碼就能用EC11對Now進行加減操作
- g7 {: y+ R# Y& l$ \4 t/ Y7 w
3 M* D3 b# ^: A. B% Y) ^为什么这样写呢?& C$ o. y1 ~& K: G6 v2 H2 r
上时序图2 o. }/ p7 T1 T7 _6 ^% g
顺时针转:, X! y9 K$ s5 a0 D0 N

1 r! ]1 `5 b6 W5 \" d5 g' P( P+ S" @: P% i5 h1 P
逆时针转:0 b/ @2 ^3 P( i2 Z. L

  G0 k2 \% p( u
2 e( E) t) Q  g) q, L0 j& I3 v我们看到,当顺时针转时4 q& N3 f2 L8 K8 X) y
Pin A会早于Pin B 转低电平,反之亦然8 f0 o4 Y4 I! t1 l3 \2 v  Y
) A1 O" o$ ]- Z8 Y7 G
代码解读:
+ T3 {5 r. M2 `% V !PinA && PinA_O && PinB//当Pin A 为低电平而之前为高电平(即下降沿)并且Pin B为高电平
& S8 N, f3 d6 x7 v) S: k4 j这一句就捕捉到顺时针转时序图中箭指着的那一刹那的情况- I- s% H4 n" r- X# P$ Z: _: Y
于是Now加1
+ v6 C( O, B5 f/ N
6 @4 u1 b) M6 C7 c4 j" @; b!PinB && PinB_O && PinA//当Pin B 为低电平而之前为高电平(即下降沿)并且Pin A为高电平
# x4 ?* @; b& `. L8 N- Z* Y0 y9 u这一句就捕捉到逆时针转时序图中箭指着的那一刹那的情况
$ |. n3 j' E8 O* S于是Now减1
& L0 u0 L& [8 U; K; s2 |, C. @! i# _" F0 g/ |9 X
& M1 k% s% N$ S/ \, i- }$ y
1 ^  E. i+ d& E" l2 v+ l% N) I
如果编码器不加电容消抖2 l+ B  D( r* W. ~/ v$ b
就用软件消抖
) _; y% o- r5 [, O( z# @3 o
# F! y# J0 S( z  S3 B; L  |
  •         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_();
  •         }
    # {' \  p/ q2 l* C% B: n# @

" o1 [& {9 `/ x3 f5 S复制代码
0 N0 |5 K- D' t" p0 O4 X5 R现附上小应用实例一则# a, N6 ]% k3 ~) ?+ R9 d6 `' v
基如STC15F104E的EC11软串口六位密码检查程序& k) n1 D9 y% J9 b% Q
如发现顺逆时针相反,对调PinA/PinB 定义脚即可& U# M. a- ~7 a

该用户从未签到

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

该用户从未签到

3#
发表于 2022-6-24 13:51 | 只看该作者
不考慮任何不正常操作吗!! x% G4 M% ^7 x! _
不过,代码简洁易懂,挺好的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-29 20:45 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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