天天动画片 > 八卦谈 > ESP32使用正交编码器教程(IDF)

ESP32使用正交编码器教程(IDF)

八卦谈 佚名 2024-02-20 08:33:29

前言:使用最简单粗暴的方式实现编码器的使用,简单易懂,准确率高


编码器原理图:

原理图


一共只有四个重要引脚,分别是com:公共端,接GND或者VCC都行,如果接GND则IO上拉,接VCC则IO下拉S:按钮检测(编码器自带了一个按键)A/B:AB线,用于检测编码器正反转以及转了几格

编码器AB线规律:

A线默认电平状态永远是1,只有在编码器拨动一格的时候会先变0,随后恢复成1

B线默认电平状态不稳定,在编码器不拨动完整一格的情况下,轻微顺时针触碰拨盘会变1,轻微逆时针触碰拨盘会变0

根据这个规律来完善逻辑:当A线从0变化为1时,说明编码器已经被拨完了完整的一格,由于B线的状态只要轻轻的触碰就能改变,所以此时B线的值 由 拨动时 是 顺时针旋转还是逆时针旋转决定,如果读出为1,则说明刚刚顺时针拨动了一格

代码实现:

所有实现加在一起只有大约40行的代码,核心逻辑只有16行代码,非常简明简单,接下来解释一下工作流程:

流程:

1、初始化相关的GPIO,由于我的COM端接GND,所以将相关的IO配置为上拉输入

2、定义一个标志位flag,用于控制是否进行接下来的判断

3、循环中判断A线的状态是否为0,如果为0,则将flag置1,以进行等待A线变为1的操作

4、循环等待A线由0变1,说明已经拨动了一格,此时及时读取B线的值即可判断出当前是顺时针旋转还是逆时针旋转,然后将flag置0,等待下次触发

结果


总结:

使用IO查询法做的编码器读取,读取速度为1ms,这就注定了不能转的太快,实测10ms拨一格,不会出现误判的情况,实际上正常使用,即使是快速旋转的时间间隔也是15ms以上,基本上可以保障准确率,但是如果非要猛转它,那就只能使用其他外设解决了,希望本教程对你有所帮助(*゜ー゜*)


本文标题:ESP32使用正交编码器教程(IDF) - 八卦谈
本文地址:www.ttdhp.com/article/48718.html

天天动画片声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
扫码关注我们