[疑难问答] EC11旋转编码器的单片机驱动代码

[复制链接]
 楼主| uptown 发表于 2023-7-14 11:00 | 显示全部楼层 |阅读模式

  1. if(!PinA && PinA_O && PinB) {
  2.                 Now++;
  3.             }PinA_O = PinA;               
  4.             if(!PinB && PinB_O && PinA) {
  5.                 Now--;
  6.             }PinB_O = PinB;     



只有六行代碼就能用EC11對Now進行加減操作

为什么这样写呢?
上时序图
顺时针转:


逆时针转:


我们看到,当顺时针转时
Pin A会早于Pin B 转低电平,反之亦然

代码解读:
!PinA && PinA_O && PinB//当Pin A 为低电平而之前为高电平(即下降沿)并且Pin B为高电平
这一句就捕捉到顺时针转时序图中箭指着的那一刹那的情况
于是Now加1

!PinB && PinB_O && PinA//当Pin B 为低电平而之前为高电平(即下降沿)并且Pin A为高电平
这一句就捕捉到逆时针转时序图中箭指着的那一刹那的情况
于是Now减1



如果编码器不加电容消抖
就用软件消抖
  1. if(ScanCount++ > 50) {        //其数值按单片机速度加减
  2.             ScanCount = 0;
  3.             if(PinA && !PinA_O && PinB) {
  4.                 Now++;
  5.             }PinA_O = PinA;               
  6.             if(PinB && !PinB_O && PinA) {
  7.                 Now--;
  8.             }PinB_O = PinB;                        
  9.             Now>9? Now = 0:_nop_();
  10.             Now<0? Now = 9:_nop_();
  11.         }




现附上小应用实例一则
基如STC15F104E的EC11软串口六位密码检查程序
如发现顺逆时针相反,对调PinA/PinB 定义脚即可
Pretext 发表于 2023-7-21 11:35 | 显示全部楼层
旋转编码器,就类似电机编码器呗。
V853 发表于 2023-7-21 11:35 | 显示全部楼层
用定时器监测编码器更好
软核硬核 发表于 2023-7-21 11:36 | 显示全部楼层
这个编码器的波形和其他编码器还不太一样。
OKAKAKO 发表于 2023-7-21 17:36 | 显示全部楼层
旋转编码器的输出形式跟其他的形式一样嘛?
中国龙芯CDX 发表于 2023-7-24 13:14 | 显示全部楼层
楼主不用电容消抖的话就得有软件消抖
小夏天的大西瓜 发表于 2023-7-25 12:46 | 显示全部楼层
旋转编码器是用来测量转速并配合PWM技术可以实现快速调速的装置,光电式旋转编码器通过光电转换,可将输出轴的角位移、角速度等机械量转换成相应的电脉冲以数字量输出(REP)
LOVEEVER 发表于 2023-7-26 17:46 | 显示全部楼层
EC11旋转编码器的硬件参数有嘛?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

3789

帖子

2

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