一、 前言
本博客原题目叫做“我为什么建议你选择使用面包板制作平衡小车?”没错,这次平衡小车的制作过程除了基本的模块之外,车子上的stm32开发板和模块的连接全部靠杜邦线飞线和面包板插接。我为什么要推荐这么做?我会在最后给出我的答案。
二、 说在最前面
2.1 模块总结
这部分在《平衡小车制作系列之一——捋清制作流程》中有介绍,如一块STM32F103RCT6最小系统板,两个12V电机以及轮子(表面凹印突出较好,抓地力显著)… 但还有一些细节可以提一下,整套小车并没有购买任何网络上的套件。一方面,相比于购买套件,现成的很多材料都可以发挥用场,例如之前用过的OLED,蓝牙模块,能省则省,能改则改,不仅可以节省很多成本,还有DIY的乐趣嘛;另一方面,我认为,只要大胆尝试并愿意发挥想象力,再无用武之地的材料就能“魔”改成自己想要的工具架构。 Why not give it a try? 例如,上图中的两块亚克力板也是从某个亚克力小车上拆下来的,安装过程中,尺寸孔径自然有不合适的地方,但钻孔机这时派上了用场;电机的固定支架,轮子等都是拆出来的~ 当然和画PCB的过程异曲同工,将现有的材料拼接在一起的时候,布局架构必须自己提前考虑,不然后面还需要拆车改线,耗费时间——最开始因为MPU6050安置位置太偏离车身中轴线,导致角度偏差特别大,调试机械零点都费劲,于是将机械结构改了又改,终于比较合适。电机l298n需要连接编码器,pwm以及左右轮子的两个电源线,电池的电源线,所以把它放在车子的中间位置靠后的最合适,左右逢源~ 慢慢地,在制作过程中逐渐理解这个硬件有个这样的功能,应该布局哪个位置比较合适,比上网查资料得到答案理解地更深刻。就像之前前辈说过的,“干咱们这一行,很多东西都是自己去实践体会出来的,别人告诉的不一定完全对,你也不需要记得住,多试试。”
2.2 时间分配(2 Weeks In All)
- 捋清制作过程,构思机械结构,找出自己所需的模块器件——2-3天
- 熟悉STM32开发板,在面包板上面调试相关的模块功能——5-6天(MPU6050弄了很久)
a) 指示MPU能否正常读取的LED灯 b) 显示参数的OLED屏幕(配合MPU6050的读取) c) 控制电机占空比的PWM输出 d) 用于与蓝牙模块通信的串口USART1 e) 蓝牙与单片机的通信 f) 编码器的参数读取(轮子一圈的编码值,每隔10ms的编码值…) g) 完成了以上的测试后,我开始尝试将它们在面包板上融合起来,编写代码测试它们能否协调工作。 - 一边装车,一边接线,一边编写总工程——2天
编码器的接线是最后装完车之后再完成的——为了使面包板和32的接线不凌乱,上面模块的布局接线完成之后,再从车的底部将编码器的A、B相接线引出来接在单片机上。有了上面的模块测试以及整体调试,编写总工程的难度并不大,思路也是按照a,b,c…顺序在车子上重新调试一遍的,顺利许多。 - 不断调整PID参数,不断改车,不断改引脚…——4天
最终调整的效果只是实现了三个环的融合,但是一加上蓝牙控制的加速,减速,转弯等信号,小车接收到信号只能反应相应动作趋势,摆荡着前进,然后哗然倒下,结果差强人意。
2.3 一些问题
对于结果的不满意,我将这些问题和我的分析一一记录下来—— a) 调试过程中,恼人的不仅是永远差一点的PID参数,还有莫名奇妙偏移的机械零点。
- ? 固定不够牢固(而后用热熔胶将面包板,各个模块特别是MPU6050,要检查固定住)
- ? 整体结构不够均匀。装好的小车左轮高度低于右轮高度,两块亚力克立板的高度不一致,小车垂直方向上呈倾斜角度,买块亚克力车模板更合适!
- ? MPU6050的俯仰角,翻滚角随时间的偏移。
b) 上电复位时,电机莫名其妙的疯转,时而左轮,时而右轮,但是在没有给PWM信号的情况下,观察输出的信号只是普通的噪声(类似于400HZ的正弦波)
- ? 与输出的PWM的频率有关
- ? 电机的PWM频率越低,噪声的干扰越大,会被电机“误判”为一段时而高时而低的PWM信号?
c) 电机的死区电压很大,只有小车摆荡很大角度时才能加速,保持平衡。 在频率一定的情况下,可以增大PWM的分度值,也就是定时器的ARR值,调节角度环的Kp、Kd会方便很多。 d) 未解之谜——角度环保持平衡之后,引入速度环(将角度环Kp、Kd下调10%)后,无论怎么改善速度环,小车只能承受很小程度上的外力,再加大一点外力之后,震荡剧烈,难以平衡,也无法真正静止在某一处,是我调节的还不够细致?还是调节的方法不对?
如果有热心网友能在评论区探讨一下这里的问题,不胜感激!
三、 收获与总结
- ? 模块的调试一定要一个个来。
不要觉得之前在面包板上测试没问题,上了车一定能用。装好车之后,为保证飞线不会交错迷乱,我们往往要根据车上模块的位置,变动一下接线的引脚,再继续使用。但谁又能保证最小系统板上的对应引脚没有故障,我们重新选择的引脚会不会影响其他模块的功能呢,这都是值得考虑的。 - ? 电机频率选择一定要在1k赫兹以上。
有趣的是,我发现电机频率越低,在PWM分度值一定的前提下,克服死区电压所需的占空比,即PWM值越小。我认为这和电机的性质有关,毕竟电机的转速是由电枢电流决定的,频率越低,感抗越小,因此,提供的电流会更大,所需克服死区电压所需的PWM阈值会更低。*纯属个人思考,可能有误。
四、 碎碎念
不积跬步,无以至千里。
我看到很多人帖子说面包板制作不稳定,但是又没具体指出不稳定的问题究竟出在哪里。而我尝试做出一辆,但也没有做出操控稳定的平衡小车。用面包板成功“拼”出一个小车的博客也未曾有幸看到,尽管如此,其中的收获也是颇为丰富的。
首先是是思维方式的转变,我们不用怀疑是不是购买的套件出了问题(当然,购买的硬件可以出问题哈~),因为设计全在于你自己,在制作过程中,努力学会自己找出自己的毛病,而不是消磨时间怪这怪那的。Designed In Yourself!
分析问题的角度从“别人写了这一串东西,然后我去测试它能不能正常工作,噢,原来是这样”转到“我设计的功能是这样的,它理想中应该怎么实现,而最终的结果与我的分析又有什么不同,我该怎么改”——知其然而知其所以然。
即使最终未能很好控制小车,我也明白了一个好的设计项目应该是模块的协调整合,再去拓宽高级的算法,但首先必须保证硬件的尽量稳定到位。
在不熟悉PCB画板的情况下,使用面包板能够帮助我们在DIY中规避掉大部分硬件电路故障的风险,同时,面包板的一插一拔的过程也让我沉醉在一个个硬件模块逐渐拼接搭建,一步步调试成功的乐趣。
我想要总是测不出参数的MPU6050能够直观显示问题,于是乎,我搭建了两个LED分别指示初始化正常,初始化失败,然后在自己的代码中加入LED的闪烁找出问题的根源,很蠢很原始,但很有效;我想要引脚接线满足我的搭配,于是乎,不仅限于引脚的序号,还有相关的定时器中断,复用的I2C等,学会将网上的例程改的面目全非,为自己所用,对stm32的整体资源能够把控,并学会节约利用资源…
自然,能用蓝牙控制小车自由飞驰的结果是极好的,但是制作一块面包板平衡小车的嚼着苦涩,含入甘甜的过程也是弥足珍贵的。没有留下什么念想,如果有,那就是——有时间的话,再做一辆更好的! 之前的博客会陆续更上,咕咕咕🕊
|