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

旋转编码器问题?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
问问大家,单个旋转编码器旋转没有问题,但是多个写好程序后旋转会发生错误,有时正转会出现反转,反转出现正转,有时还会自己发生正转反转,有谁知道是怎么回事吗?
' p* o& n- ]# Q2 N8 jvoid Encoder_EC11_Init(void)
! E/ l3 @0 H( `7 ~1 z/ I{
5 l" H0 N" V% m( d+ M4 i& \                EC11_A1_Now=1;
  `! v1 R) Q$ J6 P! g9 @                EC11_B1_Now=1;
9 G7 L; R' r; c}7 i/ X( k5 V4 U* \

! p! F# j7 p- N+ C0 h. ~# M; Lvoid Encoder_EC11_Scan1(void)8 G, l+ y  `. T- k, H
{               
. j: j; G2 D, d                if(EC11_A1_Now != EC11_A_Last)   //以A为时钟,B为数据。正转时AB反相,反转时AB同相
& l3 E6 v5 v4 R* d                                {, D4 J* B) {% _& o' F* M/ L0 z" H
            if(EC11_A1_Now == 0)
& Q4 [% M; }+ v            {) G7 ^6 ]5 v, G
                if(EC11_B1_Now == 1)      //只需要采集A的上升沿或下降沿的任意一个状态,若A下降沿时B为1,正转
) q* o; w0 C. s4 F8 Q9 r4 b6 K; E                                                                {2 Z- ]1 o# I6 N0 [, m% ]/ ?
                                                                        
  d" V1 R( |( F+ P! y                                        printf("\r\n CW \r\n");1 M6 m+ H$ Z& ^- C6 c1 P' C" |
                                                                }                                                                        
) g# G4 p2 J9 I# N9 d                else                    //反转4 F/ t2 _8 n0 s% Z; x
                                                                {( B5 |% A$ K5 u- k
                                                                        * A$ v9 G* y$ e+ i9 S' l8 _4 r# w
                                        printf("\r\n CCW \r\n");9 H9 |8 V8 e% u, Q
                                                                }
; E8 u% v7 n" k                                                }
' I! J7 }8 x1 P2 o) v  n* u                                                
. R3 Q6 W& ]3 s! M: u& V$ g1 x! D            EC11_A_Last = EC11_A1_Now;   //更新编码器上一个状态暂存变量
$ S% F4 Z, j) J9 a, X" [( [            EC11_B_Last = EC11_B1_Now;   //更新编码器上一个状态暂存变量
$ {/ Q6 [- B$ t5 n                                }
% e4 q, ~. Q" a1 y8 J/ E4 y}
* G0 h# R- m; }" w% J1 o" L6 C( d* S' i+ d8 t% u
程序单个是这样的,然后多个像这样写,旋转后串口显示的会误判/ T; a  N+ u5 E: c. ]; W
. G: A! x" G1 O1 X% F' g; T6 U

该用户从未签到

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-29 18:46 , Processed in 0.062500 second(s), 23 queries , Gzip On.

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

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

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