关于旋转编码器(EC11)的使用(判断旋转方向,按键处理)

关于旋转编码器(EC11)的使用(判断旋转方向,按键处理)

零. 前言

  本文对新手友好,代码可用,请放心食用
  在自己工作的时候使用到了类似EC11旋转编码器,理论上应该是在大学就用透了,但是我还是第一次使用,仅此记录下自己对于旋转编码器的使用与理解,并且我对旋转编码器的代码编写存在一些疑问,如果能够解答一下,欢迎在评论区留言,先谢谢各位小伙伴!
  编码器按键处理程序跟一般按键处理程序相同,因此在此不进行解释,仅贴代码
  程序考虑情况比较多,写的相对繁琐,如果不需要异常处理,请自行修改,因为我也不知道需要不需要,但这种处理不是消抖处理!!
  

一. 注意事项

  1. 请根据旋转编码器具体的电路连接,选择对应单片机对应端口GPIO的输入模式,分清楚旋转编码器不动作的时候给予单片机是高电平还是低电平
  2. 旋转编码器一般有效的线是3根线,一根按键,两根用于输出信号判断顺时针和逆时针
  3. 以下程序据我判断没有消抖功能,对于可能的抖动都判为了异常,让这部分的脉冲无效,而不是继续根据原有的意图实现功能
  

二. 本文所述旋转编码器的旋转控制逻辑

  1. 该旋转编码器具有5线,分别是2xGND、K1、K2、K3,其中K1、K2用于旋转编码器正反转信号输出,K3为旋转编码器按键的信号输出
  2. 该旋转编码器不作动的时候均为高电平
  3. 旋转编码器旋转的时候K1和K2会相互输出不同相位的脉冲,以此区分顺逆时针旋转,如图所示:

在这里插入图片描述

图中清晰可见,想要判断出旋转编码器的CW和CCW旋转只需要关注第1和第3过程,只需要进行两次判断即可,顺时针为例:

1. (首次判断,过程1)K1低,K2高 ,给出第一次判断完成标志位
2. (等待,过程2)
3. (二次判断,过程3)K1低,K2高 ,判断结束
4. 清除所有标志位,等待下一次判断

但是否过程2的等待过程是没有用的呢,我认为不然,按照上面的逻辑,某一条线出现异常的时候则会误判(虽然我不清楚是否会出现这种异常,但是波形上是这样),如图所示:

在这里插入图片描述
以顺时针为例,按照上述判断流程,则1、2、3会被判断为cw逻辑,接下来的4、5、6会被判断为CCW逻辑,发生误判
因此,在我的程序会在过程2进行异常判断,判断逻辑以CW为例(结合图1):

1. (首次判断,过程1)K1低,K2高
2. (异常1判断,过程2)如果等待出现了第二次判断完成标志位,判断为异常,跳最后一步
3. (二次判断,过程3)K1高,K2低 ,给出第二次判断完成标志位
4. (最终判断,异常2判断,图1过程4)等待K1、K2高电平,判断是否经过了第二次判断,如果有,判断顺时针还是逆时针,判断结束,如果无,异常
5. 清除所有标志位,等待下一次判断

图CW异常
该判断逻辑下,第二判断会在过程3完成,给出二次判断结束标志位,但一直还没有进入最终判断(过程4),此时中途出现了异常(图2CW过程5),此过程即过程2,此时顺序为1->2->3->2,因此判断异常,直接跳到第5步
图CCW异常
同样的逻辑请套用到CCW逆时针异常的情况进行考虑,因为无法进行第二次判断(过程3),因此当出现K1、K2高电平,最终判断(图2CCW过程5),此时无法检测到第二次判断完成标志位,因此判断异常,直接跳到第5步
  

三. 旋转编码器判断代码(旋转方向,按键)

1. 命名规则
  单片机端口:类型_器件
  p->pin(引脚端口),pc->pin controller(引脚对应的控制寄存器)
  变量/标志位:类型_器件_特性_阶段
  f->flag(标志位),ecd->encoder(编码器),cw/ccw(顺/逆时针)&#

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bug_Maker 八嘎创造者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值