PID控制器
小场景
经过了一天辛苦的学习,你终于回到了宿舍, 准备去洗个热水澡, 一开始是凉水,于是你开始逐步右旋,又感觉太慢了,于是转的幅度更大,忽然又感觉到烫,赶忙在回调, 往复几次, 达到自己想要的温度, 开始舒舒服服地洗澡。这个问题抽象一下,就是开始假设x℃的水温, 要调节到y℃。你有以下几种调节温度的行为:
1.每隔1秒3℃步进调节,或者逐步减小调节 (比例系数, 当前误差);
2.逐步加大调节(积分增益, 过去误差的积累);
3.温度过热, 回调 (微分增益, 误差变化趋势)。
PID控制器
模拟PID的公式
U
(
t
)
=
k
p
(
e
(
t
)
+
1
T
I
∫
e
(
t
)
d
t
+
T
D
de
(
t
)
d
t
)
\mathrm{U}(t)=k p\left(\operatorname{e}(t)+\frac{1}{T_{I}} \int \operatorname{e}(t) d t+\frac{T_{D} \operatorname{de}(t)}{d t}\right)
U(t)=kp(e(t)+TI1∫e(t)dt+dtTDde(t))
U
(
t
)
⟶
\mathrm{U}(\mathrm{t})\longrightarrow
U(t)⟶ 调节(控制)器的输出信号
e
(
t
)
⟶
\mathrm{e}(t) \longrightarrow
e(t)⟶ 调节器的偏差信号, 它等于测量值与给定值的差 (e=error误差)
K
p
⟶
K p \longrightarrow
Kp⟶ 调节器的比例系数;
T
I
⟶
T_{I} \longrightarrow
TI⟶ 调节器的积分时间
T
D
⟶
T_{D} \longrightarrow
TD⟶ 调节器的微分时间
首先没有比例时间这个说法。因为Kp*e里面误差信号e的单位和被控量是一样的。比例系数的单位是1
对模拟公式进行离散化处理
离散化:把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。
∫
0
n
e
(
t
)
d
t
=
∑
j
=
0
n
E
(
j
)
Δ
t
=
T
∑
j
=
0
n
E
(
j
)
d
e
(
t
)
d
t
≈
E
(
k
)
−
E
(
k
−
1
)
Δ
t
=
E
(
k
)
−
E
(
k
−
1
)
T
\int_{0}^{n} e(t) d t=\sum_{j=0}^{n} E(j) \Delta t=T \sum_{j=0}^{n} E(j)\\ \frac{d e(t)}{d t} \approx \frac{E(k)-E(k-1)}{\Delta t}=\frac{E(k)-E(k-1)}{T}
∫0ne(t)dt=j=0∑nE(j)Δt=Tj=0∑nE(j)dtde(t)≈ΔtE(k)−E(k−1)=TE(k)−E(k−1)
用人话来说就是:你不可能一直知道系统的参数,只能是离散的采样
PID的位置离散表达式
P ( k ) = K p { E ( k ) + T T D ∑ j = 0 k E ( j ) + T D T [ E ( k ) − E ( k − 1 ) ] } \large P(k)=K_{p}\left\{E(k)+\frac{T}{T_{D}} \sum\limits_{j=0}^{k} E(j)+\frac{T_{D}}{T}[E(k)-E(k-1)]\right\} P(k)=Kp{E(k)+TDTj=0∑kE(j)+TTD[E(k)−E(k−1)]}
Δ
t
=
T
⟶
\Delta t=T \longrightarrow
Δt=T⟶ 采样周期, 必须使
T
T
T 足够小, 才能保证系统有一定的精度;
E
(
k
)
⟶
E(k) \longrightarrow
E(k)⟶ 第k次采样时候的偏差值
k
⟶
采样序号
k \longrightarrow \text { 采样序号 }
k⟶ 采样序号
E
(
k
−
1
)
⟶
E(k-1) \longrightarrow
E(k−1)⟶ 第
(
k
−
1
)
(\mathrm{k}-1)
(k−1) 次采样时的偏差值
P
(
k
)
⟶
P(k) \longrightarrow
P(k)⟶ 第k次采样时候调节器的输出
位置式PID的计算不仅需要本次和上一次的偏差信号,而且还要在积分项把历次的偏差信号进行相加。这样,不仅计算繁琐,而且为保存E(j)还需要占用很多内存,因此位置式PID的控制用的很少,采用增量式PID来控制系统。
增量式PID
根据位置式PID的递推原理,可以写出(k-1)次的PID输出表达式:
P
(
k
−
1
)
=
K
p
{
E
(
k
−
1
)
+
T
T
D
∑
j
=
0
k
−
1
E
(
j
)
+
T
D
T
[
E
(
k
−
1
)
−
E
(
k
−
2
)
]
}
\large P(k-1)=K_{p}\left\{E(k-1)+\frac{T}{T_{D}} \sum_{j=0}^{k-1} E(j)+\frac{T_{D}}{T}[E(k-1)-E(k-2)]\right\}
P(k−1)=Kp{E(k−1)+TDT∑j=0k−1E(j)+TTD[E(k−1)−E(k−2)]}
P ( k ) = K p { E ( k ) + T T D ∑ j = 0 k E ( j ) + T D T [ E ( k ) − E ( k − 1 ) ] } \large P(k)=K_{p}\left\{E(k)+\frac{T}{T_{D}} \sum_{j=0}^{k} E(j)+\frac{T_{D}}{T}[E(k)-E(k-1)]\right\} P(k)=Kp{E(k)+TDT∑j=0kE(j)+TTD[E(k)−E(k−1)]}
用P(k)-P(k-1)得到
P
(
k
)
=
P
(
k
−
1
)
+
K
p
[
E
(
k
)
−
E
(
k
−
1
)
]
+
K
l
E
(
k
)
+
K
D
[
E
(
k
)
−
2
E
(
k
−
1
)
+
E
(
k
−
2
)
]
\large P(k)=P(k-1)+K_{p}[E(k)-E(k-1)]+K_{l} E(k)+K_{D}[E(k)-2 E(k-1)+E(k-2)]
P(k)=P(k−1)+Kp[E(k)−E(k−1)]+KlE(k)+KD[E(k)−2E(k−1)+E(k−2)]
式子中: K I = K P T T I K D = K P T D T \quad K_{I}=K_{P} \frac{T}{T_{I}} \quad K_{D}=K_{P} \frac{T_{D}}{T} KI=KPTITKD=KPTTD
PID参数的基本影响
稳定性:在平衡状态下,系统受到某个干扰后,经过一段时间其被控量可以达到某一稳定状态(能稳住)PI- D+
准确性:系统稳定时,与目标值的偏差(残差)小。PI+
快速性:加入扰动后,重新进入稳态的时间短。PD+ I-
P控制对系统性能的影响:
开环增益越大,稳态误差减小(无法消除,属于有差调节)
过渡时间缩短,稳定程度变差,偏差一旦产生,立刻控制
I控制对系统性能的影响:
消除系统稳态误差(能够消除静态误差,属于无差调节),稳定程度变差,T1越大积分作用越强
D控制对系统性能的影响:
减小超调量
减小调节时间(与P控制相比较而言)(反映偏差信号的变化趋势,能够在偏差信号变得过大之前加入调节信号以此缩短时间)增强系统稳定性
PID简化控制系统的设计,不需要考虑中间的系统结构
PD提高稳定性改善瞬态
PI改善稳态误差
PID参数的调节方法
滚球式控制系统调试
只加P,令D、I值为0。不断尝试不同的P值,直到球可以以目标点为中心等幅振荡。
保持上一步调好的P值不变,不断尝试不同的D值,直到球在目标点附近小幅度抖动。
保持上一步调好的P、D值不变,直到小球可以进入目标点并基本静止(消除静态误差)。
DI=0,调节P使目标出现等幅振荡
保留P值,加入D,使目标出现小幅振荡
保留PD,加入I,消除静态误差。
PID算法的程序结构
定时中断中进行PID计算
高速单片机执行PID算法耗时可以忽略,故PID定时中断优先级略低于目标值采集的相关中断。
根据控制对象来确定定时时间,如电机等,一般为10-30ms,电源中的MOS管可采用10-20ms,但无论如何,PID定时时间>=目标值采集时间
对于目标采集值,由于有采集顺序存在,可采用双缓冲来进行存储。
PID参数最好采用宏定义或源程序代码起始处进行赋值,不要直接在程序代码中赋值,便于修改和明确。
MATLAB仿真
Simulink中
transfer function带初始状态
Constant参考值
Sum 表示比较器
Pid有封装好的模块,可以调节三个增益
Band-limit白噪音
Scope看图,
view,layout可以分成两个图
P无法消除稳态误差
Mux可以连接多个图,
I超调量更多,稳定时间更长,
pid超调小,调节快,但是初始输入状态变化非常大,同时微分对高频噪音特别敏感,0.001sin1000t
问题(下面的仿真上面是误差,下面是输入)
f
(
s
)
=
x
(
s
)
u
(
s
)
)
=
1
s
2
+
0.8
s
+
1
\large f(s)=\frac{x_{(s)}}{\left.u_{(s)}\right)}=\frac{1}{s^{2}+0.8s+1}
f(s)=u(s))x(s)=s2+0.8s+11
初
始
条
件
x
(
0
)
=
x
˙
(
0
)
=
0
目
标
参
考
r
=
10
初始条件 x_{(0)}=\dot x_{(0)}=0\\ 目标参考r=10
初始条件x(0)=x˙(0)=0目标参考r=10
PID之前的是误差
首先是只有P=10作用下的图形
View选项的layout可以分离图形
可以看到误差无法到0
如果P的系数为10,I的系数为5,D的系数为0
可以看到波形最终误差更小,但是到达稳态的时间延长了许多
比例存在稳态误差
积分不存在,但稳定时间更长,且超调量大
再来考虑P=10,I=5,D=3的情况下
单独看波形其实很好,再来看看对比
微分误差很小,超调很小,调节很快
但是最初的输出相当大,在实际运用中,电气设备的电压电流容量,有可能不支持,另外它对于白噪音的反应相当敏感,现在我们对整个系统加入一个扰动,快速高频变化但很小的量,模拟大自然中的噪声
对于误差调节的部分变化不大,但是输入调节的部分出现了最多3100的信号
对0.001sin1000t求导,频率越高扩大程度越大