主要内容

为多输入多输出被控对象设计 ADRC

自 R2023b 起

此示例说明如何为多输入多输出 (MIMO) 被控对象设计自抗扰控制 (ADRC)。

概述

在此示例中,被控对象是一个中试规模精馏塔模型 [1]。该模型有两个输入:磁通流量 u1 和蒸汽流量 u2。该模型有两个输出:轻产物纯度 y1 和重产物纯度 y2。该模型还包含未知扰动。

定义被控对象传递函数。

s = tf('s');
G = [12.8/(16.7*s+1),-18.9/(21*s+1);6.6/(10.9*s+1),-19.4/(14.4*s+1)];

控制器的目标是将输出保持为所需值 r1=0r2=1。要为被控对象设计两个 ADRC 控制器,您需要应用动态解耦控制方法 [1]。每个 ADRC 模块控制从输入 ui 到输出 yi (i=1,2) 的通道。然后,您设计一个模型预测控制器 (MPC) 作为 ADRC 设计性能的基准控制器。

设计 ADRC 控制器

要设计解耦的 ADRC 控制器,请按如下方式逼近双输入双输出被控对象模型。

y1(n1)=b1u1+f1(t)y2(n2)=b2u2+f2(t)

其中:

  • fi(t) 表示通道从输入 ui 到输出 yi (i=1,2) 的总扰动,包括未知动态特性、跨通道干扰和外部扰动。

  • ni 表示导数的阶数。

  • bi 表示临界增益。

要确定导数的阶数 ni 和临界增益 bi,请在被控对象模型上执行阶跃输入试验。此示例提供了 DecoupledPlantIO 模型,用于对具有解耦输入和输出的模型进行仿真。

打开 Simulink® 模型。

mdl_step = "DecoupledPlantIO";
open_system(mdl_step)

要执行从输入 u1=1 到输出 y1 的试验,请指定 m = 1。

对模型进行仿真并检查输出响应。

m = 1;
out = sim(mdl_step);
t1 = out.logsout{1}.Values.Time;
y1 = out.logsout{1}.Values.Data;
plot(t1,y1);
xlabel("time (s)")
ylabel("y1")

Figure contains an axes object. The axes object with xlabel time (s), ylabel y1 contains an object of type line.

阶跃响应是一阶的,因此导数的阶数 n1=1。您可以使用斜率来逼近临界增益 b1。对于此响应,b1=0.75

b1 = 0.75;

同样,为从输入 u2=1 到输出 y2 的试验指定 m=2

m = 2;
out = sim(mdl_step);
t2 = out.logsout{1}.Values.Time;
y2 = out.logsout{1}.Values.Data;
plot(t2,y2);
xlabel('time (s)')
ylabel('y2')

Figure contains an axes object. The axes object with xlabel time (s), ylabel y2 contains an object of type line.

阶跃响应也是一阶的,因此 n2=1,临界增益 b2=-1.3

b2 = -1.3;

调节 ADRC 控制器

要调节 ADRC 控制器的性能,请使用控制器带宽 wc 和观测器带宽 wo 参数。在此示例中,调节目标是与最佳 MPC 控制器的性能匹配。

为被控对象模型设计 MPC 控制器。

Ts = 1; % sample time
mpc1 = mpc(G,Ts);
-->"PredictionHorizon" is empty. Assuming default 10.
-->"ControlHorizon" is empty. Assuming default 2.
-->"Weights.ManipulatedVariables" is empty. Assuming default 0.00000.
-->"Weights.ManipulatedVariablesRate" is empty. Assuming default 0.10000.
-->"Weights.OutputVariables" is empty. Assuming default 1.00000.

您可以调整控制器的权重以调节性能。有关详细信息,请参阅Tune Weights (Model Predictive Control Toolbox)

指定 MPC 控制器的权重。

mpc1.Weights.ManipulatedVariablesRate = 0.7389*[1,1];
mpc1.Weights.OutputVariables = 0.1353*[1,1];

为了与 MPC 控制器的响应匹配,您必须设置 ADRC 控制器的控制器带宽和观测器带宽。对于此示例,wc=0.25wo=3 与 MPC 控制器的响应匹配。

wc = 0.25;
wo = 3;

运行模型 45 秒。

T = 45;
mdl = "ADRCWithBenchmarkMIMO";
open_system(mdl);

sim(mdl);
-->Converting the "Model.Plant" property to state-space.
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output #1 is integrated white noise.
-->Assuming output disturbance added to measured output #2 is integrated white noise.

使用示波器查看被控对象的输出。

open_system(mdl + "/outputs")

MPC 控制器和 ADRC 控制器对输出 y2 的响应相似。与 MPC 控制器相比,ADRC 控制器对输出 y1 的跟踪误差更小。

抗扰

该模型具有 50 到 100 秒的外部扰动。将模型运行到 150 秒。

T = 150;
sim(mdl);

使用示波器查看被控对象的输出。

open_system(mdl + "/outputs")

对于此示例,与基准 MPC 控制器相比,ADRC 控制器具有更出色的抗扰结果。由于 ADRC 控制器使用幅值更大的控制输入,因此在存在扰动的情况下,输出会更快地收敛到参考值。使用示波器查看被控对象的输入。

open_system(mdl + "/inputs")

参考资料

[1] Zheng, Qing, Zhongzhou Chen, and Zhiqiang Gao.“A Dynamic Decoupling Control Approach and Its Applications to Chemical Processes.”In 2007 American Control Conference, 5176–81, 2007. https://doi.org/10.1109/ACC.2007.4282973.

另请参阅

主题