PID控制器设计

PID控制器设计

  • PID概述
  • P、I 和 D 项的特征
  • 示例问题
  • 开环阶跃响应
  • 比例控制
  • 比例微分控制
  • 比例积分控制
  • 比例积分微分控制
  • 设计 PID 控制器的一般技巧
  • 自动PID整定

介绍一种简单但通用的反馈补偿器结构:比例-积分-微分 (PID) 控制器。PID 控制器被广泛采用,因为它非常易于理解并且非常有效。PID 控制器的一大吸引力在于,所有工程师都理解概念上的微分和积分,因此即使没有深入了解控制理论,他们也可以实施控制系统。此外,尽管补偿器很简单,但它非常复杂,因为它捕获系统的历史(通过集成)并预测系统的未来行为(通过微分)。

PID概述

我们将考虑以下统一反馈系统:
PID控制器设计_第1张图片
PID 控制器的输出(等于设备的控制输入)在时域中根据反馈误差计算如下:
u ( t ) = K p e ( t ) + K i ∫ e ( t ) d t + K p d e d t − − − − − − − − − − − − ( 1 ) u(t) = K_p e(t) + K_i \int e(t)dt + K_p \frac{de}{dt} ------------(1) u(t)=Kpe(t)+Kie(t)dt+Kpdtde1

首先,让我们使用上图所示的原理图来看看 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 控制器的传递函数是通过对等式 (1) 进行拉普拉斯变换来找到的。
K p + K i s + K d s = K d s 2 + K p s + K i s − − − − − − − − − − − − ( 2 ) K_p + \frac {K_i} {s} + K_d s = \frac{K_d s^2 + K_p s + K_i} {s} ------------(2) Kp+sKi+Kds=sKds2+Kps+Ki2
其中 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

PID控制器设计_第2张图片
或者,我们可以使用 MATLAB 的pid 对象来生成等效的连续时间控制器,如下所示:

C = pid(Kp,Ki,Kd)

PID控制器设计_第3张图片
让我们将 pid 对象转换为传递函数以验证它是否产生与上述相同的结果:

tf(C)

PID控制器设计_第4张图片

P、I 和 D 项的特征

增加比例增益 ( 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) 对闭环系统的一般影响。请注意,这些准则适用于许多情况,但不是全部。如果您真的想知道调整单个增益的效果,则必须进行更多分析,或者必须对实际系统进行测试。
PID控制器设计_第5张图片

示例问题

假设我们有一个简单的质量弹簧阻尼器系统。
PID控制器设计_第6张图片
该系统的控制方程为
m x ¨ + b x ˙ + k x = F − − − − − − − − − − − − − − − − − − − ( 3 ) m\ddot{x} + b\dot{x} + kx = F-------------------(3) mx¨+bx˙+kx=F(3)
对控制方程进行拉普拉斯变换,我们得到
m s 2 X ( s ) + b s X ( s ) + k X ( s ) = F ( s ) − − − − − − − − − − − − ( 4 ) ms^{2}X(s) + bsX(s) + kX(s) = F(s) ------------(4) ms2X(s)+bsX(s)+kX(s)=F(s)(4)
输入力 F ( s ) F(s) F(s)和输出位移之间的传递函数 X ( s ) X(s) X(s)变为
X ( s ) F ( s ) = 1 m s 2 + b s + k − − − − − − − − − − − − − − − − − − ( 5 ) \frac{X(s)}{F(s)} = \frac{1}{ms^2 + bs + k} ------------------(5) F(s)X(s)=ms2+bs+k1(5)

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 − − − − − − − − − − − − − − − − − − ( 6 ) \frac{X(s)}{F(s)} = \frac{1}{s^2 + 10s + 20} ------------------(6) F(s)X(s)=s2+10s+201(6)

这个问题的目标是展示每个项$K_p$, $K_i$, 和$K_d$, 如何有助于获得以下共同目标:

快速上升时间
最小的过冲
零稳态误差

开环阶跃响应

先来看看开环阶跃响应。创建一个新的m 文件并运行以下代码:

s = tf('s');
P = 1/(s^2 + 10*s + 20);
step(P)

PID控制器设计_第7张图片
对象传递函数的直流增益为 1/20,因此 0.05 是单位阶跃输入的输出最终值。这对应于 0.95 的稳态误差,这是相当大的。此外,上升时间约为 1 秒,稳定时间约为 1.5 秒。让我们设计一个控制器来减少上升时间、减少稳定时间并消除稳态误差。

比例控制

从上表中,我们看到比例控制器( 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 ) − − − − − − − − − − − − ( 7 ) T(s) = \frac{X(s)}{R(s)} = \frac{K_p}{s^2 + 10s + (20 + K_p)} ------------(7) T(s)=R(s)X(s)=s2+10s+(20+Kp)Kp(7)

让比例增益 ( K p K_p Kp) 等于 300 并将 m 文件更改为以下内容:

Kp = 300;
C = pid(Kp)
T = feedback(C*P,1)

t = 0:0.01:2;
step(T,t)

PID控制器设计_第8张图片
PID控制器设计_第9张图片
上图显示比例控制器减少了上升时间和稳态误差,增加了超调,并少量减少了稳定时间。

比例微分控制

来看看 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 ) − − − − − − − − − − − − − ( 8 ) T(s) = \frac{X(s)}{R(s)} = \frac{K_d s + K_p}{s^2 + (10 + K_d) s + (20 + K_p)} -------------(8) T(s)=R(s)X(s)=s2+(10+Kd)s+(20+Kp)Kds+Kp(8)
K p K_p Kp等于 300 和以前一样 K d K_d Kd等于 10。将以下命令输入到 m 文件中,并在 MATLAB 命令窗口中运行它。

