前言

自从肝了这么多正点原子stm32的视频,一直没有做项目来实践。这次的平衡小车项目可以说是很适合练手的,也具有一定的挑战性,特别是新手第一次做的时候,要完成整体的框架是有一定的难度的,不知从哪里下手。

从开始做大概经历了半个多月,终于实现了蓝牙遥控的平衡小车,这一路跌跌撞撞,一直在重复掉坑然后爬出来再掉入下一个坑,这里写下来一方面是为了记录和总结这段时间学到的知识和经验,另一方面希望能够为其他的初学者排雷。毕竟我在做的时候也是一直参考其他博主和商家的资料,也希望能够能帮自己排雷。(下面都是作者自己的见解,有什么不对的,大神们可以联系我更正)

下面开始排雷:

硬件篇:

1、小车的板子,建议最好是自己画PCB,这里我因为放假电烙铁忘带回家了,加上疫情只好买的商家的板子。这里真的要吐槽一下某亚博智能的板子,MPU6050的中断线也没接浪费了,一键下载还要自己拔跳线帽,非常不方便。开发时很受限制,有些只能跟着他写。

2、小车的平衡效果跟它的硬件结构其实有很大的关系,理论上,小车的重心越靠近轮轴,小车就越容易达到平衡。所以对于初学者,不用跟淘宝上商家的小车结构一样,避免了头重脚轻小车不容易平衡。像电池这些比较重的,可以考虑放在下面。我的是这样:

stm32蓝牙平衡小车制作项目心得(一)

3、电机的接线,这个简单说说就好啦,减速电机通常是接12V左右的电源,也就是M+、M-,编码器的正负极接5V的VCC和GND,然后编码器的AB相就接stm32的io口就好啦,单片机可以通过io口获取编码器输出的电频计算速度。

PID篇:

小车需要使用PID算法的主要是控制小车输出速度的直立环、速度环、转向环。

直立环:

也是小车保持直立最基础的控制环,需要运用的是PD控制,也就是P(比例控制)和D(微分控制),计算公式:

Vertical_Out=Vertical_Kp*(Roll-Med_Angle)+Vertical_Kd*(gyroy-0);

其中Roll是MPU6050获取到的小车偏离y轴的角度,Med_Angle是小车达到平衡的期望角度,也就是机械中值,gyroy是MPU6050获取到的小车对于y轴方向的加速度。

通过调节Vertical_Kp和Vertical_Kd,小车就能够实现对偏离的角度进行反应,并正反馈去保持平衡。只靠直立环还不足以让小车站稳,比例控制会让小车对偏离角度产生反应导致低频震荡,而微分控制是为了抑制小车的震荡,让小车趋于平稳。

速度环:

速度环的作用主要是让小车能够趋于稳定的状态,通过计算当前小车的速度,和之前对小车速度的累加,进行PI控制(比例控制和积分控制)。

Velocity_Out=Velocity_KpNow_Speed+Velocity_KiSpeed_S;

Now_Speed为计算的当前小车的速度,Speed_S是对获取到的小车速度的累加值。
即Speed_S+=Now_Speed;
由于小车前后的速度有正有负,所以速度环的工作就是让小车的速度值相加之后为0,即让小车能够在受到干扰时回到原位,即趋于稳定。

小车要想站稳的话有了直立环和速度环就基本可以了,大体效果如下:

stm32蓝牙平衡小车制作项目心得(一)

转向环:

由于两个轮子的电机可能造成同样的值输出会有一点差距,转向环的作用是调整这两个轮速度的差值,即利用MPU6050获取到的小车偏离z轴的加速度,然后根据z轴加速度的大小赋给左右轮不同的速度让它走直线。

Turn_Out=Turn_Kp*gyro_Z;
然后在让一个电机输出的值加Turn_Out,另一个减Turn_Out就好啦。(这里要注意极性。)

就先介绍到这里,下一篇是软件篇,我会把写程序的大体框架和写程序中遇到的坑都列出来,供大家参考。这段时间比较忙,之后有空我也会把整个工程程序分享在我的微信公众号上, 有需要到时候可以下载。要是急也可以在我的微信公众号加我微信联系我,我也可以直接分享。

希望对读者有所帮助,喜欢的话可以关注一下我的公众号,我会把学习笔记发在上面,大家可以一起共同学习!

stm32蓝牙平衡小车制作项目心得(一)
stm32蓝牙平衡小车制作项目心得(一)

  • 版权声明:文章来源于网络采集,版权归原创者所有,均已注明来源,如未注明可能来源未知,如有侵权请联系管理员删除。

发表回复

后才能评论