蓝星旋钮旋转跳动大异常解决办法
最近事情比较多,忙工作还得学习,时间上比较紧张。更新进度较慢,还望理解。
问题描述如下:旋钮旋转的时候会出现多个图标的跳动
原因1:程序问题,过于灵敏(重点,本文章也是基于修改程序对旋钮优化)
原因2:这个概率出现无法避免,大概是工艺问题,有部分径向磁铁充磁不均匀
首先下载程序文件,这我不过多赘述
这是旋钮固件的文件目录
这个固件是使用c++编写的,看不懂不用管
这个main.cpp是主程序,所有的任务都在这里,改程序也是基于它
----------------------------------------------------------正片开始
在这里我先说一下程序执行的流程,如果出现其他问题也可以参考一下。
程序执行开始从 void setup开始
>>将GPIO45引脚配置为输出模式(这个问ai,不赘述)
>>将GPIO45引脚配置为低电平
>>串口初始化(如果你接受不到串口数据,记得在串口助手把波特率改为115200)
>>初始化电机(这个是用的SimpleFOC库,想要更大扭力或者更牛逼的反馈改这里)
>>初始话GUI(也就是屏幕显示的图片那些东西,可以自己替换,注意格式和分辨率)
>>初始化HX711(这个就是个电子秤传感器,按压不灵敏改这里)
>>延时50ms(这个没啥好说的,就是等待50ms再执行下一个程序)
>>打印内存大小(如果你烧录完,串口不打印东西,可以看这里是不是注释掉了)
“注释就是前面两个 //,把这两个杠删掉再编译”
-----------------------------------------------------------------这里重点讲一下,怎么解决旋转异常跳动等问题
问题分析:旋转的时候磁铁数据给到编码器,编码器给到esp32,esp32执行指令。那再排除硬件问题之后,重点考虑的就是电机函数这块。
打开motor.cpp,在这里面找到对应的函数修改数值即可
首先记住这几个单词 snap_point
(捕捉点阈值) 、position_width_radians
(每个位置的角度宽度)、detent_strength_unit
(定位力度)
调整流程,将以上三个参数微调。接着再调整pid优化一下手感,默认参数的手感是偏松的,可能是考虑需要节能的原因。
重点——————
上面是调整死区范围
这里的每个参数我并没有一个一个调试具体效果。每个人手感也有差异
上面是调整PID参数
上面是调整滤波
然后还有一个是修改手感模式(这我没测试)
把这里的0改成0-10任意数字,对应不同的模式