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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
先上代碼為敬4 M) K( E! J% E7 i5 ?4 i
  •             if(!PinA && PinA_O && PinB) {
  •                 Now++;
  •             }PinA_O = PinA;
  •             if(!PinB && PinB_O && PinA) {
  •                 Now--;
  •             }PinB_O = PinB;/ d  b- I& d$ i) S4 S) r

% M  n! A7 E  T9 Z4 B复制代码
, r8 r0 q+ ]; {# E0 L& o" `. [0 z只有六行代碼就能用EC11對Now進行加減操作
' s7 U9 z% l- c! d' t( h
/ s- O7 F8 x7 ~8 o9 [" Q为什么这样写呢?
! j3 |! A  r1 z8 b1 D7 F. \上时序图1 K+ q) P" E7 O
顺时针转:* p& i" }8 K# N, ?, e: S) \1 R
. J) [3 \  c6 j1 G* Y# w# a
/ W/ M9 `: |: N- v2 p1 T8 ^
逆时针转:
& u" N# G5 v2 R* s$ U) h
* L, i7 Z* x- D8 `6 L; J% d3 P
1 {7 z$ K* g( J8 r6 E% }2 l我们看到,当顺时针转时: B0 i, W- |6 L) l% V7 D; I; y, I$ c
Pin A会早于Pin B 转低电平,反之亦然5 N$ C- j, z( I& F. u

8 U7 V" `5 C" V* h6 ^2 X( z4 L* V( i代码解读:; r/ |5 c1 O4 d, Z) s
!PinA && PinA_O && PinB//当Pin A 为低电平而之前为高电平(即下降沿)并且Pin B为高电平+ i" e( N4 G! F) C3 `
这一句就捕捉到顺时针转时序图中箭指着的那一刹那的情况5 k, z7 t3 v& q8 @2 `1 u
于是Now加1
. ~# b: ], N/ z2 u  F! B
% A# S3 J6 y& |" m  y. f& Q! V; @3 v!PinB && PinB_O && PinA//当Pin B 为低电平而之前为高电平(即下降沿)并且Pin A为高电平, D1 i6 K- T; X7 \
这一句就捕捉到逆时针转时序图中箭指着的那一刹那的情况: Q* t% ]) e) h8 W
于是Now减1* W. v6 J) d$ c3 e, B1 D

/ G0 k: o( C4 U- b2 T9 ]
) L( T# y: M; O
/ V- ?4 z2 N3 }/ H5 k9 K如果编码器不加电容消抖; s  w: H3 E( f! o
就用软件消抖
. w0 Z, n& i0 }4 a) x6 H; a$ H2 c
$ ^, c* {2 A2 K3 R/ 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_();
  •         }
    $ j7 d) T; J2 c/ G% Y% `  F

7 o- Y" m2 K" t$ ^: a复制代码
$ D% T9 {3 d$ P2 c: M现附上小应用实例一则
' n$ d+ C3 T3 [5 o. r. o基如STC15F104E的EC11软串口六位密码检查程序  T' l' A; J0 e3 @& ], w4 Q
如发现顺逆时针相反,对调PinA/PinB 定义脚即可
* C' E( B9 w  b

该用户从未签到

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

该用户从未签到

3#
发表于 2022-6-24 13:51 | 只看该作者
不考慮任何不正常操作吗!# g1 e; b9 T# X7 q5 d" x& z
不过,代码简洁易懂,挺好的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-13 06:42 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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