一点交代
试问哪个男生对车会不感兴趣?对于想掌握单片机的同学来说,做项目是一个很不错的方法,小车也是一个比较好的选择。做控制类的话,PID算法应该是无论如何也绕不过去的一个障碍。博主也算为了满足自己的小心愿,利用十天左右的时间做了一个平衡小车。水平不高,勉强达到自己预期,希望能帮有想法的同学少走弯路,也希望带佬指出问题解决我的疑惑。
因为没有自己话PCB用了很多杜邦线导致看起来很乱,稳定性也不很好,分享一点心得。
上图:
建议顺序:买材料–>了解原理–>看懂代码–>画PCB–>搭硬件–>调试
购买材料
前期材料购买比较关键,要充分考虑包括各种铜柱、螺丝等小零件以及尺寸匹配的问题,不然反复购买零件和元器件会很影响进度。(而且春节期间物流基本停了要么运费巨贵)
清单:
硬件框架:编码器电机(一般送连接线)、小车底盘(要选孔多的不然可能电机不好固定)
供电:12V电池、降压模块(选用LM2596S)
元器件:STM32最小系统板、MPU6050陀螺仪、电机驱动模块(TB6612用的多一点)、蓝牙模块(可不买,实现手机控制)、OLED(调试也好用)、USB转TTL模块和下载器
电路部分:有能力的可以自己绘制贴片的PCB,或者自己画简单的PCB元器件画直插式就可以,避免后期大量复杂的杜邦线。墙裂不建议用洞洞板和杜邦线组合,会影响系统稳定而且线很乱让人发疯。(本人就是走的这条路)洞洞板和面包板结合
工具零件:螺丝、螺母、铜柱、焊台、剥线钳等
顺带一提:
1、电机附赠的线可能是PH2.0单头的,建议购买PH2.0转XH2.5或者要求商家发这种线,再买个XH2.5公头焊接在洞洞板即可,PH2.0因为尺寸问题不能顺利插在洞洞板上(不要问我怎么知道的),或者直接焊接在洞洞板背面用排针连接。
2、担心底盘和电机不匹配,不能用螺丝螺母固定可以直接买配套的。通常这种连接线也可以选择同时解决了上面问题。所有零件单独买如果换来换去时间和经济成本其实不如直接买带电机的小车底盘。注意零件尺寸,电路板最好可以直接用铜柱固定(个人感觉热熔胶略丑而且可能会影响重心偏移)
软件
软件部分其实是比较轻松的部分,基本不需要自己写。网上资源很多可以直接用别人的,大鱼电子和平衡小车之家都可以参考,底盘也可以直接买(不是打广告没有收钱,博主自己没有买自己买零件拼的)
最好是先有一定32的基础–>了解PID和各个模块–>能看懂代码–>对应代码中引脚定义和提供的原理图画PCB或直接用洞洞板搭硬件
推荐一个比较详尽的视频讲解包括代码和PID原理
B站UP主:天下行走ㅍ_ㅍ
https://www.bilibili.com/video/BV1j7411z7uX?from=search&seid=14158068301980674347
比较详尽的博客系列
CSDN博主:富士山下丶.
https://blog.csdn.net/weixin_44270218/article/details/113186002
搭建硬件
首先要一定要了解元器件接线明确代码用那些引脚控制模块
电路板、电池降压模块合理布局,一般都是双层,下面放电池和不常用的上面放电路板。尽量对称摆放,居中。个人感觉为了电机的线从侧孔穿过那一坨电池没有摆在底盘*自己的小车重心偏移有点严重,后面调试不大顺利。
用杜邦线的话多点耐心,防止VCC、GND接错,直接报废。
调试
建议模块化调试,先调通电机能转起来–>陀螺仪角度解算输出正常–>整体调试
做过四轮小车的基本对电机驱动芯片不陌生很容易上手,新手基本上比较折腾的可能就是MPU6050陀螺仪。这里推荐正点原子的视频和代码。
陀螺仪这玩意儿因为它功能要求,尽量要焊接在电路板上或者用排座固定,你用杜邦线连接会很麻烦。而且一定要明确陀螺仪三轴位置,注意摆放,一般平衡小车都用的是俯仰角,如果你小车倾倒正好对应你的陀螺仪的横滚角,可能需要调整代码。
推荐帖子:
陀螺仪 MPU6050 解决不同方式安装
https://blog.csdn.net/BinHeon/article/details/110925168
pitch yaw roll是什么
https://www.jianshu.com/p/1e38ad3d4bfb
陀螺仪部分问题解决的帖子:
大致归结为:杜邦线接触不好引起寄存器读取异常、AD0地址高低电平错误、初始化后没有延时没有初始化未成功
关于mpu6050的上电后姿态全初始化为0的问题
http://www.openedv.com/posts/list/54174.htm
MPU6050读不到数据
http://www.openedv.com/posts/list/48171.htm
MPU6050读不出来数据
https://blog.csdn.net/o_o521/article/details/79344233
STM32读取MPU6050问题总结 (可读ID无数据; PWR_MGMT_1休眠位无法清零; 寄存器读写正常无数据;初始化前加延时无法解决问题)
https://blog.csdn.net/qq_26039737/article/details/79214887?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control
PID调试参考视频即可,如果采用杜邦线连接洞洞板可能导致硬件结构不稳定调试出现困难。不必严格按照视频步骤,多积累和总结经验,博主花了半天左右时间基本上直立环和速度环达到要求。
效果演示
只写了直立环和速度环,硬件搭的也不是很稳定简单调了下,后期可能考虑自己画PCB改进一下。
问题总结
整个小车制作的战线拉的也比较长,真正做的时间其实没有很多。在几天的挣扎中摸索出了一些调试的经验。例如合理利用串口、蓝牙和显示屏甚至LED灯进行调试,检查某部分程序或者中断执行是否正常。遇到最大的问题是:
博主采用12V电池通过降压模块给元器件供电,电机驱动芯片VM由电池直接引出的统一供电模式
当降压以后输出为标准3.3V或者将USB转TTL的5V和VCC引脚短接后输出也为3.3V情况下,MPU6050的角度解算结果为0,但是中断服务程序运行正常。
但是意外发现USB转TTL模块不短接时,输出只有2.7V(可能是因为有一个发光二极管的压降)给模块供电,电池只提供给TB6612的VM脚的组合供电情况下角度输出正常。后尝试把降压模块输出调整至2.7V脱机统一供电恢复正常。
简而言之,就是3.3V供电时角度输出为0,2.7V供电时才正常。大概被这个问题困扰了一周,没有结果,找不到方向也没有发现有人遇到过这个问题就跳过接着做了。希望看到这里的人能够参与讨论或者给与指点!
需要平衡小车资料的,可以留下邮箱。欢迎各位积极讨论,共同进步!