文章目录
一、 PID的基本框图
PID 控制器以各种形式使用超过了 1 世纪,广泛应用在机械设备、气动设备 和电子设备.在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法
开环:输入量对输出量没有反馈作用;
闭环:输入量对输出量有反馈作用。
下面是一个闭环系统
二、 基本案例说明
目标值:回到家→即为距离家距离为0m
测量值:当前离家的距离,为10m
偏差:=目标值-测量值(0-10)m
比例:就是直接给偏差乘以一个比例系数
积分:就是在一段时间内偏差的累积
微分:偏差的变化率,反馈当前的变化速率的控制
三、 理论公式
教科书上面的公式
u
t
=
K
p
[
e
t
+
1
T
i
∫
0
t
e
t
d
t
+
T
d
d
e
t
d
t
]
(1)
u_t = K_p[e_t + \frac{1}{T_i}\int_0^te_tdt + \frac{T_dde_t}{dt}]\tag{1}
ut=Kp[et+Ti1∫0tetdt+dtTddet](1)
u
t
u_t
ut : 输出
K
P
K_P
KP : 比例系数
T
i
T_i
Ti : 积分时间常数
T
d
T_d
Td : 微分时间常数
e
t
e_t
et : 误差
d
t
dt
dt : 采样周期
d
e
t
de_t
det : 误差的变化斜率
∫
o
t
\int_o^t
∫ot : 误差的累计
因为 K p K_p Kp , T i T_i Ti , T d T_d Td是需调节的参数,整理一下得到以下方程!这样方便调节参数
u
t
=
K
p
e
t
+
K
i
∫
0
t
e
t
d
t
+
K
d
d
e
t
d
t
(2)
u_t= K_pe_t + K_i\int_0^te_tdt + Kd \frac{de_t}{dt}\tag{2}
ut=Kpet+Ki∫0tetdt+Kddtdet(2)
u
k
=
P
×
偏差
+
I
×
偏差
+
D
×
偏差
(3)
u_k = P \times 偏差 + I\times 偏差 + D\times 偏差\tag{3}
uk=P×偏差+I×偏差+D×偏差(3)
K
P
K_P
KP 比例系数
K
i
=
K
p
1
T
i
K_i = K_p \frac{1}{T_i}
Ki=KpTi1 积分系数
K
d
=
K
p
K
d
K_d = K_p K_d
Kd=KpKd 微分系数
四、 P(比例)、I(积分)、D(微分)的详细理解
4.1 比例项的理解(P)
传感器获取的数值为
x
1
,
x
2
,
x
3
⋯
x
t
x_1,x_2,x_3\dotsb x_t
x1,x2,x3⋯xt
设定值为
s
t
s_t
st
把采样值和用户设置值之间的差值设为
e
t
e_t
et,称之为误差。
e
t
=
s
t
−
x
t
e_t = s_t-x_t
et=st−xt
绿色线为上述例子中从初始位置到目标位置的距离变化; 红色线为上述例子中从初始位置到目标位置的偏差变化,两者为互补的关系;
- 分析
e
t
e_t
et可以得到一下三个信息
- e t > 0 e_t > 0 et>0 :说明当前状态值未达标
- e t = 0 e_t = 0 et=0 :说明当前控制状态值正好满足要求
- e t < 0 e_t < 0 et<0 :说明当前状态值已经超标
可以得出一个结论:
e
t
e_t
et反应了控制对象当前值与设定值的偏差程度,添加一个比例系数
k
p
k_p
kp ,可以根据
e
t
e_t
et 的大小对输出信号
P
o
u
t
Pout
Pout 进行调整,偏差程度大OUT增大,偏差程度小OUT减小。即输出信号的强弱与当前偏差程度的大小成比例,所以根据
e
t
e_t
et 的大小来给出控制信号
P
o
u
t
Pout
Pout 的当前值的算法称为比例控制(Proportion)。用数学模型可以表示为:
P
o
u
t
=
K
p
e
t
(4)
Pout = K_pe_t\tag{4}
Pout=Kpet(4)
4.2 积分项的理解(I)
过去一段时间的误差和设为 S t S_t St
S
t
=
e
1
+
e
2
+
e
3
+
⋯
+
e
t
S_t = e_1+e_2+e_3+\dotsb +e_t
St=e1+e2+e3+⋯+et
红色曲线阴影部分面积即为积分作用的结果,其不断累积的误差.
-
分析 S t S_t St:
- S t > 0 St>0 St>0:过去大多数时候未达标
- S t = 0 St=0 St=0:过去控制效果较理想
- S t < 0 St<0 St<0:过去大多数时候已经超标
-
可以得出两个结论:
-
S
t
S_t
St是对过去的控制效果进行评估,体现了控制算法按照原来的方式输出的控制信号导致了现在的控制结果,所以应该利用这个值来对当前要输出的控制信号OUT进行修正,以确保控制对象会在将来的一小段时间尽快达到用户设定的值。
-
S
t
S_t
St实际上是过去每个时间点的误差相加,与数学上的定积分运算类似,因此根据
S
t
S_t
St 对输出信号进行调节的算法称积分(integral)算法。添加一个比例系数
K
i
K_i
Ki,所以积分控制的数学模型为:
I o u t = K i S t \begin{align*} Iout = &K_iS_t \end{align*} Iout=KiSt
-
S
t
S_t
St是对过去的控制效果进行评估,体现了控制算法按照原来的方式输出的控制信号导致了现在的控制结果,所以应该利用这个值来对当前要输出的控制信号OUT进行修正,以确保控制对象会在将来的一小段时间尽快达到用户设定的值。
S t 的连续表达式为 ∫ 0 t e t d t S_t的连续表达式为 \int_0^te_tdt St的连续表达式为∫0tetdt, ( K i = K p 1 T i K_i = K_p\frac{1}{T_i} Ki=KpTi1) 转换一下公式得到:
I
o
u
t
=
K
p
1
T
i
∫
0
t
e
t
d
t
(5)
Iout = K_p\frac{1}{T_i}\int_0^te_tdt\tag{5}
Iout=KpTi1∫0tetdt(5)
这里解释下为什么会有
K
p
,
T
i
K_p,T_i
Kp,Ti为什么会在分母上面,
T
i
T_i
Ti 代表什么
- 为什么会有
K
p
K_p
Kp?
K p K_p Kp 的存在确保了对于每个部分都有适当的权重,而不仅仅侧重于比例项或其他项。这使得调节 K p K_p Kp可以直接影响整个系统的性能,
所以为什么这就是比例项为什么必须要的原因
-
为什么 T i T_i Ti会在分母上?
- T i T_i Ti为积分时间常数,他的取值范围是>1,不可能是[0,1],就比如说"前面 2.3次数据",没有这样的说法。
-
K
p
1
T
i
K_p\frac{1}{T_i}
KpTi1代表的是积分强度
- 越大:增大积分项的影响强度
- 越小:减小积分项的影响强度
- 直接使用
T
i
T_i
Ti作为积分增益可能导致增益过大,引发系统的稳定性问题。通过使用
1
T
i
\frac{1}{T_i}
Ti1形式,可以更灵活地调整增益的大小而避免潜在的过度响应或不稳定性。
- 将 T i T_i Ti 放在分母上是为了方便理解和调整 PID 控制器的参数,以实现更好的控制性能。这种选择在工程实践中更为常见,但在特定情况下,根据实际需求和设计者的偏好,也可以选择将 T i T_i Ti 放在分子上
-
T i T_i Ti 代表什么?
-
T i T_i Ti 代表控制积分时间常数,用于控制积分项的响应速度,影响着积分项对系统误差的累积速度。
-
通俗理解:就是你不可能把开机以来的误差都作为分析,这样没有意义,要选取一个时间段来分析。
4.3 微分项的理解(D)
误差的微分就是误差的变化速率,误差变化越快,其微分绝对值越大。误差增大时,其微分为正;误差减小时,其微分为负。控制器输出量的微分部分与误差的微分成正比,反映了被控量变化的趋势。
-
-
设两次连续的误差设为 D t D_t Dt
D t = e t − e t − 1 D_t = e_t - e_{t-1} Dt=et−et−1
从图中可知,当偏差变化过快,微分环节会输出较大的负数,作为抑制输出继续上升,从而抑制过冲。
-
分析 D t D_t Dt
- D t > 0 D_t>0 Dt>0:说明从上一采样时刻到当前误差有增大趋势
- D t = 0 D_t=0 Dt=0:说明从上一采样时刻到当前误差平稳
-
D
t
<
0
D_t<0
Dt<0:说明从上一采样时刻到当前误差有减小趋势
-
可以得出两个结论:
- D t D_t Dt 能够说明从上次采样到当前采样的这段时间被控制对象的状态变化趋势,这种变化的趋势很可能会在一定程度上延续到下一个采样时间点,所以可以根据这个变化趋势( D t D_t Dt 的值)对输出信号 D o u t Dout Dout 进行调整,达到提前控制的目的。
-
D
t
D_t
Dt 形如数学上的微分运算,反应了控制对象在一段时间内的变化趋势及变化量,所以利用Dt对控制器输出信号进行调节的算法称为微分(differential)算法。可以用数学模型表达为
D o u t = K d D t Dout = K_dD_t Dout=KdDt
D
t
D_t
Dt的连续表达式为
K
d
d
e
t
d
t
K_d\frac{de_t}{dt}
Kddtdet, (
K
d
=
K
p
T
d
K_d = K_pT_d
Kd=KpTd) 转换一下公式得到:
D
o
u
t
=
K
p
T
d
d
e
t
d
t
(6)
Dout = K_pT_d\frac{de_t}{dt}\tag{6}
Dout=KpTddtdet(6)
这里解释一下
T
d
,
K
p
T_d,K_p
Td,Kp
- 为什么会有
K
p
K_p
Kp?
和积分项为什么会有 K p K_p Kp是一样的。 -
T
d
T_d
Td 代表什么?
T d T_d Td 是一个微分项,用于控制微分项的响应速度。影响着微分项对系统误差变化率的响应,较小的 T d T_d Td 表示微分项对误差变化率的响应较快,系统对误差的变化更为敏感。较大的 T d T_d Td 表示微分项对误差变化率的响应较慢,系统对误差变化的敏感性相对减弱。
五、公式推导
PID的输出需要把比例、积分、微分的输出加起来。
P I D o u t = P o u t + I o u t + D o u t PIDout = Pout+Iout+Dout PIDout=Pout+Iout+Dout
- 把
P
I
D
o
u
t
PIDout
PIDout 设为
u
t
u_t
ut把
(
4
)
,
(
5
)
,
(
6
)
(4),(5),(6)
(4),(5),(6)代入得:
u t = K p ( e t + 1 T i ∫ 0 t e t d t + T d d e t d t ) u_t = K_p(e_t+ \frac{1}{T_i}\int_0^te_tdt + T_d\frac{de_t}{dt}) ut=Kp(et+Ti1∫0tetdt+Tddtdet)
回来看
(
2
)
,
(
3
)
(2),(3)
(2),(3)公式就能理解了。这里都是连续的表达式,我们要转成离散的表达式,离散的方式方便代码的实现。
- 公式
(
2
)
(2)
(2) 连续
⟶
\longrightarrow
⟶ 离散
u k = K p e k + K i ∑ k = 1 k e k Δ t + K d e k − e k − 1 Δ t u_k = K_pe_k+K_i\sum_{k = 1}^k{e_k}\Delta{t} + K_d\frac{e_k - e_{k-1}}{\Delta{t}} uk=Kpek+Kik=1∑kekΔt+KdΔtek−ek−1 - 如果我们的采样时间是固定的话,
K
i
Δ
t
,
K
d
1
Δ
t
K_i \Delta{t},K_d \frac{1}{\Delta{t}}
KiΔt,KdΔt1可以整合在一起,可以整合成以下公式
u k = P e k + I ∑ k = 1 k e k + D ( e k − e k − 1 ) u_k = Pe_k+I\sum_{k = 1}^k{e_k} + D(e_k - e_{k-1}) uk=Pek+Ik=1∑kek+D(ek−ek−1)
注意!我们后续都是基于这个公式作为分析
这个章节主要是讲PID的算法原理,下一章节讲PID的应用
文章是自己总结而记录,有些知识点没说明白的,请各位看官多多提意见,多多交流,欢迎大家留言
如果技术交流可以加以下群,方便沟通