找回密码
 注册
查看: 317|回复: 3
打印 上一主题 下一主题

旋转编码器问题?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
问问大家,单个旋转编码器旋转没有问题,但是多个写好程序后旋转会发生错误,有时正转会出现反转,反转出现正转,有时还会自己发生正转反转,有谁知道是怎么回事吗?
) X$ @1 k7 h5 ~  m! `( W6 _; S# R8 Fvoid Encoder_EC11_Init(void)
$ @! U+ {4 E" z( g3 `% h{
2 ~5 @0 ]8 S* B; R% S' h9 i  _                EC11_A1_Now=1;
1 w+ u3 r! F. @) U: V7 E  L                EC11_B1_Now=1;: y; I, d; @- P: ^6 x4 l2 N
}% O. D9 E# T/ l6 d; k# G5 a
* r9 j! G, y4 Y# J1 C- N
void Encoder_EC11_Scan1(void)
, _  @# k/ D- I/ [6 T1 j) _{               
) h. i  i  W( e- t/ t( b                if(EC11_A1_Now != EC11_A_Last)   //以A为时钟,B为数据。正转时AB反相,反转时AB同相2 ?0 y- S2 V' |
                                {
; T2 K- e; R& `6 \5 H: p  V            if(EC11_A1_Now == 0)
. b  \6 N9 X+ Z. q* V; I/ N8 m5 T+ t            {  j0 D8 }8 s2 k3 i' n
                if(EC11_B1_Now == 1)      //只需要采集A的上升沿或下降沿的任意一个状态,若A下降沿时B为1,正转 , j; P/ }7 L! \1 ]( O
                                                                {
- M; t- v5 \+ l                                                                        
" K$ M( P% r# S                                        printf("\r\n CW \r\n");& e$ R( b% p& H: |& G: E2 I
                                                                }                                                                        
% g+ F( @' t# n1 l* K: k! j9 i( z                else                    //反转
3 p  N0 a& T! U; G+ C                                                                {
, b- k' ]$ L: m+ p, \. l$ h# ^                                                                        ) a4 {9 @* B- y+ R3 a
                                        printf("\r\n CCW \r\n");2 f. }) H: a0 Q0 e% t
                                                                }" T4 U4 g+ @% ~) b0 B: \. B6 w
                                                }% B5 _: v; I  J( r; l8 {' J0 I8 a
                                                
& b$ k' d! H# c) k2 A+ ~            EC11_A_Last = EC11_A1_Now;   //更新编码器上一个状态暂存变量, `; b  U6 P" u2 R
            EC11_B_Last = EC11_B1_Now;   //更新编码器上一个状态暂存变量
3 r; |6 J& F8 v; I$ |3 _8 B                                }5 E8 p8 _7 n8 P4 q
}
3 }! y2 |$ M" z9 _
# C- @* L. T' M  k程序单个是这样的,然后多个像这样写,旋转后串口显示的会误判
" T$ Q" n* L& |; f2 p  S" K9 H
2 \) Y, G- f; t! H

该用户从未签到

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-6-3 06:26 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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