主要内容

应用扩张状态观测器实现 DC 电机的参考跟踪

自 R2024a 起

此示例说明如何使用 Extended State Observer 模块对 DC 电机模型执行参考跟踪。

DC 电机模型

在电枢控制的 DC 电机中,施加的电压 Va 控制轴的角速度 ω。下图显示的是 DC 电机的一个简化模型。

对于此示例,电机的物理常数为:

  • R = 2.0 欧姆

  • L = 0.5 亨利

  • Km(转矩常数)= 0.1

  • Kb(反电动势常数)= 0.1

  • Kf = 0.2 Nms

  • J = 0.02 kg m^2

在此模型中,在 10 秒时向系统注入一个脉冲扰动信号。

设计 PID 控制器

控制器的目标是实现对参考角速度阶跃变化的跟踪。在应用扩张状态观测器 (ESO) 之前,先设计 PID 控制器以跟踪参考轨迹。该模型包含一个 PID 控制器,其增益已使用 PID 调节器进行了调节。有关在 Simulink® 模型中调节 PID 控制器的详细信息,请参阅Simulink 中基于模型的 PID 调节简介

打开该 DC 电机的 Simulink 模型。当 ESO 子系统的变体设置为 Disabled 时,控制输入直接馈通,即满足 u=u0

mdl = 'scdDCMotorESO';
open_system(mdl)
enableESO = 0;

对模型进行仿真并查看结果。

sim(mdl)
y1 = logsout.getElement('y');
y1data = y1.Values.Data(:,:)';
plot(y1.Values.Time,y1data);
grid on;
hold on;

Figure contains an axes object. The axes object contains an object of type line.

上图表明,PID 控制器能够紧密跟踪阶跃参考轨迹。

设计扩张状态观测器

本节将设计一个扩张状态观测器,以提高 PID 控制器的抗扰性能。

为了给 Extended State Observer 模块创建 LTI 系统,需对 DC 电机被控对象进行线性化。为此,在 DC Motor 模块的输入端指定线性化输入点,并在 DC Motor 模块的输出端指定带环路开口的线性化输出点,如模型中所示。

获取模型中已指定的线性化分析点。

io = getlinio(mdl);

对模型进行线性化。

sys = linearize(mdl,io);

ESO 子系统的变体设置为 Enabled 时,控制输入为 u=u0-dˆ,其中 dˆ 是系统扰动的估计值。

enableESO = 1;

为 Extended State Observer 模块指定 LTI 系统。由于扰动与控制输入通过同一通道进入模型,因此指定 k=1,以满足关系式 Bd=k×Bu。观测器带宽应选取为控制器带宽的 5 至 7 倍。在此示例中,观测器带宽设置为 30 弧度/秒。

对模型进行仿真并查看结果。

sim(mdl)
y2 = logsout.getElement('y');
y2data = y2.Values.Data(:,:)';
plot(y2.Values.Time,y2data);
legend('withoutESO','withESO','Location','southeast')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent withoutESO, withESO.

上图表明,在 10 秒之前,PID 控制器能够紧密跟踪阶跃参考轨迹。当系统在 10 秒之后出现扰动时,ESO 的扰动抑制性能优于单独的 PID 控制器。

关闭模型。

bdclose(mdl)

另请参阅

| |

主题