外贸网站做多少钱的,广西建设厅微信网站,wordpress站群模板,怎么样制作自己的网站背景
官方发布的1.23依然没有在ESP32中集成PCNT功能。考虑到硬件的PCNT模块可以提供4倍的编码精度#xff08;对比使用PIn IRQ#xff09;#xff0c;还能提供硬件去毛刺。 还是自己集成一下吧。
实际上Github上早在2022年1月的时候就已经有人建议了将PCNT加入正式版本的功…背景
官方发布的1.23依然没有在ESP32中集成PCNT功能。考虑到硬件的PCNT模块可以提供4倍的编码精度对比使用PIn IRQ还能提供硬件去毛刺。 还是自己集成一下吧。
实际上Github上早在2022年1月的时候就已经有人建议了将PCNT加入正式版本的功能里面但是官方一直没有动作
ESP32: Add Quadrature Encoder and Pulse Counter classes. by IhorNehrutsa · Pull Request #8766 · micropython/micropython (github.com)作者的代码在这个连接
IhorNehrutsa/micropython at ESP32_PCNT_Encoder_Counter (github.com)
代码质量很高。但是考虑到IDF和MP的版本更新我还是决定自己在新的发布版本中将这个功能加到里面。
差异性分析
在文件差异这里可以看到作者的代码和官方代码的差异性 提一句这个代码的使用说明和实际的代码是有差异估计是后来改了一部分的需要去看源代码确认。
实际上需要改的就是ports/esp32下面的8个文件而且machine_encoder.c和machine_encoder.h的两个代码是完全新增的可以原作者那边下载回来然后去micropython那边下载1.23的代码回来。
代码修改
对比是精确到行的所以点开代码一个个该就好了需要注意有一些文件改的地方不止一处别只改一处就算了否则编译会大概率出错。 全部改好之后编译一次。MP的编译最好在linux笔者是在ubuntu有很多相关的文章我就不重复了。
//idf 环境变量
cd esp-idf
source export.sh
//编译mpy交叉交叉编译器
cd ~/micropython/mpy-cross
make
//配置板子信息
cd ~/micropython/ports/esp32
idf.py -D MICROPY_BOARDESP32_GENERIC_S3 menuconfig
//编译
make BOARDESP32_GENERIC_S3 MICROPY_BOARD_VARIANTFLASH_4M注意安自己的实际条件改下board和path。我是直接买的ESP32-S3-R2FH4集成2M PSRAM和4M FLASH的主要是这个性价比高所以我新建了一个板和你想要的版本可能是不一样的。
然后就报错了情理之中。 第一个warning是说pcnt.h这个驱动快过期了让你用pulse_cnt.h实际上这个影响不大我注释了这个include依然能过问题是在STATICC的保留字应该是小写的 static。去看看官方的machine_pwm.c用的也是static。那就在上面加一个宏定义好了 这下就能编译出来了。
功能测试
from machine import Encoder,PinencL Encoder(0,phase_a Pin(33,modePin.IN),phase_b Pin(34,modePin.IN),x1244,filter_ns 10_000,);
encR Encoder(1,phase_a Pin(35,modePin.IN),phase_b Pin(36,modePin.IN),x1244,filter_ns 10_000,);while True:print (f{encL.value()},{encR.value()})import timetime.sleep(1)
代码直接使用了两个正交编码器接入的是平衡车的左右电机的编码器。测试代码有效可以识别正传反转而且4x之后精度确实很高。 固件下载
【免费】ESP32S3MICROPYTHON1.23集成PCNT功能4MFLASH资源-CSDN文库