欢迎光临散文网 会员登陆 & 注册

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

2023-07-06 22:33 作者:老闲渔  | 我要投稿

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


编码器原理图:

原理图


一共只有四个重要引脚,分别是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拨一格,不会出现误判的情况,实际上正常使用,即使是快速旋转的时间间隔也基本是20ms以上,基本上可以保障准确率,但是如果非要猛转它,那就只能使用其他外设解决了


        后记(吐槽):正交编码器是个好东西,一个编码器就可以顶替掉三个普通按键的功能(正转,反转,按下),而且体验上比传统按键好得多,搓编码器很解压,但是,但是,但是,怎么使用编码器是个问题,之前有大概了解过,网上资料给我的感觉就是挺麻烦挺不好做的,STM32官方已经适配了正交编码器的接口,直接可以使用,ESP32好像没有,需要自己实现,话不多说先去百度一波,搜索“esp32 正交编码器”,搜出不少内容,点开第一个链接,好,csdn付费专栏,我**&%¥#@#¥&,第二个链接说的是使用ESP的pcnt功能实现读取编码器,但是代码好多好复杂,不想看,第三个链接也是csdn的,写的还不错的,用的中断和队列,优雅但复杂,暂时跳过,再从后面的链接开始基本上就没什么相关的东西了,要么是arduino,要么是stm32,要么就是单纯编码器的介绍,那么去bilibili搜索一下正交编码器好吧,结果出来的内容要么就是只有几分钟的成果演示,要么就是好几十分钟的长篇大论,但是我只是想简单的了解一下编码器的工作流程,然后能够用起来就好了,我并不想听好几十分钟的篇幅给我介绍编码器的各种详细数据、类型、各种无关紧要的巴拉巴拉的东西,然后我一思索,这玩意就三四个脚,不至于那么难吧,于是就简单的用串口打印了一下编码器旋转时各个引脚的电平状态,稍微总结了一下变化规律,然后自己实现了功能,核心逻辑只有16行代码,完全可以胜任大部分日常使用的场景,比起各种教程里动辄几十上百行的代码,可以说是非常的简单明了了,唯一的缺点就是辛苦CPU以及不支持猛转编码器,不如中断或者其他外设来的优雅......到底还是自己给搞定了

        现在找一篇干练一点的教程是真难啊,很多教学视频都是猛猛的灌水,没有干货,印象最深刻的一个视频教程,核心内容就一句话,但是视频愣是做了十几分钟,大概就是“同学们啊...额...这个...今天呢...我们来讲讲这个东西啊....嗯...咳咳...这个啊..就是这个还是很重要的...嗯...所以我们来讲讲...嗯啊...”这样的,还有就是操作不熟练就直接录教程,然后总是写错,通篇都在改错,要么就是视频声音听不清,我都要看自闭了😭还有网上抄来抄去的各种教程,十几个不同的网站但是里面的内容一模一样,也不知道谁抄的谁,原作者都找不到了,现在像这样的教程越来越多,导致很多干货的教程都被淹没了,不容易找到,要么就是各种付费,今天就是找了半天没找到什么心仪的教程,有感而发写下这篇专栏

        不过话说回来,有人愿意免费出教程就不错了,总比啥都没得看强,希望本教程对你有所帮助(*゜ー゜*)


ESP32使用正交编码器教程(IDF)的评论 (共 条)

分享到微博请遵守国家法律