说明:本文章适用于STM32初学者,想完成一个好玩且有深度的项目但不知道从何下手的同学。
PID调参是平衡车的精髓所在,参数整定的好坏直接影响到平衡车的平衡效果。有的车平衡时来回晃而参数选的好的车就能稳稳地平衡在原地。可见PID调参在PID中是重中之重。我们一定要会调并且有针对性的去调。通过平衡车的例子举一反三,相信我们之后在遇到PID调参时能够从容不迫,非常迅速的找到最合适的值!!
对于一个控制系统,我们期望的响应结果是稳(系统稳定不震荡不发散)、快(系统响应快速)、准(系统静态误差小)。对PID控制器的调节结果评价也是如此。
PID系数的作用
比例系数Kp:
三个参数中的绝对主力,不可或缺。Kp增大可以加快系统响应,减小静差,但系统超调量会加大,稳定性变差。比例控制是一种立即控制,只要有偏差,就立即输出控制量。大部分系统只需要P控制即可实现基本的稳快准需求。
积分系数Ki:
三个参数中的一般主力,用于消除静差、Ki减小可以降低超调量,使系统的稳定性增强。积分控制是一种修复控制,只要有偏差,就会逐渐去往消除偏差的方向去控制。
微分系数Kd:
三个参数中的预备人员,一般不用,在反馈量噪声比较大时可能会使系统震荡。Kd增大可以加快系统响应,减小超调量,适用于迟滞系统或无阻尼系统。微分控制是一种提前控制,以偏差的变化率为基准进行控制。
基本调试方法:先比例(从中间到两边)、后积分(从0到大)、再微分(从0到大)。
所有需整定参数罗列
1.直立环(未用到I项)
Vertical_Kp——直立环P项
Vertical_Kd——直立环D项
2.速度环(未用到D项)
Velocity_Kp——速度环P项
Velocity_Ki——速度环I项
3.转向环
Turn_Kp——转向环P项
Turn_Kd——转向环D项
整定顺序:在平衡小车工程中我们先进行直立环的参数调节在进行速度环最后再加上转向环。
在PID参数整定之前我们首先要找平衡车的机械中值,所谓机械中值就是不在任何外力的干扰下,小车能够保持平衡时间最长的位置。
机械中值寻找步骤:
1.在OLED显示屏上显示对应的角度或者通过串口实时反馈角度。
2.观察角度,一只手把平衡从一个方向往另一个方向托,在其快速倒下的瞬间我们记住当前的角度值。另一个方向同理,我们将两个角度值相加除以2得到的中间值作为机械中值。(这个值往往不是0度可能是-1°、-2°、-3°或1°、2°、3°这是由小车的硬件所决定的)
直立环PID参数整定
直立环分析:直立环顾名思义就是让车别倒下,始终稳定在直立的状态,只要角度一倾斜,立马PID就要起作用通过控制电机转速来达到角度始终在机械中值位置。所以就要求小车的反应速度要快(Kp),并且要具有预测性,让其能够达到提前控制的目的(Kd)。综上分析,我们需要P项和D项而不需要I项。
直立环PD控制器:KpEk+KdEk_D
调参顺序:1️⃣Kp2️⃣Ki
1.判断参数(Kp,Kd)极性
因为我们PWM波的满占空比对应的ARR值为7200,所以我们预设一个Kp=200;这个预设值怎么来的呢,我们可以思考一下,我们将车慢慢倾斜,倾斜的角度越大,我们需要调节的量也就越大,也就是车轮转的越快。满占空比是7200,比如我们与机械中值相差10°,那我们P项算出来的占空比就是10*200=2000他是和7200在同一个数量级的所以可行。若预设值选为20或者2000,那我们的值要么根本达不到,要么可能极小的误差就会引起很大的反应。因此我们选择KP=200;
我们知道要想使小车保持平衡,那我们就要车往哪边倒,车轮就要往哪边转。所以当我们KP=200时我们观察小车的车轮转向,若和倾斜方向相同说明极性相同否则极性不同那我们就需要KP=-200;并且我们在倾斜角度越大时,车轮转的越快。若具有这个效果说明我们的PID程序没有问题可以进行下一步。
2.调节Kp
我们逐步增大Kp,我们可以步进30慢慢的往上加或往下减,并且我们要时刻观察小车的情况。我们通过对公式的分析,若P很大那么小车会大幅度低频振荡,若P还不够小车会一直向一个方向跑直到倒下。所以我们就慢慢地加减这个值,当小车达到低频振荡时说明Kp已经足够大了这个值我们就确定了。(Kp调节过程中小车会慢慢的有平衡的趋势)
3.调节Kd
KD的作用是消除振荡,所以我们D项要从0慢慢往上加,同时Kd的极性与Kp相同。我们步进0.5,当我们选取Kd=0.5时我们可以发现低频振荡已经消失。我们在往上加,当小车有良好的跟随性时(当我们手拿着小车在平面上快速移动,小车能够很良好的跟随并且平衡),当前的KD就可以确定了。如果直立环参数调的好,小车在没有人为干扰下能够静止在原地,平衡很长时间。
根据工程的经验,我们要将此时所定下来的Kp,Ki都乘0.6.
速度环PID参数整定
速度环PI:KpEk+KiEk_S
1.判断参数(Kp,Ki)极性
因为我们使用的是串级PID,速度环的输出是直立环的输入,我们直立环的KP已经是几百了所以我们速度环的PID参数会很小。所以我们预设KP=0.1根据工程的经验我们的速度环Kp=Ki*200所以我们预设的KP=0.1那么Ki=0.0005。判断极性有两种方法:
1️⃣试。我们在直立环数值保持不变的情况下,要么取正要么取负。若极性错误的话,小车不会像单纯直立环控制那样,会快速倒下。如果小车的平衡效果并且用手轻轻取碰小车,小车不会倒下说明极性正确。
2️⃣把直立环的参数注释掉或者都设为0。并且将最后PWM赋值的数值直接改为速度环的输出,也就是暂时取消串级PID,以及屏蔽掉直立环。单纯让速度环算出来的值加载到电机上,若极性正确向一端倾斜,小车的车轮会向同方向轻微转动一下。
2.调节Kp,ki
kp=200*Ki
在直立环参数整定完成之后,我们从0开始往上加,KP步进为0.1对应的KI步进就为0.005.我们一直往上试,直到小车有轻微高频抖动像抽搐一样,我们的值就可以了。注意:小车的高频抖动可能会损坏电机以及驱动等,所以我们在小车高频抖动时要立即关闭小车。避免损坏。
这样通过直立环,速度环的共同作用我们的小车也能良好的保持平衡并且拥有抗干扰能力。用外力干扰他他也不会倒下,迅速的回归平衡状态。到此小车的基本功能也就实现了。如果小车虽然能平衡但效果不是那么好,我们可以细调,步进值小一点,要有耐心。
我们也可以通过一些波形显示的上位机去观看图形的情况,这样更有利于我们去调参!
转向环PID参数整定
PWM_out=Turn_Kdgyro_Z + Turn_KpRC;
在转向环中,我们其实只用整定一个Kd。
我们不加转向环时,小车在平衡中会慢慢的转向。而转向环的作用就是对他的转向进行一个约束。这里是对Z轴的角速度进行约束。我们小车向左转那我们就要有一个反方向的力去抑制转向。这里我们通过差速法。将直立环,速度环运算出来的PWM值,一个车轮+转向环输出值。而另一个车轮-输出值。形成差速。
1.判断参数(Kd)极性
KD预设为0.5,若我们用手拿着小车旋转,有一个抵抗的力说明极性正确。若帮助你旋转,助力那么极性错误,我们就需要将值改为-0.5.
2.调节Kd
我们将速度环的入口参数Target_Speed赋值例如10。小车就会在保持平衡的同时
向前或向后移动,我们观察他沿直线行驶的偏移情况,若偏移较大那么kd偏小,若近似位置,在50cm内没有较大偏移那么当前的值就合适。
3.调节Kp
这个kp我们通常是蓝牙控制它的值已达到转向的目的。当转向时KP=20,kd=0去掉转向约束。当不转向时我们kp=0,kd的值变为之前整定的值加上转向约束。这样我们的小车就会更加稳定的平衡在原地。
到此我们的PID调参就已经全部完毕,我们可以根据这些加一些更好玩的功能例如平衡车循迹其实就是对期望速度,转向时的PID值的操作,还有避障,跟随等都是对PID的某些参数做改变从而让小车做出相应的动作。
到此平衡小车系列就全部结束了,如果有问题的话可以再评论区讨论!谢谢!