最近由于需要,重温了PID控制算法,对里边的一些概念、原理进行了回顾。学习的过程中,基本也都是参考了各位博主的博客,在此记录,以防忘记。
1. PID控制原理
PID:Proportion(比例)- Integral(积分)- derivative(微分)控制器,是自动控制系统中最经典应用最为广泛的一种控制器,实际上是一种控制算法。PID算法是一种闭环控制算法,具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选定比较简单等优点。
u
(
t
)
=
K
p
e
(
t
)
+
K
i
∫
0
t
e
(
τ
)
d
τ
+
K
d
d
d
t
e
(
t
)
(1)
u(t) = K_pe(t) + K_i\int_0^te(\tau)d\tau + K_d\frac{d}{dt}e(t) \tag{1}
u(t)=Kpe(t)+Ki∫0te(τ)dτ+Kddtde(t)(1)
其中
- K p K_p Kp:比例增益
- K i K_i Ki:积分增益
- K d K_d Kd:微分增益
- T i T_i Ti:积分时间常数
- T d T_d Td:微分时间常数
- e e e:误差=设定值( S P SP SP)-当前值( P V PV PV)
- t t t:当前时间
通过调节三个单元的增益 K p K_p Kp、 K i K_i Ki、 K d K_d Kd来控制执行机构。
1.1 三种环节的作用
- 比例环节P针对的是当前误差,增大比例增益将加快系统响应,减少误差,但较大的比例增益会使系统产生振荡和超调,稳定性下降;同时,比例调节无法消除余差。
- 积分环节I针对的历史误差,可以在比例环节的基础上消除余差,能对稳定后有累计误差的系统进行误差修正,减小稳态误差;但是,积分环节的引入会使系统稳定性下降,动态响应变慢。
- 微分环节D针对未来误差,有一定的预见性,反应系统偏差信号的变化率,能预见偏差趋势,因此能产生超前的控制作用,可以减少超调,减少调节时间;但是,微分环节的引入对系统抗干扰不利。
1.2 PID调节实例
任务:无人机要悬停在10m的高度,假设
K
p
K_p
Kp = 0.5
1.
h
0
h_0
h0 = 2m,
Δ
h
\Delta h
Δh = 8m,
K
p
∗
Δ
h
K_p * \Delta h
Kp∗Δh = 4,
h
1
h_1
h1 = 6m
2.
h
1
h_1
h1 = 6m,
Δ
h
\Delta h
Δh = 4m,
K
p
∗
Δ
h
K_p * \Delta h
Kp∗Δh = 2,
h
2
h_2
h2 = 8m
此时,也不难看出,比例调节无法实现无差调节,如果
K
p
K_p
Kp设置过大,会发生超调;
3.如果,在实际过程中存在干扰,比如,无人机到达8m高度后,会有风向下吹,每次向下吹1m,此时
K
p
∗
Δ
h
K_p * \Delta h
Kp∗Δh为1m,正好可以抵消风带来的影响,无人机悬停在8m处;
若引入了积分调节,假设
K
i
K_i
Ki为0.1,总误差为:
Δ
:
8
+
4
+
2
=
14
\Delta:8+4+2 = 14
Δ:8+4+2=14依然可以上升1.4m;
4.此时,根据计算公式,无人机将超过10m,因此要引入微分项,由于误差较上一时刻减小,差值为负,通过和
K
p
K_p
Kp相乘,得到一个合适的负值,避免过冲。
2. 两种数字式PID控制算法
在实际计算机实现时,由于计算机控制是一种采样控制, 它只能根据采样时刻的偏差计算控制量,而不能像模拟控制那样连续输出控制量, 进行连续控制,所以实现的是离散形式的PID,即数字PID控制算法。
2.1位置式PID
位置式PID是当前系统的实际位置,与想达到的预期位置的偏差,进行PID控制。其中积分项,近似为下列公式:
∫
0
t
e
(
τ
)
d
τ
=
T
∑
j
=
0
k
e
j
\int_0^te(\tau)d\tau = T\sum_{j=0} ^ k e ^j
∫0te(τ)dτ=Tj=0∑kej
微分项近似成下列公式:
d
e
(
t
)
d
t
=
e
(
k
)
−
e
(
k
−
1
)
T
\frac{de(t)}{dt} = \frac{e(k) - e(k-1)}{T}
dtde(t)=Te(k)−e(k−1)
所以公式(1)化为:
u
k
=
K
p
e
k
+
T
K
i
∑
j
=
0
k
e
j
+
K
d
T
[
e
k
−
e
k
−
1
]
(2)
u_k = K_p{e_k +T K_i\sum_{j=0}^ke_j + \frac{K_d}{T}[e_k-e_k-_1]}\tag{2}
uk=Kpek+TKij=0∑kej+TKd[ek−ek−1](2)
当采样时间足够小时,能够获得最够精确的结果,离散控制过程与连续过程非常接近。
位置式PID在积分项达到饱和时,在积分环节的作用下,误差继续累加,一旦误差开始反向变化,系统需要一定时间从饱和区从饱和区退出,所以u(k)达到最大或者最小时,要停止积分环节作用,并且要有积分限幅和输出限幅。一般采用抗积分饱和算法,其思路是:如果上一次的输出控制量超过了饱和值,饱和值为正,则这一次只积分负的偏差,饱和值为负,这一次只积分正的偏差,从而避免系统长时间停留在饱和区。
2.2增量式PID
增量式PID是指数字控制器的输出是控制量的增量
Δ
u
k
\Delta u_k
Δuk,而不是实际位置,增量式PID可以由位置式PID推出。
增量式PID控制公式为:
Δ
u
k
=
u
k
−
u
k
−
1
\Delta u_k = u_k - u_k-_1
Δuk=uk−uk−1
Δ
u
k
=
K
p
(
e
k
−
e
k
−
1
)
+
T
k
i
e
k
+
K
d
e
k
−
2
e
k
−
1
+
e
k
−
2
T
\Delta u_k=K_p(e_k - e_k-_1) + Tk_ie_k + K_d\frac{e_k - 2e_k-_1 + e_k-_2}{T}
Δuk=Kp(ek−ek−1)+Tkiek+KdTek−2ek−1+ek−2
Δ
u
k
=
(
K
p
+
T
K
i
+
K
d
T
)
e
k
−
(
K
p
+
2
K
d
T
)
e
k
−
1
+
K
d
T
e
k
−
2
\Delta u_k = (K_p + TK_i + \frac{K_d}{T})e_k - (K_p + \frac{2K_d}{T})e_k-_1 + \frac{K_d}{T}e_k-_2
Δuk=(Kp+TKi+TKd)ek−(Kp+T2Kd)ek−1+TKdek−2
Δ
u
k
=
A
e
k
+
B
e
k
−
1
+
C
e
k
−
2
\Delta u_k = Ae_k + Be_k-_1 + Ce_k-_2
Δuk=Aek+Bek−1+Cek−2
其中,
A
=
K
p
+
T
K
i
+
K
d
T
A = K_p + TK_i + \frac{K_d}{T}
A=Kp+TKi+TKd
B
=
K
p
+
2
K
d
T
B = K_p + \frac{2K_d}{T}
B=Kp+T2Kd
C
=
K
d
T
C = \frac{K_d}{T}
C=TKd
增量式PID根据公式可以很好地看出,一旦确定了
K
p
、
K
i
、
K
d
K_p、K_i、K_d
Kp、Ki、Kd,只需要使用前后三次测量值偏差,即可求出控制增量。得出的控制增量没有误差累积。