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