在命令行设计 PID 控制器

本示例展示如何为以下被控对象设计 PID 控制器:

sys=1(s+1)3. sys = \frac{1}{(s+1)^3}. sys=(s+1)31.

首先,创建被控对象模型并为其设计一个简单的 PI 控制器。

sys = zpk([],[-1 -1 -1],1);
[C_pi,info] = pidtune(sys,‘PI’)

C_pi =

         1

Kp + Ki * —
s

参数为 Kp = 1.14, Ki = 0.454

连续时间并行形式的 PI 控制器。

info = struct with fields:
Stable: 1
CrossoverFrequency: 0.5205
PhaseMargin: 60.0000

C_pi 是一个表示 PI 控制器的 pid 控制器对象。info 的字段显示,调谐算法选择的开环穿越频率约为 0.52 rad/s。

检查受控系统的闭环阶跃响应(参考跟踪)。

T_pi = feedback(C_pi*sys, 1);
step(T_pi)

Figure contains an axes object. The axes object contains an object of type line. This object represents T_pi.

为了改善响应时间,您可以设置一个比 pidtune 自动选择的结果(0.52)更高的目标穿越频率。将穿越频率增加到 1.0。

[C_pi_fast,info] = pidtune(sys,‘PI’,1.0)

C_pi_fast =

         1

Kp + Ki * —
s

参数为 Kp = 2.83, Ki = 0.0495

连续时间并行形式的 PI 控制器。

info = struct with fields:
Stable: 1
CrossoverFrequency: 1
PhaseMargin: 43.9973

新控制器实现了更高的穿越频率,但代价是相位裕度降低。

比较两个控制器的闭环阶跃响应。

T_pi_fast = feedback(C_pi_fast*sys,1);
step(T_pi,T_pi_fast)
axis([0 30 0 1.4])
legend(‘PI’,‘PI,fast’)

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent PI, PI,fast.

这种性能下降是因为 PI 控制器没有足够的自由度来在 1.0 rad/s 的穿越频率下实现良好的相位裕度。添加微分作用可以改善响应。

为 Gc 设计一个目标穿越频率为 1.0 rad/s 的 PIDF 控制器。

[C_pidf_fast,info] = pidtune(sys,‘PIDF’,1.0)

C_pidf_fast =

         1            s

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

参数为 Kp = 2.72, Ki = 0.985, Kd = 1.72, Tf = 0.00875

连续时间并行形式的 PIDF 控制器。

info = struct with fields:
Stable: 1
CrossoverFrequency: 1
PhaseMargin: 60.0000

info 的字段显示,控制器中的微分作用使得调谐算法能够设计出一个更激进的控制器,该控制器以良好的相位裕度实现了目标穿越频率。

比较快速 PI 和 PIDF 控制器的闭环阶跃响应和抗扰性能。

T_pidf_fast = feedback(C_pidf_fast*sys,1);
step(T_pi_fast, T_pidf_fast);
axis([0 30 0 1.4]);
legend(‘PI,fast’,‘PIDF,fast’);

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent PI,fast, PIDF,fast.

您可以比较受控系统在快速 PI 和 PIDF 控制器下的输入(负载)扰动抑制性能。为此,绘制从被控对象输入到被控对象输出的闭环传递函数的响应。

S_pi_fast = feedback(sys,C_pi_fast);
S_pidf_fast = feedback(sys,C_pidf_fast);
step(S_pi_fast,S_pidf_fast);
axis([0 50 0 0.4]);
legend(‘PI,fast’,‘PIDF,fast’);

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent PI,fast, PIDF,fast.

该图显示 PIDF 控制器也提供了更快的扰动抑制。

另请参阅

pidtune | pid

相关主题

  • 选择 PID 控制器设计工具
  • 使用 PI 控制器设计级联控制系统
  • 用于快速参考跟踪的 PID 控制器设计

版权标注与来源说明

本文译文对应的原文内容,均来源于 MathWorks 官方网站(https://www.mathworks.com/)及官方帮助中心,原文版权均独家归属MathWorks 公司所有。

译文系基于原文进行的非官方翻译,仅为方便个人学习、理解MathWorks相关产品(含MATLAB等)的功能、操作及技术细节而制作,不代表MathWorks公司官方立场,也不构成官方翻译版本。

建议使用者优先查阅官方原文。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