承接上一篇(控制算法简析5——被控系统分析),也和《控制算法简析1——PID和负反馈的数学原理》有呼应关系。
介绍完系统建模和基本的系统分析后,我们已经了解了被控对象的特性,这时,就需要用一个合理的控制器,让这个被控对象在该控制器下按照指定的给定来执行,最为广泛使用的那就是PID控制器了。
在本教程中,我们将介绍一个简单而通用的反馈补偿结构,比例积分微分(PID)控制器,PID控制器之所以被广泛采用,是因为它非常容易理解并且非常有效,工程师不需要太理解控制论,只需要理解积分和微分就可以实施控制系统。此外,即使微分积分很简单,它也很复杂,因为它可以包含了系统的历史(积分),并可以预测系统的未来行为(微分)。我们将讨论每个PID参数对闭环系统动力学的影响,并将演示如何使用PID控制器来改善系统性能。
PID概述
在本教程中,我们将考虑以下统一的反馈系统:
上闭环图的传递函数为:
其中, C ( s ) C(s) C(s) 中PID控制器的输出等于被控对象的输入,它在时域中根据反馈误差计算如下:
首先,让我们使用上面显示的示意图了解PID控制器在闭环系统中的工作方式,变量 e e e 表示跟踪误差,即期望输出 r r r 与实际输出 y y y 之差。该误差信号 e e e 传给PID控制器,并且控制器计算该误差信号相对于时间的导数和积分,发送到被控对象的控制信号 u u u 即通过controller的PID计算得出。
通过对上式进行拉普拉斯变换,可以找到PID控制器的传递函数。
其中,
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)
PID的特征
增加比例增益 K p K_p Kp 具有在相同误差水平下按比例增加控制信号的效果,对于给定的误差级别,控制器将更"有力",会使闭环系统做出更快的反应,但也会导致超调,增加 K p K_p Kp 的另一个效果是它将稳态误差趋于减少,但不能消除误差。
在控制器中添加一个微分项 K d K_d Kd ,可以增加控制器对“未来”误差的判断能力,对于简单的比例控制,如果 K p K_p Kp 是固定的,要想增大控制输出,则必须增大误差,而利用微分项,即使误差的幅值很小,但如果误差的斜率是增大的,那么控制输出也会增大,这种方式往往会增加系统阻尼,从而减少超调。但是,增加导数项并不会对稳态误差产生影响。
在控制器中添加一个积分项 K i K_i Ki ,有助于降低稳态误差,如果存在持续的,稳定的误差,则积分器会不断累积,从而增加控制输出来降低误差。但是,积分项的一个缺点是,但误差的正负发生改变时,积分器可能需要一段时间才能“改变符号”,这会使系统更加缓慢和振荡。
下表总结了每个控制器参数:
参数 | 上升时间 | 超调 | 稳定时间 | 误差 |
---|---|---|---|---|
K p K_p Kp | 减小 | 增大 | 变化小 | 减小 |
K d K_d Kd | 减小 | 增大 | 增大 | 减小 |
K i K_i Ki | 变化小 | 减小 | 减小 | 减小 |
例子
假设我们有一个简单的质量块弹簧阻尼器系统,这个在前面建模部分有介绍过。
该系统的控制方程为:
对控制方程进行拉普拉斯变换,可以得到:
给定:
m = 1 kg
b = 10 N s/m
k = 20 N/m
F = 1 N
将这些值代入上述传递函数
此问题的目的是展示 K p K_p Kp、 K i K_i Ki、 K d K_d Kd 的调整,对以下被控系统指标的影响:
- 快速的上升时间
- 最小过冲
- 零稳态误差
开环响应
让我们首先查看开环阶跃响应:
s = tf('s');
P = 1/(s^2 + 10*s + 20);
step(P)
grid on;
开环响应图:
被控对象的传递函数的直流增益为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) 是输入:
让比例增益
K
p
K_p
Kp 等于300
Kp = 300;
C = pid(Kp)
T = feedback(C*P,1)
t = 0:0.01:2;
step(T,t)
grid on;
上图显示比例控制器减少了上升时间,稳定时间和稳态误差,但增加了过冲。
比例微分控制
现在,让我们看一下PD控制,从上表中可以看出,添加微分控制
K
d
K_d
Kd 可以减少过冲和稳定时间,具有PD控制器的给定系统的闭环传递函数为:
令
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)
grid on;
该图表明,微分项的增加减少了超调和稳定时间,并且对上升时间和稳态误差的影响可忽略不计。
比例积分控制
在进行PID控制之前,让我们研究一下PI控制,从表中可以看出,积分控制 K i K_i Ki 的增加有减少上升时间,增加超调和稳定时间,减小稳态误差的趋势。对于给定的系统,带有PI控制器的闭环传递函数:
让我们将
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控制器的给定系统的闭环传递函数为:
经过多次调整,比例增益
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)
grid on;
现在,我们设计了一种闭环系统,该系统没有超调,上升时间快且没有稳态误差。
设计PID控制器的一般流程
在为给定系统设计PID控制器时,请遵循以下所示的步骤来获得所需的响应
- 获得开环响应并确定需要改进的内容;
- 添加比例环节来改善上升时间;
- 添加微分环节来减少超调;
- 添加积分环节来减少稳态误差;
- 调整 K p K_p Kp、 K i K_i Ki、 K d K_d Kd,直到获得所需的效果。
最后,请记住,你可以不用再系统中都使用三个控制环节,例如,如果PI控制器可以满足所定的要求(如上述示例),则无需在系统上实现PID控制器,保持控制器尽可能的简单。