Kp = 300;
Kd = 10;
C = pid(Kp,0,Kd)
T = feedback(C*P,1)

t = 0:0.01:2;
step(T,t)

PID控制器设计_第10张图片
PID控制器设计_第11张图片
该图表明,微分项的添加减少了过冲和稳定时间,对上升时间和稳态误差的影响可以忽略不计。

比例积分控制

在进行 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 − − − − − − − − − − − − − ( 9 ) T(s) = \frac{X(s)}{R(s)} = \frac{K_p s + K_i}{s^3 + 10 s^2 + (20 + K_p )s + K_i} -------------(9) T(s)=R(s)X(s)=s3+10s2+(20+Kp)s+KiKps+Ki(9)
让我们减少 K p K_p Kp到 30,让 K i K_i Ki等于 70。创建一个新的 m 文件并输入以下命令。

Kp = 30;
Ki = 70;
C = pid(Kp,Ki)
T = feedback(C*P,1)

t = 0:0.01:2;
step(T,t)

PID控制器设计_第12张图片
PID控制器设计_第13张图片
在 MATLAB 命令窗口中运行这个 m 文件,你应该生成上面的图。我们降低了比例增益 ( 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 − − − − − − − − − − − − ( 10 ) 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 } ------------(10) T(s)=R(s)X(s)=s3+(10+Kd)s2+(20+Kp)s+KiKds2+Kps+Ki(10)
经过多次迭代调整后,增益 K p K_p Kp= 350、 K i K_i Ki= 300 和 K d K_d Kd= 50 提供了所需的响应。要确认,请在 m 文件中输入以下命令并在命令窗口中运行它。您应该获得以下阶跃响应。

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控制器设计_第14张图片
PID控制器设计_第15张图片
现在,我们设计了一个无过冲、快速上升时间和无稳态误差的闭环系统。

设计 PID 控制器的一般技巧

当您为给定系统设计 PID 控制器时,请按照下面显示的步骤获得所需的响应。

  1. 获得开环响应并确定需要改进的地方
  2. 添加比例控制以改善上升时间
  3. 添加微分控制以减少过冲
  4. 添加积分控制以减少稳态误差
  5. 调整每个增益 K p K_p Kp K i K_i Ki和 , K d K_d Kd直到获得所需的整体响应。您可以随时参考此“PID
    教程”页面中显示的表格,以找出哪个控制器控制哪些特性。

最后,请记住,如果没有必要,您不需要将所有三个控制器(比例、微分和积分)都实现到一个系统中。例如,如果 PI 控制器满足给定要求(如上面的示例),那么您不需要在系统上实现派生控制器。使控制器尽可能简单。

自动PID整定

MATLAB 提供了用于自动选择最佳 PID 增益的工具,这使得上述试错过程变得不必要。则可以直接使用访问调谐算法pidtune或通过使用一个漂亮的图形用户界面(GUI)pidTuner。

MATLAB 自动调整算法选择 PID 增益来平衡性能(响应时间、带宽)和稳健性(稳定性裕度)。默认情况下,算法设计为 60 度相位裕度。

让我们首先通过输入如下所示的命令为质量弹簧阻尼器系统生成比例控制器来探索这些自动化工具。在所示语法中,P是先前生成的对象模型,“p”指定调谐器采用比例控制器。

  pidTuner(P,'p')

所述pidTuner GUI窗口,像如下所示,应该出现。
PID控制器设计_第16张图片
请注意,显示的阶跃响应比我们手工设计的比例控制器慢。现在单击右上角的“显示参数”按钮。正如预期的那样,比例增益 K p K_p Kp小于我们采用的比例增益 K p K_p Kp= 94.86 < 300。

我们现在可以交互式地调整控制器参数,并立即在 GUI 窗口中看到结果响应。尝试将响应时间滑块向右拖动到 0.14 秒,如下图所示。这导致响应确实加快了,我们 K p K_p Kp现在可以看到 更接近于手动选择的值。我们还可以看到系统的其他性能和稳健性参数。请注意,在我们调整滑块之前,目标相位裕度为 60 度。这是 pidTuner 的默认设置,通常在健壮性和性能之间提供良好的平衡。
PID控制器设计_第17张图片
现在让我们尝试为我们的系统设计一个 PID 控制器。通过指定先前设计的或(基线)控制器 C 作为第二个参数,pidTuner 将设计另一个 PID 控制器(而不是 P 或 PI),并将系统与自动控制器的响应与基线的响应进行比较。

  pidTuner(P,C)

我们在输出窗口中看到,自动控制器的响应速度较慢,并且比基线表现出更多的过冲。现在从工具条中选择域:频率选项,它显示频域调谐参数。
PID控制器设计_第18张图片
现在,在输入32弧度/秒为带宽和90度为相位裕量,以产生在性能与基线类似的控制器。请记住,更高的闭环带宽会导致更快的上升时间,更大的相位裕度会减少过冲并提高系统稳定性。

最后,我们注意到我们可以使用命令行工具pidtune而不是pidTuner GUI 使用以下语法生成相同的控制器。

opts = pidtuneOptions( 'CrossoverFrequency' ,32, 'PhaseMargin' ,90); 
[C, info] = pidtune(P, 'pid' , opts)

PID控制器设计_第19张图片
PID控制器设计_第20张图片

MATLAB 和 Simulink (CTMS) 控制教程

你可能感兴趣的:(控制算法,算法)