PID控制算法学习笔记总结

发布于:2022-11-29 ⋅ 阅读:(1618) ⋅ 点赞:(1)

PID控制算法学习笔记总结

1、适用对象

PID适用于线性系统。

1.1线性系统需要满足叠加性和齐次性,所谓叠加性是指当几个输入信号共同作用于系统时,总的输出等于每个输入单独作用时产生的输出之和;均匀性是指当输入信号增大若干倍时,输出也相应增大同样的倍数。对于线性连续控制系统,可以用线性的微分方程来表示。不满足叠加性和均匀性的系统即为非线性系统。

1.2线性linear,指量与量之间按比例、成直线的关系,在数学上可以理解为一阶导数为常数的函数;非线性non-linear则指不按比例、不成直线的关系,一阶导数不为常数。

2、PID的公式解读

:PID控制器的输出信号

:偏差值,偏差值=给定值r(t)-测量值y(t)

:比例增益

:积分时间常数

:微分时间常数

:积分增益

::微分增益

2.1比例增益的意义

是指PID输出信号与偏差值的比值,此时不考虑引入积分和微分环节,单纯考虑比例环节而得出来的,注意,PID输出信号是一个增量的概念,即每次系统调节以求达到目标值时的一个调节量!

为了方便理解,引入下面一段话,注意这段话里面的分别对应哪个值

我们先说PID中最简单的比例控制,抛开其他两个不谈。还是用一个经典的例子吧。假设我有一个水缸,最终的控制目的是要保证水缸里的水位永远的维持在1米的高度。假设初始时刻,水缸里的水位是0.2米,那么当前时刻的水位和目标水位之间是存在一个误差的error,且error为0.8.这个时候,假设旁边站着一个人,这个人通过往缸里加水的方式来控制水位。如果单纯的用比例控制算法,就是指加入的水量u和误差error是成正比的。即 u=kp×error。

假设kp取0.5,那么t=1时(表示第1次加水,也就是第一次对系统施加控制),那么u=0.5×0.8=0.4,所以这一次加入的水量会使水位在0.2的基础上上升0.4,达到0.6。

接着,t=2时刻(第2次施加控制),当前水位是0.6,所以error是0.4。u=0.5×0.4=0.2,会使水位再次上升0.2,达到0.8。如此这么循环下去,就是比例控制算法的运行方法。可以看到,最终水位会达到我们需要的1米。

但是,单单的比例控制存在着一些不足,其中一点就是 –稳态误差!

像上述的例子,根据kp取值不同,系统最后都会达到1米,只不过kp大了到达的快,kp小了到达的慢一些。不会有稳态误差。但是,考虑另外一种情况,假设这个水缸在加水的过程中,存在漏水的情况,假设每次加水的过程,都会漏掉0.1米高度的水。仍然假设kp取0.5,那么会存在着某种情况,假设经过几次加水,水缸中的水位到0.8时,水位将不会再变换!!!因为,水位为0.8,则误差error=0.2. 所以每次往水缸中加水的量为u=0.5*0.2=0.1.同时,每次加水,缸里又会流出去0.1米的水!!!加入的水和流出的水相抵消,水位将不再变化!!也就是说,我的目标是1米,但是最后系统达到0.8米的水位就不再变化了,且系统已经达到稳定。由此产生的误差就是稳态误差了。(在实际情况中,这种类似水缸漏水的情况往往更加常见,比如控制汽车运动,摩擦阻力就相当于是“漏水”,控制机械臂、无人机的飞行,各类阻力和消耗都可以理解为本例中的“漏水”)

所以,单独的比例控制,在很多时候并不能满足要求。

稳态误差又称为静差,需要注意的是,静差本质上也是偏差,不过是系统稳定后的一个特殊的偏差值,这个值不再变化,已经“静止”了,故称为静差。

百度百科上有种说法摘抄如下:

成比例地反映控制系统的偏差信号,偏差一旦产生,立即产生控制作用以减小偏差。比例控制器的输出u(t)与输入偏差e(t)成正比,能迅速反映偏差,从而减小偏差,但不能消除静差。静差是指系统控制过程趋于稳定时,给定值与输出量的实测值之差。偏差存在,才能使控制器维持一定的控制量输出,因此比例控制器必然存在着静差。由偏差理论知,增大虽然可以减小偏差,但不能彻底消除偏差。比例控制作用的大小除与偏差e(t)有关之外,还取决于比例系数Kp的大小。比例系数Kp越小,控制作用越小,系统响应越慢;反之,比例系数Kp越大,控制作用也越强,则系统响应越快。但是,Kp过大会使系统产生较大的超调和振荡,导致系统的稳定性能变差。因此,不能将Kp选取过大,应根据被控对象的特性来折中选取Kp,使系统的静差控制在允许的范围内,同时又具有较快的响应速度。

问题:为什么比例控制器不能消除静差?

参考第一个加水的例子可知,系统的增量和系统的失量平衡时,系统就达到了稳态,即不再随时间改变,由于偏差一直存在,所以比例环节的调节也一直存在,只是调节的增量和系统的失量平衡了,之所以存在这种情况,是因为比例环节没有把时间因素纳入到对系统稳定性影响的考虑中。

问题:为什么Kp越大,控制作用越强?

Kp本质上是反应系统调节量大小的,Kp越大,就越大,系统注入的增量就越大,会把系统从当前的值快速提升至目标值附近,所谓快速就是系统相应快,几个调节周期下来就已经接近目标值,因为每次的增量给定的越大,所需的调节周期就越小。

问题:Kp过大会使系统产生较大的超调量和振荡,导致系统的稳定性变差,如何理解这句话?

