TT马达平衡小车制作
假期无聊本来买个淘宝的寻迹小车套件,做了个寻迹小车和遥控功能。后来看到了平衡小车就想搞一个。
去搜了方案基本都是平衡小车之家的编码器电机和车模,一搜好几百,学生党不太买得起。
还有一种就是TT马达加了个编码器,也能实现一样的功能,但是发现带编码器的TT马达一个就二十多还是三十多,想想还是算了。
最后还是决定用只用TT马达试试看。
使用模块
1.电机驱动
电机驱动使用 TB6612FNG,使用说明太简单就没什么说的,使用两个轮子这模块体积小一点,PCB也好做。
2.平衡角测量
MPU6050模块,网上例程挺多的,找了好久最后找到个大神写的,兼容性还不错。不过其实所有的例程也都差不多,各种算法什么的也不用纠结,卡尔曼啊、一阶滤波什么,也不太在乎,能出结果就行。
3.显示部分
其实做完之后显示部分作用不太大的,但是调试的时候方便,还是加上了IIC通信的OLED,只要还是显示个角度,方便调试和观察。
4.遥控部分
决定还是加上遥控的功能,毕竟只会平衡也很无聊,做寻迹车的时候买了HC的蓝牙,还是决定用上。
5.超声波部分
超声波也是寻迹车上的,暂时没想用,但是还是预留了接口,PCB也加上了,想用的时候改改代码还能用。
6.电源
电源就没什么好说的,两节18650,7.2V再来个降压模块就有5V电了,所有的模块都可以接受5v电,包括电机驱动的输入,5V也能带动电机,而且速度也可以。
7.电机
电机就是平常的TT马达,带减速的那种,小黄色外壳的那种。这里没使用编码器和测速的(因为穷)。
所有的模块就使用了这些,刚开始用洞洞板插上去意思意思调试了,最后功能实现了才做的PCB,回来直接把PCB当底板,热熔胶把轮子沾到两边就行了。
PCB
1. 自己画的PCB,全部做成了插件的样子,学生党,模块买起来还是挺贵的,可以循环利用吧。
2. 左边四个角是降压模块的,最下面的洞是插个开关,直接买寻迹小车的套件,有轮子还有个开关,价格还比直接买俩轮子价格差不多,还是这个划算一点。
3. 单片机中间的俩洞,是用来固定电池,单片机插上去下面是空的,电池放在背面,整个东西吧电池固定在下面,扎线啊啥的,可以省一层底板,就算没有使用,单片机盖着也看不出来。
4. 右边就是电机驱动和MPU6050了,检测平衡的还是尽量往中间放了一点,上面的是蓝牙的插口。
5. 中间最上面的是给超声波预留的接口,代码里初始化和检测距离的也都写了,只是没有调用,也没想好检测距离准备干嘛。
6. 板子两边给电机留了个缺口,放电机。
软件
芯片用的STM32F103C8T6,够用了。
主要资源分配吧。
1 串口
串口其实也用不到太多,就用了串口1,用来连蓝牙了,初始化完之后,就是中断服务函数了,就是用来调节遥控移动的。
2 定时器
定时器使用的挺多的,用的乱的话可能引脚冲突都不够用,还是要好好规划一下。
通用定时器设置还是比较方便的,就用了通用定时器,定时器234.
定时器二 用来定时中断,小车的控制函数都在定时器二的中断处理里边。
定时器三用来输出PWM波,给电机速度信号了,电机一共需要两路,两个通道就够了。
定时器四预留给了超声波模块,用来测距的,但是只是使用定时器通道引脚也就无所谓了,随便找空闲的引脚就行了。(我试了,有几个有特殊功能的引脚貌似不行,也可能是我不会设置)
3 IIC
手头上买的OLED和MPU6050都是IIC通信的,IIC通信的引脚其实现在也没搞特别明白,基本就是按照例程设置的,也没影响其他功能。
MPU6050就没什么好说的,会得到数据就行。
OLED其实除了显示个角度,剩下的就只有好看了,当然也可以加上蓝牙的遥控状态之类的,做了预留,可以加。
代码编程
- 主函数里就都是外设初始化。最后一个while(1),里面一直执行OLED的显示。速率不太高,减少浪费吧,主要资源给定时器,其他的也没啥。
- PWM初始化就很普通。
- OLED初始化,和字库设置好。
- MPU6050初始化,能调用测量结果就好。
- 重点在于中断函数,也就是平衡控制,是通过定时器每隔5ms中断一次,中断处理函数里,检测偏差和偏差变化率,分别使用直立环、速度环和转向环控制,得到PWM信号赋给电机。蓝牙通过修改角度差,或者左右电机的正负来控制小车直行或者转向功能。
- 代码有点长,PCB组装完成之后,有时间再来看吧。
实物图
背面准备加电池的,还没加。
运行结果
还没加电池,平衡效果视频链接https://b23.tv/ELZCO9,先到这,后续再调吧。
电池买回来了,发现小车左右遥控的时候一直抖,调试了好久,最后发现,左右电机接反了。。。效果OK。视频效果链接如下。https://v.youku.com/v_show/id_XNDY3MjMxODEyNA==.html
b站视频评论区有开源资料。