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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
先上代碼為敬
" n" ?$ E+ @# s3 f5 x4 A% J2 b& d
  •             if(!PinA && PinA_O && PinB) {
  •                 Now++;
  •             }PinA_O = PinA;
  •             if(!PinB && PinB_O && PinA) {
  •                 Now--;
  •             }PinB_O = PinB;
    , }3 N# m3 k, h' H8 f7 V0 P

  {3 G' k$ T% P+ Q8 g, x) B复制代码  P+ c+ Q6 M9 E  E  M5 g) x5 l0 V
只有六行代碼就能用EC11對Now進行加減操作
4 Q) d! P1 U/ q& x# W" u: \
9 t# B" [$ v; r; E- t8 Z为什么这样写呢?
" X3 q% Q$ a* S( C上时序图
" ?" i% W/ u9 z* U顺时针转:
! B4 o" Q. K4 w/ w) v6 |* P4 A- Q
' p5 ?1 N2 Q/ @+ B0 X; e
- z1 f* U3 f  G! V4 p$ ^+ D; s逆时针转:/ G' c" z: E( O+ e/ h

8 m% Q% i% ^& {) G, Z: n& l4 |  {: [% t9 Y' D* _( e8 [
我们看到,当顺时针转时) o& D3 `# ]' p& ?" k/ n0 i
Pin A会早于Pin B 转低电平,反之亦然
; T7 y# T& B) p+ c. L' x: x' j% o5 Y0 j, n
代码解读:: a/ Y* Y; D' i  b- I% W* }2 M  D
!PinA && PinA_O && PinB//当Pin A 为低电平而之前为高电平(即下降沿)并且Pin B为高电平1 D+ d3 J1 W, t7 m+ \# H7 Q1 j8 g
这一句就捕捉到顺时针转时序图中箭指着的那一刹那的情况
/ @  g* r: j9 @& b% d4 O于是Now加1/ n# R& C& U: u$ L
! q7 C. C$ H: G1 h# w+ t
!PinB && PinB_O && PinA//当Pin B 为低电平而之前为高电平(即下降沿)并且Pin A为高电平
; ~: F- L- j- Z4 r这一句就捕捉到逆时针转时序图中箭指着的那一刹那的情况8 M! h9 w3 z- F9 D
于是Now减1
2 x( N1 r: X, V5 W3 @& j" Z  `" P. n# N! G2 l$ T' I
" n- ?5 H, _& ?

0 m& ?" x9 j4 T  l3 V4 O% r1 b如果编码器不加电容消抖
. `1 p( W. D, ^就用软件消抖. L, Q" N/ g! M0 q# f/ O3 w- ]

7 j" N/ ~: J7 c
  •         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_();
  •         }6 m% k5 @' ^" x+ r
& j9 b8 c/ \" j$ X
复制代码
( ^- h4 C5 X7 {9 K7 T* y/ v# ?现附上小应用实例一则3 U3 R3 O" Q9 i7 a
基如STC15F104E的EC11软串口六位密码检查程序
7 N, G7 o3 q/ a. ~* J, B9 F0 V如发现顺逆时针相反,对调PinA/PinB 定义脚即可
/ p) S/ H3 V" G) `( \1 B

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 12:41 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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