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

旋转编码器问题?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
问问大家,单个旋转编码器旋转没有问题,但是多个写好程序后旋转会发生错误,有时正转会出现反转,反转出现正转,有时还会自己发生正转反转,有谁知道是怎么回事吗?
# ^+ p7 }5 u: ^2 z+ k, Xvoid Encoder_EC11_Init(void)) B: `* y6 M1 _) h# {5 r5 C6 v
{: ~, d7 i! d/ {" L
                EC11_A1_Now=1;3 d9 O' _) s5 [9 g& [2 d- l
                EC11_B1_Now=1;( m  }; K/ W4 n1 y
}6 i6 R; y- U# q& U9 g1 \1 e
, C. S& t$ m9 h) d) A
void Encoder_EC11_Scan1(void)+ U/ T7 i0 q3 E( j" t' j; C
{                * O" u5 V9 K; t5 O! q: K
                if(EC11_A1_Now != EC11_A_Last)   //以A为时钟,B为数据。正转时AB反相,反转时AB同相4 ]' n) N: X7 V
                                {
" g1 r3 D3 G5 q0 p            if(EC11_A1_Now == 0)* j3 k1 z* h! S7 B" Z* d8 q! ?
            {
. k5 V  W. D: ]+ E+ t                if(EC11_B1_Now == 1)      //只需要采集A的上升沿或下降沿的任意一个状态,若A下降沿时B为1,正转
4 ]) p3 g3 _( Q7 j                                                                {( G. h, Y4 M# g3 k0 `1 z
                                                                        & C; k7 e9 c6 K: A5 ?2 u8 d
                                        printf("\r\n CW \r\n");8 h( e/ O# s+ G
                                                                }                                                                        
+ j8 u$ E" G) H6 V( X# W" |                else                    //反转2 u! i5 b  D) {9 B0 [  q
                                                                {
  r9 m7 }9 K- k$ f8 d- i                                                                        
3 X2 l! H2 r" w$ j, P                                        printf("\r\n CCW \r\n");% A/ U$ p* c3 C7 @5 e
                                                                }" A& Z4 c/ V  Z
                                                }
$ r, c) p4 S7 Q1 R# u                                                
  w. m$ B- r% P& F; Q  [/ q; H$ q            EC11_A_Last = EC11_A1_Now;   //更新编码器上一个状态暂存变量
( j7 o+ a) k& R% V/ e* X9 w9 d            EC11_B_Last = EC11_B1_Now;   //更新编码器上一个状态暂存变量* a: G2 Y* X: S1 x# @) r- q8 s
                                }4 w. |$ l% Z/ @6 e2 O
}
2 |) P) F, J- u/ A5 Z* P+ n  r& J# U
- X$ @5 M# u  A; T; h9 K程序单个是这样的,然后多个像这样写,旋转后串口显示的会误判; O( E2 H4 {; z8 y: _

+ V$ \* _" M) m9 o5 {5 R

该用户从未签到

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-3 07:48 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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