控制教程 —— 巡航控制篇:2.PID控制器设计

目录

    • 系统模型及参数
    • 控制性能目标
    • PID概述
    • 比例控制
    • PI 控制器
    • PID 控制器

系统模型及参数

前面教程已经得出了定速巡航系统的传递函数模型:
P ( s ) = V ( s ) U ( s ) = 1 m s + b [ m / s N ] P(s) = \frac{V(s)}{U(s)} = \frac{1}{ms+b} \qquad [ \frac{m/s}{N} ] P(s)=U(s)V(s)=ms+b1[Nm/s]本教程采用的系统参数如下:
m 车辆质量 1000 kg
b 阻尼系数 50 N.s/m
u 额定控制力 500 N

控制性能目标

  • 上升时间 < 5s
  • 超调 < 10%
  • 稳态误差 < 2%

PID概述

典型的反馈系统的框图如下所示:
控制教程 —— 巡航控制篇:2.PID控制器设计_第1张图片
回顾控制教程 —— 介绍篇:3.PID控制器设计,PID控制器的传递函数为:
C ( s ) = K p + K i s + K d s = K d s 2 + K p s + K i s C(s) = K_p + \frac{K_i}{s} + K_d s = \frac{K_d s^2 +K_p s + K_i}{s} C(s)=Kp+sKi+Kds=sKds2+Kps+Ki我们可以使用传递函数直接在MATLAB中定义PID控制器:

Kp = 1;
Ki = 1;
Kd = 1;

s = tf('s');
C = Kp + Ki/s + Kd*s

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

C = pid(Kp,Ki,Kd)

控制教程 —— 巡航控制篇:2.PID控制器设计_第3张图片

比例控制

解决定速巡航的首要事情是找到添加比例控制( C = K p C=K_p C=Kp)的闭环传递函数。
通过简化单位反馈框图,带有比例控制器的闭环传递函数为:
T ( s ) = Y ( s ) R ( s ) = P ( s ) C ( s ) 1 + P ( s ) C ( s ) = K p m s + b + K p T(s) = \frac{Y(s)}{R(s)} = \frac{P(s)C(s)}{1+P(s)C(s)} = \frac{K_p}{m s+b+K_p} T(s)=R(s)Y(s)=1+P(s)C(s)P(s)C(s)=ms+b+KpKp
从控制教程 —— 介绍篇:3.PID控制器设计中可以得出,比例控制器 K p K_p Kp 可以减少上升时间。
现在,使用 K p = 100 K_p = 100 Kp=100 并给定参考速度为 10 m / s 10m/s 10m/s

m = 1000;
b = 50;
r = 10;

s = tf('s');
P_cruise = 1/(m*s + b);

Kp = 100;
C = pid(Kp);

T = feedback(C*P_cruise,1)

t = 0:0.1:20;
step(r*T,t)
axis([0 20 0 10])

控制教程 —— 巡航控制篇:2.PID控制器设计_第4张图片
控制教程 —— 巡航控制篇:2.PID控制器设计_第5张图片
注意,我们已使用MATLAB的feedback命令简化闭环系统的框图,请亲自确认结果是否与上述推导的闭环传递函数T一致。
从图中可以看出,稳态误差和上升时间均未达到我们的设计标准。
您可以增加比例增益 K p K_p Kp 来减少上升时间和稳态误差。使 K p K_p Kp 等于5000,重新运行可以得到:

Kp = 5000;
C = pid(Kp);
T = feedback(C*P_cruise,1);

step(r*T,t)
axis([0 20 0 10])

控制教程 —— 巡航控制篇:2.PID控制器设计_第6张图片
稳态误差现在基本上为0,并且上升时间已大大减少。然而,这种响应是不现实的,因为由于发动机和传动系统的功率限制,实际的巡航控制系统通常不能在不到0.5s 的时间内将车辆的速度从0改变到 10m/s。
在控制系统工程中,执行器限制在实践中经常遇到,因此,在提出新控制器时必须始终考虑所需的控制动作,我们将在后续教程中讨论该问题。
在这种情况下,该问题的解决方案是选择一个较低的比例增益 K p K_p Kp ,该比例增益将给出合理的上升时间,并添加一个积分控制器来消除稳态误差。

