基于Simulink的自抗扰控制器扩张状态观测器的仿真

基于Simulink的自抗扰控制器(ADRC)扩张状态观测器(ESO)的仿真


一、系统架构设计

1. ADRC-ESO模块结构

% Simulink模型框图
% 输入信号
u = reference_signal;  % 参考信号
y = plant_output;      % 被控对象输出

% ESO模块
[ z1, z2, z3 ] = ESO_Block(y, u, params);

% NLSEF控制器
u_control = NLSEF(z1, z2, z3, params);

% 执行器与被控对象
plant = Plant_Model(u_control);

2. 关键参数配置

参数 典型值 说明
观测器带宽(ωo) 50-100 rad/s 应为控制器带宽的5-10倍
控制器带宽(ωc) 10-20 rad/s 根据系统响应需求调整
非线性因子(α1,α2) 0.5,0.25 影响观测器收敛速度
补偿因子(δ) 0.01-0.1 抑制高频噪声

二、ESO模块实现

1. S函数实现(ESO_Block.m)

function [sys,x0,str,ts] = ESO_Block(t,x,u,flag,params)
    switch flag
        case 0
            sizes = simsizes;
            sizes.NumContStates  = 3;
            sizes.NumDiscStates  = 0;
            sizes.NumOutputs     = 3;
            sizes.NumInputs      = 2;
            sizes.DirFeedthrough = 1;
            sizes.NumSampleTimes = 1;
            sys = simsizes(sizes);
            x0 = [0;0;0];  % 初始状态估计
            str = [];
            ts = [0 0];
            
        case 3
            % 扩张状态观测器方程
            y = u(1);      % 系统输出
            u_in = u(2);   % 控制输入
            
            e1 = x(1) - y;
            e2 = x(2) - (y - x(1))/params.dt;  % 速度估计
            
            % 非线性反馈律
            fal1 = fal(e1, params.alpha1, params.delta);
            fal2 = fal(e2, params.alpha2, params.delta);
            
            % 观测器更新
            sys(1) = x(2) + params.beta1 * fal1;
            sys(2) = x(3) + params.beta2 * fal1 + params.beta3 * fal2;
            sys(3) = -params.beta4 * fal2;
            
        case 4
            sys = [];
        case 9
            sys = [];
    end
end

function y = fal(e, a, delta)
    if abs(e) <= delta
        y = e * a^2 * e / (2*delta^a);
    else
        y = a^2 * sign(e);
    end
end

2. Simulink模块封装

  1. 创建Subsystem模块
  2. 添加3个Integrator模块(状态变量z1,z2,z3)
  3. 添加Sum、Gain和Product模块实现观测器方程
  4. 配置参数对话框(ωo=50, β1=100, β2=300, β3=1000)

三、应用案例(永磁同步电机速度环)

1. 电机模型

% PMSM电机参数
J = 0.01469;    % 转动惯量 (kg·m²)
R = 0.5;        % 定子电阻 (Ω)
Ld = 0.0085;    % d轴电感 (H)
Lq = 0.0085;    % q轴电感 (H)
Ke = 0.1;       % 反电动势常数 (V·s/rad)
B = 0.001;      % 黏性摩擦系数 (N·m·s/rad)

% 状态方程
function dx = motor(t,x,u)
    id = u(1); iq = u(2);
    ω = x(1); θ = x(2);
    
    % 电压方程
    Vd = R*id - Ld*ω*iq + Ke*ω;
    Vq = R*iq + Ld*ω*id + Ke*θ;
    
    % 电磁转矩
    Te = 1.5*Ke*(iq*cos(θ) - id*sin(θ));
    
    % 运动方程
    dx = [ω; (Te - B*ω)/J];
end

2. ADRC控制器设计

% ESO参数
params.omega_o = 50;    % 观测器带宽
params.dt = 0.0001;     % 采样时间
params.beta1 = 100;     % 增益系数
params.beta2 = 300;
params.beta3 = 1000;
params.alpha1 = 0.5;    % 非线性因子
params.alpha2 = 0.25;
params.delta = 0.01;    % 补偿因子

% NLSEF参数
params.kr = 0.5;        % 前馈增益
params.kp = 20;         % 比例增益
params.ki = 0.1;        % 积分增益

参考仿真 自抗扰控制器扩张状态观测器仿真simulink www.youwenfan.com/contentcnk/79500.html

3. 仿真模型搭建

  1. 信号源:正弦参考信号(10 rad/s → 30 rad/s阶跃)
  2. 负载扰动:在0.05s时添加突加负载(T=0.5 N·m)
  3. 观测器模块:集成ESO_S-Function
  4. 控制器模块:NLSEF+FAL函数
  5. 示波器:观测转速跟踪、扰动估计和误差曲线
posted @ 2025-11-06 09:42  kang_ms  阅读(7)  评论(0)    收藏  举报