【平衡小车】【串级PID参数整定】【详细版】根据现象手动调整平衡小车的PID
作者:互联网
【平衡小车】【串级PID参数整定】【详细版】根据现象手动调整平衡小车的PID
简介:二轮平衡小车的控制分为平衡环(又称为直立环,保持稳定角度)、速度环(用来保持稳定时速度为零)以及转向环(用来无转向命令时调整走直线),下面详细介绍各环PID参数的整定
硬件准备:平衡小车之家的小车底盘,STM32F1,电机驱动模块,MPU6050等
软件准备:简化后的平衡小车代码(关闭了蓝牙功能等),上位机示波器(观察角度)
一、直立环PID
直立环是为了保持平衡小车维持在机械中值,先插入机械中值的确定:
根据每个人搭建的平衡小车不同,小车的物理参数(如重心、质量)也会变化,确定机械中值是,先将小车从后往前仰
直到小车到达临界状态恰好向前倾倒,记录此时角度值1(通过OLED或者串口显示出来,这里我用的是串口显示)
同理反向操作一遍(从前往后倾倒)得到临界角度值2,取二者平均值记为中值
由于小车直立环更需要超前调节(D),而不太需要弥补性质的积分调节(I),所以大多直立环都是PD控制,关于P的确定:
首先确定P的极性,也就是P参数在你的控制函数里的正负:清零其他参数,设置P=+1,如果向前倾,车轮前转,则极性正确,反之错误(车轮需要向前倾的方向转动以达到矫正的目的,即平衡)
然后确定P的大小,清零其他PID参数,将P从小到大逐渐增大,当出现小车无大幅晃动的情况(可以比较好的矫正角度偏差),到达第一档,说明你的P已经在一个良好的适合调节的范围,继续增大P,中间可能出现更好的更稳定的现象,但不要停止增大参数(因为你不知道最好的阈值在哪里),最终目标是增大到小车出现大幅低频抖动,此时我的Kp=550
接下来确定Kd,关于直立环D的确定:
也是先确定极性,清空之前设置的Kp及其他PID参数(单一变量),设置Kd=+0.5,Kd极性正确的现象与Kp一致,都是向哪里倾倒就像哪里转动。
接下来确定大小,此时恢复之前设置的Kp=550,从小到大设置Kd,直到出现高频率的震荡(此时有较强的抗干扰性,且小车极容易触发高频震荡,找到该参数时请及时关闭电机以防止电机损坏)可以看出此时的晃动幅度被抑制,但是晃动频率变高
我得到的Kd=2.5,根据工程经验,将得到的Kp、Kd都乘以0.6,得到最终直立环的PD参数330、1.5
二、速度环PID
速度环是PI控制,速度环为了能保证稳定时候速度为0,防止出现小车为了保持固定角度一直前进的情况,更多的需要积分控制,速度环的变量是轮的速度,对其进行积分可以让滞后调节进行反作用,比如小车前行了一段距离,会被积分记住,然后让小车返回该段距离,这里有一个平衡小车的工程经验:Pi=(1/200)*Kp
,所以我们只需确定Kp即可,关于Kp的确定
还是老样子,先确定Kp的极性,此时根据单一变量原则,我们需要注释掉直立环和转向环的代码
//Balance_Pwm =balance(Angle_Balance,Gyro_Balance); Velocity_Pwm=velocity(Encoder_Left,Encoder_Right); //Turn_Pwm =turn(Encoder_Left,Encoder_Right,Gyro_Turn);
然后要想知道速度环Kp的极性,就要知道我们的轮子转向是负反馈还是正反馈,一些文章里说速度环需要的是正反馈,却没有细说原因是什么。原因是:小车的平衡以直立环为主,速度环为辅,当小车有向前的速度是,主导因素当然是因为小车在向前倾,直立环使其产生向前的速度,这个时候如果想恢复到速度为0,就需要添加更大的底盘速度使小车摆正,正因如此,当我们模拟转动小车的轮子时,正确的极性应该使得小车轮子继续沿我们刚才转动的方向旋转直到最大转速(因为你关闭了直立环调节极性时,速度环一直检测不到速度为0的状态,他就会很奇怪,以为自己的速度不够大没有使得小车回正,就一直加速)。
说了这么多,结论就是:转动小车的某一轮胎,小车自动沿着你转动的方向继续转动,则极性正确,否则极性错误
如果你没有出现极性正确或者错误的现象,而是两轮速度逐渐趋于0(滤波的作用),或者速度维持不变,那你要注意,很可能是你的编码器相位接错了导致两轮速度做和等于0
然后我们来确定Kp的大小
目标达到的条件:小车保持平衡的同时,速度接近0,若有轻微跑动可以回到原来的位置
记得之前注释掉了直立环吗,现在我们重新开启直立环,选一个量级(比如1,10,100)调节速度环Kp,我选择10量级,Ki由Kp确定(如上文所述)。调节过程中,
当Kp还没有足够大时,现象是小车已经可以保持角度稳定,但小车无法控制在一个摇摆范围内运动,仍然会直线冲刺,此时继续增大Kp&Ki
直到小车稳定在小幅空间及角度范围内摇摆晃动,效果最好
当然此时如果你继续增大可能会使积分作用大于直立环作用,现象是小车向某一方向冲刺或者震荡,如果你在上一步找到了稳定的Kp和Ki的值之后发现小车平衡能力虽然有,但抗干扰能力不强的话,你可以略增大Ki,同时震荡出现,调节直立环Kd使得震荡消除,也许可以提高小车抗性.
调整结束后,小车成功平衡
当然到此为止,小车往返的路程里可能会不走直线(由于物理机械原因或者原地抖动时摩擦地面转向),这一点可能会按需求来,
,有的人认为仅平衡时也需要转向环的作用,但转向环更主要的作用是可以在之后命令控制时起到稳定作用
三、转向环
要了解转向环的参数极性以及PID设置,就要直到转向环所起的作用。我们希望转向环能在我们下达转向命令时加速(帮助)转向进程,并且有的人希望能在无命令时保持直线位姿,由此分析得到,if语句判断后,普通的维持平衡的转向只需要Kp比例调节即可满足需求(变量为z轴陀螺仪的值,但我觉得也可以尝试一下两轮的编码器差值?)转向时用到的则是PD超前调节。
平衡时的Kp极性:注释其他代码后,拿起小车绕z轴旋转,两轮转向与人为的转向相反,极性正确
平衡时的Kp大小设置:从小到大尝试,过小无明显作用,过大造成车体抖动(也可以在平衡时不设置)
标签:极性,小车,PID,Kp,直立,速度,平衡 来源: https://blog.csdn.net/Kejane/article/details/120990477