PI 控制器

具有PI控制器( C = K p + K i / s C=K_p+K_i/s C=Kp+Ki/s)的巡航控制系统的闭环传递函数为:
T ( s ) = Y ( s ) R ( s ) = P ( s ) C ( s ) 1 + P ( s ) C ( s ) = K p s + K i m s 2 + ( b + K p ) s + K i T(s) = \frac{Y(s)}{R(s)} = \frac{P(s)C(s)}{1+P(s)C(s)} = \frac{K_p s + K_i}{m s^2+(b+K_p)s + K_i} T(s)=R(s)Y(s)=1+P(s)C(s)P(s)C(s)=ms2+(b+Kp)s+KiKps+Ki从控制教程 —— 介绍篇:3.PID控制器设计中可以得出,系统中增加了一个积分控制器,从而消除了稳态误差。现在,让 K p K_p Kp 等于 600 和 K i K_i Ki 等于 1,看看响应发生了什么变化。

Kp = 600;
Ki = 1;
C = pid(Kp,Ki);

T = feedback(C*P_cruise,1);

step(r*T,t)
axis([0 20 0 10])

控制教程 —— 巡航控制篇:2.PID控制器设计_第7张图片
现在调整比例增益 K p K_p Kp 和积分增益 K i K_i Ki ,以获得所需的响应,调整积分增益 K i K_i Ki 时,建议您从一个较小的值开始,因为较大的 K i K_i Ki 可能会使响应不稳定。当 K p K_p Kp 等于 800 而 K i K_i Ki 等于 40 时,阶跃响应将如下所示。

Kp = 800;
Ki = 40;
C = pid(Kp,Ki);

T = feedback(C*P_cruise,1);

step(r*T,t)
axis([0 20 0 10])

控制教程 —— 巡航控制篇:2.PID控制器设计_第8张图片

PID 控制器

在本示例中,不需要额外的微分控制器即可实现理想的性能,但是,您可能想了解加入微分控制器后的表现。具有PID控制器( C = K p + K i / s + K d s C=K_p+K_i/s+K_ds C=Kp+Ki/s+Kds)的巡航控制系统的闭环传递函数为:
T ( s ) = Y ( s ) R ( s ) = P ( s ) C ( s ) 1 + P ( s ) C ( s ) = K d s 2 + K p s + K i ( m + K d ) s 2 + ( b + K p ) s + K i T(s) = \frac{Y(s)}{R(s)} = \frac{P(s)C(s)}{1+P(s)C(s)} = \frac{K_d s^2 + K_p s + K_i}{(m + K_d) s^2 +(b+K_p)s + K_i} T(s)=R(s)Y(s)=1+P(s)C(s)P(s)C(s)=(m+Kd)s2+(b+Kp)s+KiKds2+Kps+Ki假设 K p = 1 K_p=1 Kp=1 K i = 1 K_i=1 Ki=1 K d = 1 K_d=1 Kd=1,如下:

Kp = 1;
Ki = 1;
Kd = 1;
C = pid(Kp,Ki,Kd);

T = feedback(C*P_cruise,1);

绘制阶跃响应并调整所有 K p , K i , K d K_p,K_i,K_d Kp,Ki,Kd,直到获得满意的结果。
建议,通常为满足所需要的性能需要反复调整PID控制器各项增益,解决这一繁琐过程的最佳方法是每次仅调整一个变量( K p , K i K_p,K_i Kp,Ki K d K_d Kd),并观察这种改变下响应的变化。控制教程 —— 介绍篇:3.PID控制器设计中已经描述了各项的特性。

你可能感兴趣的:(Control,Tutorials,MATLAB,PID,巡航控制,控制器,仿真)