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

旋转编码器问题?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
问问大家,单个旋转编码器旋转没有问题,但是多个写好程序后旋转会发生错误,有时正转会出现反转,反转出现正转,有时还会自己发生正转反转,有谁知道是怎么回事吗?
; i1 m+ M) C4 K/ Q) A  v4 q5 i; M6 C/ lvoid Encoder_EC11_Init(void)
7 a3 h7 X( t8 Q6 C{
- t9 z* L- n0 ~% ]# a% `0 v                EC11_A1_Now=1;
0 M( p) p( a. ?& |- ^                EC11_B1_Now=1;
& j8 y# v1 P  d6 o- S+ G& ]}
0 D; {" W0 Y8 x5 m; J$ p# q
4 Y, b6 ]2 L2 m4 Y, J& Bvoid Encoder_EC11_Scan1(void)
; ^( D# D  u0 o{                ; ]; t  K, j3 O) [8 }% k1 N. t" N1 ?
                if(EC11_A1_Now != EC11_A_Last)   //以A为时钟,B为数据。正转时AB反相,反转时AB同相
- ~0 \& D! q& ~/ W8 p                                {# o0 z4 v5 n; p, [( {+ c/ c
            if(EC11_A1_Now == 0)
( D  ~- G" [6 ?9 Q; U            {* ~( l! Z1 S! h
                if(EC11_B1_Now == 1)      //只需要采集A的上升沿或下降沿的任意一个状态,若A下降沿时B为1,正转 % C* t0 }3 i* Q  g2 x
                                                                {. H2 b; Q& X7 ~* ]
                                                                          M" O4 Y1 D! G* L; N. j4 R
                                        printf("\r\n CW \r\n");  Y, w8 O0 b2 Y: C: X$ |
                                                                }                                                                        0 o  V& Y+ j* T9 A6 L& }$ v
                else                    //反转8 o6 B) _( W2 n
                                                                {
- o. q; O, Q+ O9 p, h                                                                        
, Y! i8 k: N' _! m                                        printf("\r\n CCW \r\n");) T0 D1 P6 Z6 h. ]- M
                                                                }
! }6 ~! P+ {4 I5 \                                                }4 F8 r% `- F. t5 N" {% G. u$ G: d! t
                                                
4 n- Z$ `! b9 N            EC11_A_Last = EC11_A1_Now;   //更新编码器上一个状态暂存变量. d# _: f) I3 v8 r+ \/ [2 q' m& H2 A
            EC11_B_Last = EC11_B1_Now;   //更新编码器上一个状态暂存变量
4 U1 z" O% y  ]7 G                                }# j4 z+ q) h* }% Z! \8 X  U+ X
}
( h+ O8 k& o7 c6 a- e+ \0 D
0 a0 x  h4 G4 y4 }) [程序单个是这样的,然后多个像这样写,旋转后串口显示的会误判
) v+ A. S6 ^" x" z) O: R/ w5 }
7 A* N+ S8 {% B6 R4 q: d! w- D

该用户从未签到

2#
发表于 2022-10-9 14:17 | 只看该作者
肯定是程序的问题,看了你的程序理论没问题,应该是扫描速度上出了问题。把串口发送删掉,数据先保存,最后一起发送试试。我用串6个移位寄存器,仅用3个IO同时上24个编码器采集没出现什么问题。

该用户从未签到

3#
发表于 2022-10-9 14:27 | 只看该作者
第一次变化设置标志位,第二次变化比较逻辑和标志位,全部正确且有效。

该用户从未签到

4#
发表于 2022-10-9 14:44 | 只看该作者
应该是采样速度的问题,你单个和多个采样的设置不知道是怎么样的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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