上一篇文章:看完这篇文章,还不会做平衡小车,你来打我。
描述了平衡小车的制作过程,也开源了一部分设计资料。在上篇文章留言中,有朋友说:
![33e9d813dda2a1722183aee8f0071950.png](https://img-blog.csdnimg.cn/img_convert/33e9d813dda2a1722183aee8f0071950.png)
安排,必须安排!
1、PID
关于PID的概念,网上相关的帖子太多,在此不再赘述。
之前也有过几篇关于PID的文章:
再论PID,PID其实很简单。。。
PID算法搞不懂?看这篇文章就够了。
这次我们聊下关于平衡小车中的PID,
在平衡小车的PID中,分为三种PID,分别是直立环、速度环、转向环。任何一个PID最终计算出来的都是电机PWM,都是需要赋值给电机的。环环嵌套,得出电机的最终控制PWM。
2、直立环PID
在直立环中,PID的入口参数为:平衡小车的姿态角和姿态角对应的角速度。
值得说明,MPU6050得出来的姿态角有三种:PITCH(俯仰角)、ROLL(翻滚角)、YAW(航向角)
一般来说,MPU6050都是平方且平行装在平衡小车上,总不会有人垂直装吧。
如果平放且平行安装,那么直立环PID的入口参数为:Pitch或roll。直立环中,有一个较为重要的概念,也就是机械中值。通俗讲,小车在不接受任何外力或者电机作用,能够找到一个角度自我平衡。如何理解这句话:很简单,小车电机不转动,人的手扶着小车,小车总能找到一个角度,自我短期平衡。此时的角度就是机械中值。
直接看代码:
/*******************************************************************
函数功能:直立PD控制
入口参数:角度、机械平衡角度(机械中值)、角速度
返回 值:直立控制PWM
作 者:张巧龙
******************************************************************/
int balance_UP(float Angle,float Mechanical_balance,float Gyro)
{