EC11编码器基于运算解码的算法

[复制链接]
 楼主| beacherblack 发表于 2024-2-18 21:16 | 显示全部楼层 |阅读模式
  1. char Encoder_EC11_Scan()     /*  这里只是部分代码  */
  2. {
  3. //以下储存A、B上一次值的变量声明为静态全局变量,方便对EC11对应的IO口做初始化
  4. //  static char EC11_A_Last = 0;
  5. //  static char EC11_B_Last = 0;
  6.     char ScanResult = 0;    //返回编码器扫描结果,用于分析编码器的动作
  7.                             //返回值的取值:   0:无动作;      1:正转;           -1:反转;  
  8.                             //                  2:只按下按键;    3:按着按键正转;   -3:按着按键反转

  9.                             //======================================================//
  10.     if(EC11_Type == 0)      //================一定位对应一脉冲的EC11================//
  11.     {                       //======================================================//
  12.         if(EC11_A_Now != EC11_A_Last)   //以A为时钟,B为数据。正转时AB反相,反转时AB同相
  13.         {
  14.             if(EC11_A_Now == 0)
  15.             {
  16.                 if(EC11_B_Now ==1)      //只需要采集A的上升沿或下降沿的任意一个状态,若A下降沿时B为1,正转                    
  17.                     ScanResult = 1;     //正转

  18.                 else                    //反转
  19.                     ScanResult = -1;
  20.             }
  21.             EC11_A_Last = EC11_A_Now;   //更新编码器上一个状态暂存变量
  22.             EC11_B_Last = EC11_B_Now;   //更新编码器上一个状态暂存变量
  23.         }
  24.     }
  25. return ScanResult;      //返回值的取值:   0:无动作;      1:正转;           -1:反转;
  26. }


tpgf 发表于 2024-3-4 16:53 | 显示全部楼层
看代码感觉这个解码的算法真是非常简单
dspmana 发表于 2024-3-6 07:24 | 显示全部楼层
计算脉冲序列时,需要考虑信号的采样时间。如果采样时间太长,可能会错过一些脉冲;如果采样时间太短,可能会将噪声误认为是脉冲。
晓伍 发表于 2024-3-6 18:08 | 显示全部楼层
在进行编码的时候使用的是什么算法呢
八层楼 发表于 2024-3-6 18:42 | 显示全部楼层
请问他只支持这一种解码的算法吗?
观海 发表于 2024-3-6 19:16 | 显示全部楼层
看代码好像只是进行了0和非0的判断啊
guanjiaer 发表于 2024-3-6 19:50 | 显示全部楼层
楼主是否可以贴一下编码部分的代码呢
heimaojingzhang 发表于 2024-3-6 20:24 | 显示全部楼层
这个就是简单的分辨一下标识位就可以了
mikewalpole 发表于 2024-3-7 11:56 | 显示全部楼层
需要对编码器输出的脉冲进行准确计数。可以使用硬件计数器或软件计数器实现。确保计数器在编码器旋转过程中能够正确捕捉到所有脉冲。
backlugin 发表于 2024-3-7 13:22 | 显示全部楼层
运算解码算法应该能够处理可能出现的错误,例如数据丢失、数据错误等。适当的错误处理机制可以确保系统在遇到问题时能够稳定地运行。
kkzz 发表于 2024-3-7 21:33 | 显示全部楼层
对于增量型编码器,在系统启动或复位时需要确定一个初始零点或原点位置。这通常通过检测Z相索引脉冲实现,或者在特定机械位置时通过软件设置偏置值来初始化。
backlugin 发表于 2024-3-7 23:43 | 显示全部楼层
编码器输出信号可能存在噪声,需要进行滤波处理以提高信号质量。可以使用硬件滤波器或软件滤波算法实现。
modesty3jonah 发表于 2024-3-8 21:24 | 显示全部楼层
实际应用中,编码器的输出可能会因机械振动等因素产生微小跳变,即所谓的“抖动”。算法中应加入适当的防抖措施,比如延时确认或两次比较确认同一方向的变化。
timfordlare 发表于 2024-3-9 18:57 | 显示全部楼层
考虑到编码器输出的电信号可能存在噪声干扰,所以在设计解码算法时需要对输入信号进行滤波处理,例如采用R/C滤波电路来减少电气噪声,确保准确捕捉到有效的脉冲边沿。
lihuami 发表于 2024-3-9 21:58 | 显示全部楼层
在处理编码器的输出信号时,需要注意一些边缘情况。例如,当编码器旋转速度很快时,可能会出现脉冲丢失或计数错误。在算法设计时,需要考虑这些情况并采取适当的处理措施。
olivem55arlowe 发表于 2024-3-10 08:04 | 显示全部楼层
使用基于运算解码的算法之前,需要对编码器进行校准。这通常涉及到调整算法中的某些参数,以使算法的输出与实际的位置或速度相匹配。
gygp 发表于 2024-3-10 15:27 | 显示全部楼层
不断优化编码算法的性能,包括提高编码速度、降低错误率、减少计算复杂度等。
uiint 发表于 2024-3-10 23:01 | 显示全部楼层
在解码过程中,可能会出现脉冲漏计、重复计数等误差。需要设计相应的误差处理机制,以确保解码结果的准确性。
gygp 发表于 2024-3-11 13:21 | 显示全部楼层
EC11编码器输出A、B两路相位差90度的方波信号。正转时,A相超前B相;反转时,B相超前A相。在解码过程中,需要正确识别这两个信号的相位关系,以确定旋转方向和角度。
jonas222 发表于 2024-3-11 15:15 | 显示全部楼层
如果EC11编码器用于安全相关的应用,那么算法的安全性也需要考虑。确保算法能够抵抗潜在的攻击或欺诈行为是非常重要的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

1507

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部