【平衡小车】【串级PID参数整定】【详细版】根据现象手动调整平衡小车的PID

【平衡小车】【串级PID参数整定】【详细版】根据现象手动调整平衡小车的PID

简介:二轮平衡小车的控制分为平衡环(又称为直立环,保持稳定角度)、速度环(用来保持稳定时速度为零)以及转向环(用来无转向命令时调整走直线),下面详细介绍各环PID参数的整定
硬件准备:平衡小车之家的小车底盘,STM32F1,电机驱动模块,MPU6050等
软件准备:简化后的平衡小车代码(关闭了蓝牙功能等),上位机示波器(观察角度)
一、直立环PID
直立环是为了保持平衡小车维持在机械中值,先插入机械中值的确定
根据每个人搭建的平衡小车不同,小车的物理参数(如重心、质量)也会变化,确定机械中值是,先将小车从后往前仰【平衡小车】【串级PID参数整定】【详细版】根据现象手动调整平衡小车的PID
直到小车到达临界状态恰好向前倾倒,记录此时角度值1(通过OLED或者串口显示出来,这里我用的是串口显示)
同理反向操作一遍(从前往后倾倒)得到临界角度值2,取二者平均值记为中值
由于小车直立环更需要超前调节(D),而不太需要弥补性质的积分调节(I),所以大多直立环都是PD控制,关于P的确定:
首先确定P的极性,也就是P参数在你的控制函数里的正负:清零其他参数,设置P=+1,如果向前倾,车轮前转,则极性正确,反之错误(车轮需要向前倾的方向转动以达到矫正的目的,即平衡)
然后确定P的大小,清零其他PID参数,将P从小到大逐渐增大,当出现小车无大幅晃动的情况(可以比较好的矫正角度偏差),到达第一档,说明你的P已经在一个良好的适合调节的范围,继续增大P,中间可能出现更好的更稳定的现象,但不要停止增大参数(因为你不知道最好的阈值在哪里),最终目标是增大到小车出现大幅低频抖动,此时我的Kp=550【平衡小车】【串级PID参数整定】【详细版】根据现象手动调整平衡小车的PID
接下来确定Kd,关于直立环D的确定:
也是先确定极性,清空之前设置的Kp及其他PID参数(单一变量),设置Kd=+0.5,Kd极性正确的现象与Kp一致,都是向哪里倾倒就像哪里转动。
接下来确定大小,此时恢复之前设置的Kp=550,从小到大设置Kd,直到出现高频率的震荡(此时有较强的抗干扰性,且小车极容易触发高频震荡,找到该参数时请及时关闭电机以防止电机损坏)可以看出此时的晃动幅度被抑制,但是晃动频率变高【平衡小车】【串级PID参数整定】【详细版】根据现象手动调整平衡小车的PID
我得到的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参数整定】【详细版】根据现象手动调整平衡小车的PID
当然到此为止,小车往返的路程里可能会不走直线(由于物理机械原因或者原地抖动时摩擦地面转向),这一点可能会按需求来,
,有的人认为仅平衡时也需要转向环的作用,但转向环更主要的作用是可以在之后命令控制时起到稳定作用
三、转向环
要了解转向环的参数极性以及PID设置,就要直到转向环所起的作用。我们希望转向环能在我们下达转向命令时加速(帮助)转向进程,并且有的人希望能在无命令时保持直线位姿,由此分析得到,if语句判断后,普通的维持平衡的转向只需要Kp比例调节即可满足需求(变量为z轴陀螺仪的值,但我觉得也可以尝试一下两轮的编码器差值?)转向时用到的则是PD超前调节。
平衡时的Kp极性:注释其他代码后,拿起小车绕z轴旋转,两轮转向与人为的转向相反,极性正确
平衡时的Kp大小设置:从小到大尝试,过小无明显作用,过大造成车体抖动(也可以在平衡时不设置)

上一篇:net 9 时钟分频


下一篇:前端黑科技:美团网页首帧优化实践