应用扩张状态观测器实现 DC 电机的参考跟踪
此示例说明如何使用 Extended State Observer 模块对 DC 电机模型执行参考跟踪。
DC 电机模型
在电枢控制的 DC 电机中,施加的电压 控制轴的角速度 。下图显示的是 DC 电机的一个简化模型。
![]()
对于此示例,电机的物理常数为:
= 2.0 欧姆
= 0.5 亨利
(转矩常数)= 0.1
(反电动势常数)= 0.1
= 0.2 Nms
= 0.02 kg m^2
在此模型中,在 10 秒时向系统注入一个脉冲扰动信号。
设计 PID 控制器
控制器的目标是实现对参考角速度阶跃变化的跟踪。在应用扩张状态观测器 (ESO) 之前,先设计 PID 控制器以跟踪参考轨迹。该模型包含一个 PID 控制器,其增益已使用 PID 调节器进行了调节。有关在 Simulink® 模型中调节 PID 控制器的详细信息,请参阅Simulink 中基于模型的 PID 调节简介。
打开该 DC 电机的 Simulink 模型。当 ESO 子系统的变体设置为 Disabled 时,控制输入直接馈通,即满足 。
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;
![]()
上图表明,PID 控制器能够紧密跟踪阶跃参考轨迹。
设计扩张状态观测器
本节将设计一个扩张状态观测器,以提高 PID 控制器的抗扰性能。
为了给 Extended State Observer 模块创建 LTI 系统,需对 DC 电机被控对象进行线性化。为此,在 DC Motor 模块的输入端指定线性化输入点,并在 DC Motor 模块的输出端指定带环路开口的线性化输出点,如模型中所示。
![]()
获取模型中已指定的线性化分析点。
io = getlinio(mdl);
对模型进行线性化。
sys = linearize(mdl,io);
当 ESO 子系统的变体设置为 Enabled 时,控制输入为 ,其中 是系统扰动的估计值。
enableESO = 1;
![]()
为 Extended State Observer 模块指定 LTI 系统。由于扰动与控制输入通过同一通道进入模型,因此指定 ,以满足关系式 。观测器带宽应选取为控制器带宽的 5 至 7 倍。在此示例中,观测器带宽设置为 30 弧度/秒。
![]()
![]()
对模型进行仿真并查看结果。
sim(mdl) y2 = logsout.getElement('y'); y2data = y2.Values.Data(:,:)'; plot(y2.Values.Time,y2data); legend('withoutESO','withESO','Location','southeast')
![]()
上图表明,在 10 秒之前,PID 控制器能够紧密跟踪阶跃参考轨迹。当系统在 10 秒之后出现扰动时,ESO 的扰动抑制性能优于单独的 PID 控制器。
关闭模型。
bdclose(mdl)
另请参阅
Extended State Observer | Disturbance Compensator | Active Disturbance Rejection Control