Simulink&车辆巡航控制 (2) -PID控制设计

1.系统模型和参数

下面给出了巡航控制问题的传递函数模型。有关推导,请参阅:MATLAB/Simulink建模-车辆巡航控制 (1)。

Simulink&车辆巡航控制 (2) -PID控制设计的图1

公式(1)中使用的相关参数:

(m)   整车质量             1000 kg
(b)   阻尼系数             50 N.s/m

 (r)        参考车速                                 10 m/s


2.性能设定

  • 上升时间 < 5 s    

  • 过冲 < 10%    

  • 稳态误差 < 2%


3.PID 概述

典型单位反馈系统的框图如下所示。

Simulink&车辆巡航控制 (2) -PID控制设计的图2

PID控制器的传递函数是:

Simulink&车辆巡航控制 (2) -PID控制设计的图3

我们可以在MATLAB中直接定义传递函数:

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

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

s^2 + s + 1
-----------
s

连续时间传递函数。

或者,我们可以使用 MATLAB 的 pid 控制器对象来生成等效的连续时间控制器,如下所示:

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

1
Kp + Ki * --- + Kd * s
s

with Kp = 1, Ki = 1, Kd = 1

并联形式的连续时间 PID 控制器。


4.比例控制

在这个问题中要做的第一件事是找到一个添加了比例控制 (C=Kp) 的闭环传递函数。通过减少单位反馈框图,带有比例控制器的闭环传递函数变为:

Simulink&车辆巡航控制 (2) -PID控制设计的图4

比例控制器 Kp减少上升时间,这在这种情况下是可取的。现在,使用等于 100 的Kp和 10 m/s 的参考速度。 创建一个新的 m 文件并输入以下命令。

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])


T =

100
------------
1000 s + 150

连续时间传递函数。

Simulink&车辆巡航控制 (2) -PID控制设计的图5

请注意,我们使用 MATLAB 反馈命令来简化闭环系统的框图简化。 请自行验证结果是否与上面推导的闭环传递函数 T 一致。在 MATLAB 中运行 m 文件应该会给您上面的阶跃响应。 从图中可以看出,稳态误差和上升时间都不满足我们的设计标准。您可以增加比例增益 Kp,以减少上升时间和稳态误差。 更改现有的 m 文件,使 Kp等于 5000,然后在 MATLAB 命令窗口中重新运行它。 你应该看到下面的情节。

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

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

Simulink&车辆巡航控制 (2) -PID控制设计的图6

稳态误差现在基本上为零,并且上升时间已大大减少。 然而,这种响应是不现实的,因为由于发动机和动力传动系统的功率限制,真正的巡航控制系统通常不能在不到 0.5 秒的时间内将车辆的速度从 0 改变到 10 m/s。在控制系统工程的实践中经常遇到执行器的限制,因此,在提出新的控制器时必须始终考虑所需的控制动作在这种情况下,这个问题的解决方案是选择一个较低的比例增益Kp,这将提供一个合理的上升时间,并添加一个积分控制器来消除稳态误差。


5.PI 控制

这个带有 PI 控制器的巡航控制系统的闭环传递函数 (C = Kp + Ki/s) 是:

Simulink&车辆巡航控制 (2) -PID控制设计的图7

向系统添加积分控制器可消除稳态误差。 现在,让 Kp 等于 600 和 Ki 等于 1,看看响应会发生什么。 将您的 m 文件更改为以下内容。

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

T = feedback(C*P_cruise,1);

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

Simulink&车辆巡航控制 (2) -PID控制设计的图8

现在调整比例增益 Kp 和积分增益 Ki,以获得所需的响应。当调整积分增益 Ki 时,建议从较小的值开始,因为较大的 Ki 会使响应不稳定。 当 Kp 等于 800 且 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])

Simulink&车辆巡航控制 (2) -PID控制设计的图9


6.PID 控制

对于这个特定的例子,不需要实现微分控制器来获得所需的输出。 但是,您可能希望了解如何使用 PID 控制以供将来参考。 这个带有 PID 控制器的巡航控制系统的闭环传递函数 (C = Kp + Ki/s + Kds) 是:

Simulink&车辆巡航控制 (2) -PID控制设计的图10

令 Kp等于1,Ki等于1,Kd等于 1,然后在新的 m 文件中输入以下命令。

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

T = feedback(C*P_cruise,1);

绘制阶跃响应并调整所有 Kp、Kd 和Ki,直到获得满意的结果。

建议:通常选择合适的增益需要一个反复试验的过程。 解决这一繁琐过程的最佳方法是一次调整一个变量(Kp、Ki 或 Kd),并观察改变一个变量如何影响系统输出。

【免责声明】本文部分资料摘自网络平台,版权归原作者所有,仅用于技术分享与交流,非商业用途!若有涉及版权等请告知,将及时修订删除,谢谢大家的关注!

默认 最新
当前暂无评论,小编等你评论哦!
点赞 1 评论 收藏 3
关注