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

旋转编码器问题?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
问问大家,单个旋转编码器旋转没有问题,但是多个写好程序后旋转会发生错误,有时正转会出现反转,反转出现正转,有时还会自己发生正转反转,有谁知道是怎么回事吗?! E) o  s( r: c5 i
void Encoder_EC11_Init(void)! y+ a" d/ ~( R+ e1 `- Q1 c
{' U0 K  Y7 N8 p! \
                EC11_A1_Now=1;
! O; K8 L$ n1 o+ {& m2 J. [                EC11_B1_Now=1;
) G, ]9 ~: c# N- w! i; u}
  m) o% Z6 n* ~9 X6 K. j8 s" E5 Y9 d1 ~+ Q0 g2 Y7 v
void Encoder_EC11_Scan1(void)
6 U: L! h) q0 ~' T; C{                : ]% E6 ^  P( Z
                if(EC11_A1_Now != EC11_A_Last)   //以A为时钟,B为数据。正转时AB反相,反转时AB同相
" P  M9 o9 g( q; |2 I5 O/ ~/ I                                {
5 ~$ V/ J  V9 o& Q7 g5 C1 t            if(EC11_A1_Now == 0)
8 `& a9 D( j7 F( T3 G6 ^            {
4 p8 u4 X6 [: O- ?2 ^                if(EC11_B1_Now == 1)      //只需要采集A的上升沿或下降沿的任意一个状态,若A下降沿时B为1,正转
) n7 C& a( v3 i9 q& |* U5 {  w- T                                                                {3 B0 G2 V, p. |- M% G5 |2 c
                                                                        % m. G) X1 z$ y% z5 A* p8 Z( S: b
                                        printf("\r\n CW \r\n");
4 E( v) L( O6 i                                                                }                                                                        
* m$ [1 d2 q3 |" a6 h& e! O3 V                else                    //反转, W' Q2 @8 O4 E
                                                                {7 B* [) P! ?( b, P1 U+ r7 t. `4 j+ [+ t
                                                                        3 A* n  ~( N8 P, u5 Z5 p
                                        printf("\r\n CCW \r\n");
5 R) H' I% `/ }" @) F                                                                }
. a7 R- I, e- G6 {9 z1 o                                                }
# a8 N4 ~/ T3 {$ m6 j                                                  d$ @) H* f. L  a3 w
            EC11_A_Last = EC11_A1_Now;   //更新编码器上一个状态暂存变量
; d. [1 p! R1 n. L- \) O0 f            EC11_B_Last = EC11_B1_Now;   //更新编码器上一个状态暂存变量
1 K- F- a1 X% H2 R5 `) K+ H                                }1 [5 t2 V. a9 C* M: T0 S
}8 m7 L2 `/ _8 h; q; B: j

5 ]7 a+ U" m: d2 l* F% D4 X# X; u程序单个是这样的,然后多个像这样写,旋转后串口显示的会误判
: @9 T1 g0 A+ x( U4 i6 m% P5 }# v, `* ]7 R  p' \# e

该用户从未签到

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-7-8 16:52 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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