承接上一篇(控制教程 —— 介绍篇:2.系统分析)
介绍完系统建模和基本的系统分析后,我们已经了解了被控对象的特性,这时,就需要用一个合理的控制器,让这个被控对象在该控制器下按照指定的给定来执行,最为广泛使用的那就是PID控制器了。
在本教程中,我们将介绍一个简单而通用的反馈补偿结构,比例积分微分(PID)控制器,PID控制器之所以被广泛采用,是因为它非常容易理解并且非常有效,工程师不需要太理解控制论,只需要理解积分和微分就可以实施控制系统。此外,即使微分积分很简单,它也很复杂,因为它可以包含了系统的历史(积分),并可以预测系统的未来行为(微分)。我们将讨论每个PID参数对闭环系统动力学的影响,并将演示如何使用PID控制器来改善系统性能。
本教程中使用的主要MATLAB命令是:
PID概述
在本教程中,我们将考虑以下统一的反馈系统:
PID控制器的输出等于被控对象的输入,它在时域中根据反馈误差计算如下:
u
(
t
)
=
K
p
e
(
t
)
+
K
i
∫
e
(
t
)
d
t
+
K
d
d
e
d
t
u(t) = K_p e(t) + K_i \int e(t)dt + K_d \frac{de}{dt}
u(t)=Kpe(t)+Ki∫e(t)dt+Kddtde首先,让我们使用上面显示的示意图了解PID控制器在闭环系统中的工作方式,变量
e
e
e 表示跟踪误差,即期望输出
r
r
r 与实际输出
y
y
y 之差。该误差信号(
e
e
e)被送PID控制器,并且控制器计算该误差信号相对于时间的导数和积分,发送到被控对象的控制信号
u
u
u 等于比例增益
K
p
K_p
Kp 乘以误差幅度加积分增益
K
i
K_i
Ki 乘以误差积分加微分增益
K
d
K_d
Kd 乘以误差导数。
该控制信号(
u
u
u)被送到被控对象,并获得新的输出(
y
y
y),然后,将新的输出(
y
y
y)反馈并与参考进行比较计算新的误差信号(
e
e
e),控制器获取这个新的误差信号,并计算新的控制信号。
通过对上式进行拉普拉斯变换,可以找到PID控制器的传递函数。
K
p
+
K
i
s
+
K
d
s
=
K
d
s
2
+
K
p
s
+
K
i
s
K_p + \frac {K_i} {s} + K_d s = \frac{K_d s^2 + K_p s + K_i} {s}
Kp+sKi+Kds=sKds2+Kps+Ki其中,
K
p
K_p
Kp 是比例增益,
K
i
K_i
Ki 是积分增益,
K
d
K_d
Kd 是微分增益.
我们可以使用传递函数直接在MATLAB中定义PID控制器,例如:
Kp = 1;
Ki = 1;
Kd = 1;
s = tf('s');
C = Kp + Ki/s + Kd*s
或者,我们可以使用MATLAB的pid对象生成等效的连续时间控制器,如下表示:
C = pid(Kp,Ki,Kd)
让我们将pid对象转换为传递函数,可以看到产生的结果与上述相同:
tf(C)
P I D 的特征
增加比例增益(
K
p
K_p
Kp)具有在相同误差水平下按比例增加控制信号的效果,对于给定的误差级别,控制器将更"有力",会使闭环系统做出更快的反应,但也会导致超调,增加
K
p
K_p
Kp的另一个效果是它将稳态误差趋于减少,但不能消除误差。
在控制器中添加一个微分项(
K
d
K_d
Kd),可以增加控制器对“未来”误差的判断能力,对于简单的比例控制,如果
K
q
K_q
Kq 是固定的,要想增大控制输出,则必须增大误差,而利用微分项,即使误差的幅值很小,但如果误差的斜率是增大的,那么控制输出也会增大,这种方式往往会增加系统阻尼,从而减少超调。但是,增加导数项并不会对稳态误差产生影响。
在控制器中添加一个积分项(
K
i
K_i
Ki),有助于降低稳态误差,如果存在持续的,稳定的误差,则积分器会不断累积,从而增加控制输出来降低误差。但是,积分项的一个缺点是,但误差的正负发生改变时,积分器可能需要一段时间才能“改变符号”,这会使系统更加缓慢和振荡。
下表总结了每个控制器参数(
K
p
K_p
Kp,
K
d
K_d
Kd,
K
i
K_i
Ki)对闭环系统的一般影响。请注意,这些准则在许多情况下适用,但并非全部适用。如果你想知道调整各个增益的效果,则必须进行更多分析,或者必须在实际系统上进行测试。
参数 | 上升时间 | 超调 | 稳定时间 | 误差 |
---|---|---|---|---|
K p K_p Kp | 减小 | 增大 | 变化小 | 减小 |
K d K_d Kd | 减小 | 增大 | 增大 | 减小 |
K i K_i Ki | 变化小 | 减小 | 减小 | 减小 |
例子
假设我们有一个简单的质量块弹簧阻尼器系统,这个在前面建模部分有介绍过。
该系统的控制方程为:
m
x
¨
+
b
x
˙
+
k
x
=
F
m\ddot{x} + b\dot{x} + kx = F
mx¨+bx˙+kx=F对控制方程进行拉普拉斯变换,可以得到:
m
s
2
X
(
s
)
+
b
s
X
(
s
)
+
k
X
(
s
)
=
F
(
s
)
ms^{2}X(s) + bsX(s) + kX(s) = F(s)
ms2X(s)+bsX(s)+kX(s)=F(s)输入力
F
(
s
)
F(s)
F(s) 和输出位移
X
(
s
)
X(s)
X(s) 之间的传递函数变为:
X
(
s
)
F
(
s
)
=
1
m
s
2
+
b
s
+
k
\frac{X(s)}{F(s)} = \frac{1}{ms^2 + bs + k}
F(s)X(s)=ms2+bs+k1给定:
m = 1 kg
b = 10 N s/m
k = 20 N/m
F = 1 N
将这些值代入上述传递函数
X
(
s
)
F
(
s
)
=
1
s
2
+
10
s
+
20
\frac{X(s)}{F(s)} = \frac{1}{s^2 + 10s + 20}
F(s)X(s)=s2+10s+201此问题的目的是展示
K
p
K_p
Kp,
K
d
K_d
Kd,
K
i
K_i
Ki的调整来满足一下目标:
- 快速的上升时间
- 最小过冲
- 零稳态误差
开环阶跃响应
让我们首先查看开环阶跃响应:
s = tf('s');
P = 1/(s^2 + 10*s + 20);
step(P)
被控对象的传递函数的直流增益为1/20,因此0.05是单位阶跃输入的最终值,这相当于95%的稳态误差,这是非常大的。此外,上升时间约为1s,稳定时间约为1.5s,让我们设计一个控制器,该控制器将减少上升时间,减少稳定时间并消除稳态误差。
比例控制
从上表中可以看出,比例控制器(
K
p
K_p
Kp)减少了上升时间,增加了超调,但减少了稳态误差。
以下是带有比例控制器的单位反馈系统的闭环传递函数,其中
X
(
s
)
X(s)
X(s) 是我们的输出(等于
Y
(
s
)
Y(s)
Y(s)),而我们的参考
R
(
s
)
R(s)
R(s) 是输入:
T
(
s
)
=
X
(
s
)
R
(
s
)
=
K
p
s
2
+
10
s
+
(
20
+
K
p
)
T(s)=\frac{X(s)}{R(s)} = \frac{K_p}{s^2+10s+(20+K_p)}
T(s)=R(s)X(s)=s2+10s+(20+Kp)Kp让比例增益(
K
p
K_p
Kp)等于300。
Kp = 300;
C = pid(Kp)
T = feedback(C*P,1)
t = 0:0.01:2;
step(T,t)
上图显示比例控制器减少了上升时间,稳定时间和稳态误差,但增加了过冲。
比例微分控制
现在,让我们看一下PD控制,从上表中可以看出,添加微分控制(
K
d
K_d
Kd)可以减少过冲和稳定时间,具有PD控制器的给定系统的闭环传递函数为:
T
(
s
)
=
X
(
s
)
R
(
s
)
=
K
d
s
+
K
p
s
2
+
(
10
+
K
d
)
s
+
(
20
+
K
p
)
T(s) = \frac{X(s)}{R(s)} = \frac{K_d s + K_p}{s^2 + (10 + K_d) s + (20 + K_p)}
T(s)=R(s)X(s)=s2+(10+Kd)s+(20+Kp)Kds+Kp令
K
p
K_p
Kp 等于300,并让
K
d
K_d
Kd 等于10
Kp = 300;
Kd = 10;
C = pid(Kp,0,Kd)
T = feedback(C*P,1)
t = 0:0.01:2;
step(T,t)
该图表明,微分项的增加减少了超调和稳定时间,并且对上升时间和稳态误差的影响可忽略不计。
比例积分控制
在进行PID控制之前,让我们研究一下PI控制,从表中可以看出,积分控制(
K
i
K_i
Ki)的增加有减少上升时间,增加超调和稳定时间,减小稳态误差的趋势。对于给定的系统,带有PI控制器的闭环传递函数:
T
(
s
)
=
X
(
s
)
R
(
s
)
=
K
p
s
+
K
i
s
3
+
10
s
2
+
(
20
+
K
p
)
s
+
K
i
T(s) = \frac{X(s)}{R(s)} = \frac{K_p s + K_i}{s^3 + 10 s^2 + (20 + K_p )s + K_i}
T(s)=R(s)X(s)=s3+10s2+(20+Kp)s+KiKps+Ki让我们将
K
p
K_p
Kp 减少到30,并使
K
i
K_i
Ki 等于70
Kp = 30;
Ki = 70;
C = pid(Kp,Ki)
T = feedback(C*P,1)
t = 0:0.01:2;
step(T,t)
在MATLAB命令窗口中运行,即可生成上面的图,我们减小了比例增益(
K
p
K_p
Kp),因为积分控制器也像比例控制器那样减少上升时间和增加超调(双重作用),上面的响应表明,在这种情况下,积分控制器消除了稳态误差。
比例积分微分控制
现在,让我们研究一下PID控制,具有PID控制器的给定系统的闭环传递函数为:
T
(
s
)
=
X
(
s
)
R
(
s
)
=
K
d
s
2
+
K
p
s
+
K
i
s
3
+
(
10
+
K
d
)
s
2
+
(
20
+
K
p
)
s
+
K
i
T(s) = \frac{X(s)}{R(s)} = \frac{K_d s^2 + K_p s + K_i}{s^3 + (10 + K_d)s^2 + (20 + K_p)s + K_i }
T(s)=R(s)X(s)=s3+(10+Kd)s2+(20+Kp)s+KiKds2+Kps+Ki经过多次调整,比例增益
K
p
K_p
Kp = 350,
K
i
K_i
Ki = 300 和
K
d
K_d
Kd = 50
Kp = 350;
Ki = 300;
Kd = 50;
C = pid(Kp,Ki,Kd)
T = feedback(C*P,1);
t = 0:0.01:2;
step(T,t)
现在,我们设计了一种闭环系统,该系统没有超调,上升时间快且没有稳态误差
设计PID控制器的一般流程
在为给定系统设计PID控制器时,请遵循以下所示的步骤来获得所需的响应
- 获得开环响应并确定需要改进的内容
- 添加比例环节来改善上升时间
- 添加微分环节来减少超调
- 添加积分环节来减少稳态误差
- 调整 K p K_p Kp, K i K_i Ki, K d K_d Kd ,直到获得所需的效果。
最后,请记住,你可以不用再系统中都使用三个控制环节,例如,如果PI控制器可以满足所定的要求(如上述示例),则无需在系统上实现PID控制器,保持控制器尽可能的简单。
在以下链接上可以找到在实际物理系统上调整PI控制器的示例,该示例还说明实现控制的一些挑战:控制饱和,积分器饱和以及噪声放大。
自动PID参数整定
MATLAB提供了用于自动选择最佳PID增益的工具,从而无需进行上述反复试验。您可以直接使用pidtuner访问调优算法,也可以使用pidTuner通过美观的图形用户界面(GUI)访问调优算法
MATLAB自动整定算法选择PID增益来平衡性能(响应时间,带宽)和鲁棒性(稳定性裕度)。默认情况下,该算法设计为60度的相位裕度。
让我们探索这个自动化工具,方法是首先输入一下所示命令为质量块弹簧阻尼器系统生成比例控制器,在所示的语法中,P是之前生成的模型,"p"指控制器采用比例控制器。
pidTuner(P,'p')
将会显示pidTuner GUI窗口,如下所示:
注意,所示的阶跃响应比我们手动设计的比例控制器要慢,现在,单击右上方的Show Parameters按钮,正如预期的那样,比例增益
K
p
K_p
Kp 小于我们采用的比例增益
K
p
K_p
Kp = 94.86 < 300.
现在,我们可以调整控制器参数,并立即在GUI窗口中看到生成的响应。尝试将”Response Time slider“滑块向右拖动到0.14s,如下所示,这确实会加快响应,并且我们可以看到
K
p
K_p
Kp现在更接近于手动选择的值。我们还可以看到系统的其他性能和鲁棒性参数,请注意,在调整滑块之前,目标相位裕度为60度,这是pidTuner的默认设置,通常可以再鲁棒性和性能之间取得良好的平衡。
现在,让我们尝试为我们的系统设计PID控制器,通过将先前设计的控制器指定第二个参数”C“,pidTuner将设计另一个PID控制器(而不是P或PI),并将系统与自动控制器的响应与参考的响应进行比较
pidTuner(P,C)
我们在输出窗口中看到,自动控制器的响应较慢,并且比参考表现出更多的超调,现在,从工具栏中选择"Domain:Frequency"选项,该选项显示了频域调整参数。
现在输入32rad/s(带宽)和90deg(相位裕量),以生成性能与参考相似的控制器,请记住,较高的闭环带宽会导致更快的上升时间,而较大的相位裕量会减小超调并提高系统稳定性。
最后,我们注意到我们可以使用命令行工具pidtune代替使用pidTuner的GUI
opts = pidtuneOptions('CrossoverFrequency',32,'PhaseMargin',90);
[C, info] = pidtune(P, 'pid', opts)