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

旋转编码器问题?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
问问大家,单个旋转编码器旋转没有问题,但是多个写好程序后旋转会发生错误,有时正转会出现反转,反转出现正转,有时还会自己发生正转反转,有谁知道是怎么回事吗?
- f* H7 {7 `% E0 Rvoid Encoder_EC11_Init(void)
: k; f( k; x8 O* f; Z6 h4 k{
" Q9 B' X* l9 U% h* x$ V2 s5 `                EC11_A1_Now=1;) z7 W+ Q( i3 h$ w- b$ {4 A$ c8 ^
                EC11_B1_Now=1;7 j" O, A4 o1 ?0 y
}
' ]& C+ U( c8 V/ Q" Z0 u% _/ V) H; A" c0 {/ D0 y
void Encoder_EC11_Scan1(void)
% a) F7 ]$ W9 S/ ]* j{                ' y; Z: s, z( }: }. V) k: e
                if(EC11_A1_Now != EC11_A_Last)   //以A为时钟,B为数据。正转时AB反相,反转时AB同相4 b+ R6 t' ]2 x3 O- E
                                {
% ?$ V8 k" a% ?/ F            if(EC11_A1_Now == 0)% V) a* F7 S) n$ k
            {* G  D4 d) A5 G0 o
                if(EC11_B1_Now == 1)      //只需要采集A的上升沿或下降沿的任意一个状态,若A下降沿时B为1,正转
/ O* K- {! f! w% V1 i& [& P                                                                {
+ `4 h) d- Z/ y" L; n                                                                        & y. w) u' K* D
                                        printf("\r\n CW \r\n");) @! ^5 K( T1 D; Z2 {5 F5 s
                                                                }                                                                        
* t$ W, b, d# P( M                else                    //反转- z& {6 i6 Q; P  g1 w1 a: E9 p" _
                                                                {
, h6 z# S1 H, Y( G9 j  H9 g, ^' _                                                                        8 D) {: r" W0 X
                                        printf("\r\n CCW \r\n");
8 D. W6 j/ J  H6 C# F2 F0 g- k                                                                }, l) ?5 X$ Q% x  c: |+ K
                                                }
& V8 e3 G  j5 t. a                                                $ p0 c' K2 w6 Q# V9 N
            EC11_A_Last = EC11_A1_Now;   //更新编码器上一个状态暂存变量6 B; K, G+ v# C7 B5 G2 m, f6 p
            EC11_B_Last = EC11_B1_Now;   //更新编码器上一个状态暂存变量
8 W5 G2 N1 y" K1 F/ d% K6 U                                }
# H8 }2 q) ], |5 _}
/ ]6 r$ Z8 `( l$ t& m
; b' @( Z* ?( `- @) R6 c程序单个是这样的,然后多个像这样写,旋转后串口显示的会误判
. H4 A7 `4 \- E' W# q" J$ T6 J& H
  F; A7 R' f' w5 H4 ?9 Q- n, p

该用户从未签到

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-10-8 12:05 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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