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

旋转编码器问题?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
问问大家,单个旋转编码器旋转没有问题,但是多个写好程序后旋转会发生错误,有时正转会出现反转,反转出现正转,有时还会自己发生正转反转,有谁知道是怎么回事吗?% ?8 I9 f1 z; c, g
void Encoder_EC11_Init(void)
/ a9 `1 z4 p/ L$ \2 M% Q# C' v" {{
+ T; R# T' {) b3 ^                EC11_A1_Now=1;
: M6 s. |' W, C; I4 f& ~                EC11_B1_Now=1;; ^) W6 [) P% ]) W5 r
}) `% N. O) q3 n- X+ y6 I; m3 R
9 f# m5 s  m2 n: g6 M# n* ]
void Encoder_EC11_Scan1(void)+ o% T0 m. d. Z0 \
{                1 [4 Q" `' w9 D) A3 K; R' y
                if(EC11_A1_Now != EC11_A_Last)   //以A为时钟,B为数据。正转时AB反相,反转时AB同相4 G, z4 M4 D* C; T+ \
                                {
: r- |" ?; w/ Q' m- d            if(EC11_A1_Now == 0), q' D; y* h1 K+ V, H! C' P2 N" M
            {
, M# c' s$ U2 b2 p, @2 n! G                if(EC11_B1_Now == 1)      //只需要采集A的上升沿或下降沿的任意一个状态,若A下降沿时B为1,正转 " s3 ^) Q* e6 E( H/ l2 v
                                                                {! L4 {' E! c7 g8 f6 F& e& ?
                                                                        & e7 a$ S0 t2 s+ |' S
                                        printf("\r\n CW \r\n");
7 n# |) v( x5 ?) A                                                                }                                                                        
3 W! @$ N( ]0 |/ X! Y5 Z* H- |4 s                else                    //反转- r( `0 W2 ?% n! x% L
                                                                {9 {' v1 p, j* ]+ v4 k" W. {
                                                                        
8 v1 ?) P* }2 F+ N$ P                                        printf("\r\n CCW \r\n");* I9 P0 S# B& K3 V( Y9 D6 A
                                                                }! l  |  b1 W9 T7 _1 p
                                                }
! q  o8 k. G' y- F9 p  M: w                                                
& a) ~; V: j5 A. v* _2 a            EC11_A_Last = EC11_A1_Now;   //更新编码器上一个状态暂存变量6 r) z+ B+ q1 f" \! `/ s; V
            EC11_B_Last = EC11_B1_Now;   //更新编码器上一个状态暂存变量; ?$ N; s' n) Z' \  n6 Z1 A
                                }
" Q7 _. q! Z# a}
  `& G+ R5 }& O6 |# |& I0 J
7 ~; W  Z% K+ w& @$ O/ J7 ^0 l5 X% P程序单个是这样的,然后多个像这样写,旋转后串口显示的会误判" j3 Q% N  T" l5 u; Z; B
& C- R  b" y$ g. d+ X& `7 L

该用户从未签到

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-30 06:02 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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