|
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
|
|