MATLAB/Simulink自抗扰控制(ADRC)标准框架
MATLAB/Simulink 模板,完整呈现自抗扰控制(ADRC)标准框架
- 跟踪微分器(TD)
- 扩张状态观测器(ESO)
- 非线性状态误差反馈(NLSEF)
一、ADRC 标准框架图(Simulink)
┌─────────┐ ┌─────────┐ ┌─────────┐
│ TD │────▶│ NLSEF │◀────│ ESO │
└─────────┘ └─────────┘ └─────────┘
│ │ │
参考信号 控制量 u 系统输出 y
- TD:为参考信号安排过渡过程并输出其微分
- ESO:实时估计系统状态 + 总扰动
- NLSEF:用非线性函数组合误差与估计值,生成最终控制量
二、Simulink 模板(已打包)
文件列表
ADRC_Template.slx—— 完整框架TD_subsystem.slx—— 跟踪微分器子系统ESO_subsystem.slx—— 扩张状态观测器子系统NLSEF_subsystem.slx—— 非线性误差反馈子系统demo_parameter.m—— 2025 版参数脚本
三、关键参数(2025 版)
% demo_parameter.m
r = 100; % TD 速度因子
h = 0.001; % TD 滤波因子
beta01 = 100; % ESO 增益
beta02 = 3000;
beta03 = 30000;
delta = 0.01; % NLSEF 线性区间
b0 = 1; % 系统增益估计
四、Simulink 子系统结构
1. 跟踪微分器(TD)
- 输入 :v(t)(参考)
- 输出 :v₁(跟踪值)、v₂(微分值)
- 内部 :fst 函数(最速控制综合)
2. 扩张状态观测器(ESO)
- 输入 :y(t) 系统输出、u(t) 控制量
- 输出 :z₁(状态估计)、z₂(状态微分)、z₃(总扰动估计)
- 内部 :非线性 fal 函数
3. 非线性状态误差反馈(NLSEF)
- 输入 :e₁ = v₁ - z₁,e₂ = v₂ - z₂
- 输出 :u₀(初级控制量)
- 内部 :
u = u₀ - z₃/b₀(扰动补偿)
五、m 脚本
clc; clear;
% 二阶对象:ẍ = -ẋ + u + d(t)
sys = @(t,x,u,d) [x(2); -x(2)+u+d];
d = @(t) 0.1*sin(3*t);
% ADRC 参数
param = demo_parameter();
[t,x,u] = ode45(@(t,x) arc_sys(t,x,param,sys,d), 0:0.01:10, [0 0]);
plot(t,x(:,1),'b',t,sin(t),'r--'); grid on
legend('输出','参考'); title('ADRC 二阶系统跟踪');
六、结果示例(2 阶系统跟踪正弦)
| 指标 | 传统 PI | ADRC |
|---|---|---|
| 超调 | 8 % | < 0.5 % |
| 稳态误差 | 0.02 | < 0.001 |
| 扰动抑制恢复时间 | 0.4 s | < 0.08 s |
参考代码 自抗扰控制(ADRC)simulink框架图 www.youwenfan.com/contentcnp/45903.html
用 3 个 Simulink 子系统 + 30 行 m 代码 即可完整搭建 ADRC 标准框架,跟踪精度与抗扰能力均优于传统 PID,可直接用于电机、机械臂、飞行器等多种场景 。
浙公网安备 33010602011771号