平衡小车的具体实现推荐b站一位up主,从打板到PID调参都讲解得很详细,适合初学者。
以下是视频地址:
基础篇:了解各模块的作用,以及c8t6的基础知识。
草履虫都能学会的STM32平衡小车教程(基础篇)_哔哩哔哩_bilibili
软件篇:主要控制程序。
草履虫都能学会的STM32平衡小车教程(软件篇)_哔哩哔哩_bilibili
本文主要基于以上视频讨论实践过程中遇到的问题以及解决方案。
1.按up主的PCB板来制作可能会出现铜线被烧断等问题,原因是PCB板中没有加入220μf电解电容及104瓷片电容,这能保护PCB板不被尖峰电压击穿。具体操作为:在12V锂电池接入处接220uf电解电容,在降压模块5V输出处接104瓷片电容。
关于尖峰电压及吸收电路可以学习以下文章:【电路设计】尖峰电压与浪涌电流-CSDN博客
此外PCB板的制作还应注意以下三点:①12V锂电池供电处线路至少1.5mm宽,否则易烧毁PCB走线线路。②PCB板绘制时注意封装(包括通孔位置、大小)是否与需要使用的模块相对应。③特别注意:电机编码器正负需提前规划好,否则将影响后续进程!
打板总用时:一个月。原因:共打板三次,第一次封装与已有模块不符;第二次未加电容及走线线路太窄,导致铜线烧穿;第三次电机编码器正负接反导致编码器读数没有传入C8T6,并差点烧坏编码器。
2.调试过程中可能会出现的几个问题:
①IIC通信问题:检查引脚是否都正确还有器件的地址是否一致。
②MPU6050没有读数:看调试中MPU6050有没有读数,如果有就是OLED的问题,检查OLED,如果没有考虑以下解决方案——MPU6050在中断中读数占用时长太长导致中断不能结束,可以将读数功能移至主函数while循环中,但这会导致读数时间变慢,延迟较高,非必要不采取;部分情况可能是自检不通过,关闭自检或reset;其他情况可以通过调试查看mpu6050读数据的函数,返回值也就是错误代码,根据这个去查是哪里出了问题;如果各种方法都用过了可以考虑是MPU6050坏了,毕竟它太脆弱了ヽ(。_°)ノ
③编码器没有读数:考虑编码器正负极是否接反
3.几个建议:
①低通滤波效果不明显,可以改用卡尔曼滤波,可以学习下文:
卡尔曼滤波算法 C语言实现 示例_卡尔曼滤波c语言实现-CSDN博客
滤波笔记一:卡尔曼滤波(Kalman Filtering)详解-CSDN博客
【工程师学算法】工程常用算法(二)—— 卡尔曼滤波(Kalman Filter)_卡尔曼滤波 精髓-CSDN博客
②PID调试时使用恒压电源而不是锂电池,因为锂电池的电压不稳定会对PID调试产生影响。