提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
PID,就是比例(proportional)、积分(integral)、微分(derivative),是一种常见的控制算法,在工业上有着非常广泛的应用。小到控制某个元件的温度,大到控制汽车的无人驾驶,都能应用PID算法。总之,PID的作用是将一个让一个物理量“保持稳定”。
接下来,是对PID算法的简单介绍。
才疏学浅,仅供参考
一、PID的工作原理
对于一些简单的,并且要求不高的控制,例如向一个水池里面蓄入30m³的水,达到目标之后关掉水管就可以了;或者使用热得快将水烧到60℃,只要在小于60℃时进行加热,大于60℃进行断电就能达到目的。
但是,在一些复杂的控制过程中,如果只是利用开关来控制一个物理量,往往会显得简单粗暴,因为传感器、单片机等部件的工作不是无限快的,控制需要时间。例如控制一辆汽车让其行驶速度保持在50km/h,当巡航系统检测到当前速度为45km/h,立刻向发动机发动加速命令,发动机瞬间加速,使行驶速度达到60km/h,此时定速巡航系统马上又发布刹车指令,于是发动机紧急制动……
在这种复杂的控制系统中,就需要使用PID控制算法。
一个常规的PID控制系统的原理图如下:
由图可以看出
u
(
t
)
u(t)
u(t) 和
e
(
t
)
e(t)
e(t)之间的关系,即:
u
(
t
)
=
K
p
e
(
t
)
+
K
i
∫
0
t
e
(
τ
)
d
τ
+
K
d
d
e
(
t
)
d
t
u(t) = K_pe(t)+K_i\int_0^te(τ)dτ+K_d\frac{de(t)}{dt}
u(t)=Kpe(t)+Ki∫0te(τ)dτ+Kddtde(t)
从公式中可以看出,在一个闭环控制中,PID的利用反馈来检测偏差,经过比例、积分、微分的过程来控制被要求控制的变量。
二、控制策略
1.比例控制
比例控制是PID中最简单的部分,仍然使用向水池中蓄水的例子。假设最终控制目的是让水池中的水位保持在1米的高度,如果初始水位为0.2米,那么当前水位和目标水位之间存在着一个误差,即error,此时的error为0.8。利用比例控制的方法向水池中加水,就是指加入的水量与误差是成正比的,即
u
(
t
)
=
K
p
∗
e
r
r
o
r
(
t
)
u(t)=K_p*error(t)
u(t)=Kp∗error(t)
假设此时的比例控制系数
K
p
=
0.5
K_p=0.5
Kp=0.5,那么在
t
=
1
t=1
t=1,即第一次施加控制时,
u
=
0.5
∗
0.8
=
0.4
u=0.5*0.8=0.4
u=0.5∗0.8=0.4,这一次控制的水位变化量是0.4,此时的
e
r
r
o
r
error
error变为
0.8
−
0.4
=
0.4
0.8-0.4=0.4
0.8−0.4=0.4。
在
t
=
2
t=2
t=2时,
u
=
0.5
∗
0.4
=
0.2
u=0.5*0.4=0.2
u=0.5∗0.4=0.2,此时的
e
r
r
o
r
error
error变为
0.4
−
0.2
=
0.2
0.4-0.2=0.2
0.4−0.2=0.2。
如此循环下去,就是比例控制的运行方法。利用比例控制,水位最终可以达到我们的设定值。
2.积分控制
但是,仅仅使用比例控制会存在一些不足,最明显的一点就是稳态误差。
如果,在这个水池加水的过程中存在漏水的情况,每次加水都会漏掉0.1米高的水。假设此时的控制系数仍为
K
p
=
0.5
K_p=0.5
Kp=0.5,则会出现这样的状况:在某次加水过程结束后,当前水位为0.8,和目标值之间的误差
e
r
r
o
r
=
0.
,
2
error=0.,2
error=0.,2,则
u
=
0.5
∗
0.2
=
0.1
u=0.5*0.2=0.1
u=0.5∗0.2=0.1,每次加水量为0.1米高。在此时,加入0.1米高水量的同时会漏掉0.1米高的水量,水位稳定保持在0.8米处。
在这种情况下,水位目标是1米,但在0.8米处水位保持不变,且系统达到稳定状态。由此产生的误差就是稳态误差。在实际情况中,稳态误差的情况更加常见,比如控制汽车运动过程中的摩擦力,控制飞行器时产生的阻力,控制机械运动中产生的消耗等。
因此,单独的比例控制在很多时候无法满足要求,于是引入了另一个分量,该分量和误差的积分是正比关系,比例+积分控制为:
u
(
t
)
=
K
p
∗
e
r
r
o
r
(
t
)
+
K
i
∫
e
r
r
o
r
u(t)=K_p*error(t)+K_i\int error
u(t)=Kp∗error(t)+Ki∫error
在使用比例+积分的控制时,第一次误差为0.8,第二次误差为0.4,此时误差的积分为
∫
e
r
r
o
r
\int error
∫error为1.2,这个时候的控制量除了比例控制中的那部分,还有积分系数
K
i
K_i
Ki与积分项的乘积
K
i
∗
∫
e
r
r
o
r
K_i*\int error
Ki∗∫error。这个积分项会将前面若干次的误差进行累加,所以可以很好的消除稳态误差。
3.微分控制
假设,当水池的水位快要到达1米时,加入微分项可以防止水位超过1米。
考虑这样一个例子,一辆平稳行驶的汽车,当发现前方有红灯时,需要提前一段路程松开油门并踩下刹车;当车辆距离停车线非常近时,则用力踩刹车,让车辆迅速停下。整个过程可以看做加入微分的控制策略。
微分在离散情况下代表了两个时刻之间
e
r
r
o
r
error
error的差值,即
u
(
t
)
=
K
d
∗
(
e
r
r
o
r
(
t
)
−
e
r
r
o
r
(
t
−
1
)
)
u(t) = K_d *(error(t) - error(t-1))
u(t)=Kd∗(error(t)−error(t−1))
在刹车的过程中,
e
r
r
o
r
error
error的值是越来越小的,微分控制项一定是负数,它存在的作用就是避免汽车刹车不及闯过停车线。所以,距离控制目标越近,微分项越大。
总结
比例控制:快速到达指定目标
积分控制:累加过程,消除静态误差的干扰
微分控制:防止震荡,有效缓冲