首先,一般所指的超调是说的下图中曲线的第一个波峰(红色和黄色发生了超调),其定义式为:

超调量=

是第一个波峰的值,是系统的稳态值,即图中的设定值

以加水的例子来说,考虑漏水,如果把Kp取为0.8,那么第一次加水就是0.8*0.8=0.64;此时水位为0.2+0.64-0.1=0.74,error为1-0.74=0.26,第二次加水为0.8*0.26=0.208,此时水位为0.208+0.74-0.1=0.848,error为1-0.848=0.152;第三次加水为0.8*0.152=0.1216;此时水位为0.848+0.1216-0.1=0.8696;

把Kp取为1,第一次加水:1*0.8=0.8;此时水位:0.8+0.2-0.1=0.9;error为1-0.9=0.1,第二次加水:1*0.1=0.1,此时水位为0.9+0.1-0.1=0.9;产生稳态误差……

把Kp取为1.1,第一次加水:1.1*0.8=0.88;此时水位:0.88+0.2-0.1=0.96;error为1-0.96=0.04;第二次加水:1.1*0.04=0.044;此时水位:0.96+0.044-0.1=0.904;error为1-0.904=0.096,第三次加水:1.1*0.096=0.1056;此时水位:0.904+0.1056-0.1=0.9096;error为1-0.9096=0.0904;第四次加水:1.1*0.0904=0.09944;此时水位:0.9096+0.09944-0.1=0.90904……系统开始发生振荡(0.96-0.904-0.9096-0.90904)

把Kp取为1.2,第一次加水:1.2*0.8=0.96,此时水位:0.96+0.2-0.1=1.06;发生超调,超调量为0.06,error为1-1.06=-0.06;第二次加水:1.2*(-0.06)=-0.072,即需要往外抽水0.072,此时水位:1.06-0.072-0.1=0.888;error为1-0.888=0.112;第三次加水:1.2*0.112=0.1344;此时的水位:0.888+0.1344-0.1=0.9224;error为1-0.9224=0.0776;第四次加水:1.2*0.0776=0.09312;此时的水位:0.9224+0.09312-0.1=0.91522.已经发生振荡(1.06-0.888-0.9224-0.91522)

把Kp取的更大时,系统会产生更大的超调量,没必要再往上取了。

以上的例子可以看出,Kp大时,系统能快速接近目标值,但是可能发生振荡,因为调节量的波动大。

2.2积分增益的意义

百度百科的解释如下,

积分环节的作用,主要用于消除静差提高系统的无差度。积分作用的强弱,取决于积分时间常数Ti,Ti越大积分作用越弱,反之则越强。积分控制作用的存在与偏差e(t)的存在时间有关,只要系统存在着偏差,积分环节就会不断起作用,对输入偏差进行积分,使控制器的输出及执行器的开度不断变化,产生控制作用以减小偏差。在积分时间足够的情况下,可以完全消除静差,这时积分控制作用将维持不变。Ti越小,积分速度越快,积分作用越强。积分作用太强会使系统超调加大,甚至使系统出现振荡。

CSDN上的解释,结合加水的例子理解

积分控制算法,就是为了消除稳态误差(在理解上可以参考积分的几何意义),由于积分是从0时刻一直积分到当前时刻 t,并且是对e(t)函数进行积分。

在只有P(比例)环节的时候,在上面我们可以看到,在理想状态下也是可以满足控制需求,但是在真实场景中无法达到。所以**引入I(积分)来消除静态误差。**在到达节点位置之前,e(t)始终是正的,也就是它的积分始终是大于0的,如果系统存在稳态误差的话,由于误差一直不变,但是积分变呀,积分会一直积下去,之前的稳态误差是中和了比例控制算法的值,现在有一个一直增长的积分,导致每次u(t)的输出也在一直的增大,从而稳态误差就被消除了。到最后,误差为零了,而此时的e(t)也为0了,积分也就固定在某一个值了。从而每次的稳态误差就都可以被消除掉。

如果到达节点位置之后了,也就是冲过了节点的指定位置,这时候误差就变为了负的,然后由于积分正负可以相减,同样可以很好的适应这种情况。

2.3微分增益的意义

CSDN上的解释如下,结合加水的例子理解

用了积分控制算法,现在可以消除稳定误差了,但是考虑下面几种情况:

1.现在的情况是不存在稳态误差,但是存在积分控制算法,那么问题就出现了,当到达了目的位置后,哪怕误差已经是0了,但是积分控制算法那里还是一个整数,导致下一次输出u(t)仍然为一个整数,而不是0,这样的话,就会越过目的位置,虽然之后误差就变成了负数,又会回落回目的位置,但是这样始终是震荡的,而不是一直稳定下去。

2.在初始状态下,如果Kp或者Ki设置的过大,则会导致u(t)的变化幅度过大。

综上,在上述情况下,加入微分控制就很有必要,其实微分控制的作用就是防止幅度过大(防止超调),导致震荡或者超调,微分就是为了在输出斜率变的太大之前,在系统中引入一个有效的早期修正信号。微分可以防止震荡,比如当控制无人机悬停到一定高度,kd的作用就是如何让他停稳。

当存在稳态误差的时候,由于微分对于常数的求导是0,故微分不能解决稳态误差的问题。单独使用意义不大,故需要与比例积分共同配合使用,构成PD或PID控制。

从时间的角度讲,比例作用是针对系统当前误差进行控制,积分作用则针对系统误差的历史,而微分作用则反映了系统误差的变化趋势,这三者的组合是“过去、现在、未来”的完美结合。同样这三个参数也不可以设置的过大,我们要找到一个平衡点(调参)。

本文含有隐藏内容,请 开通VIP 后查看