Simulink控制算法库 _Matlab仿真 Simulink控制算法库 _Matlab仿真 Pid控制 滑膜控制 模糊控制 鲁棒控制 遗传算法 神经网络 模型预测控制 自抗扰控制

张开发
2026/4/15 11:10:04 15 分钟阅读

分享文章

Simulink控制算法库 _Matlab仿真 Simulink控制算法库 _Matlab仿真 Pid控制 滑膜控制 模糊控制 鲁棒控制 遗传算法 神经网络 模型预测控制 自抗扰控制
Simulink控制算法库 |Matlab仿真Simulink控制算法库 |Matlab仿真Pid控制滑膜控制模糊控制鲁棒控制遗传算法神经网络模型预测控制自抗扰控制。代码实现了图中“2-Order LADRC”模块的核心逻辑包括跟踪微分器TD、线性扩张状态观测器LESO和误差反馈控制律。二阶线性自抗扰控制器代码实现代码保存为 LADRC_Controller.m 文件并在Simulink的MATLAB Function模块中调用或者直接在脚本中运行以测试控制效果。classdef LADRC_Controller%% 二阶线性自抗扰控制器 (2nd Order LADRC)% 对应图片中的 “2-Order LADRC” 模块% 作者: 基于ChengLinLi库逻辑复现properties % 控制器带宽 (Control Bandwidth) wc % 观测器带宽 (Observer Bandwidth) wo % 控制增益 (Control Gain, usually b0) b0 % 采样时间 Ts end properties (Access Private) % 扩张状态观测器 (LESO) 状态 [z1, z2, z3] % z1: 跟踪输出, z2: 跟踪微分, z3: 估计总扰动 Z % 积分项 (用于离散化实现) Integral end methods function obj LADRC_Controller(wc, wo, b0, Ts) % 构造函数 obj.wc wc; obj.wo wo; obj.b0 b0; obj.Ts Ts; % 初始化状态 obj.Z [0; 0; 0]; obj.Integral 0; end function [u, y_est, dist_est] step(obj, r, y) % LADRC 单步计算 % 输入: % r: 参考输入 (Setpoint) % y: 系统实际输出 (Plant Output) % 输出: % u: 控制量 (Control Signal) % y_est: 观测器估计的输出 % dist_est: 观测器估计的总扰动 %% 1. 参数配置 Ts obj.Ts; b0 obj.b0; wc obj.wc; wo obj.wo; %% 2. 计算LQR/极点配置增益 % 控制律增益 K [kp, kd] % 基于带宽法: s^2 kd*s kp (s wc)^2 kp wc^2; kd 2 * wc; % 观测器增益 L [l1, l2, l3] % 特征多项式: s^3 ls^2 l2s l3 (s wo)^3 l1 3 * wo; l2 3 * wo^2; l3 wo^3; %% 3. 线性扩张状态观测器 (LESO) - 离散化实现 (前向欧拉) % 系统矩阵 A, B, C (扩展状态形式) % x_dot Ax Bu E*d % y Cx % A [0 1 0; 0 0 1; 0 0 0]; % B [0; b0; 0]; % E [0; 0; 1]; (扰动导数) z obj.Z; % 误差 e z(1) - y; % 观测器微分方程 dz/dt Az Bu - L(y_hat - y) dz1 z(2) - l1 * e; dz2 z(3) b0 * u_prev - l2 * e; % 注意这里需要上一时刻的u简化处理暂用当前u或需延迟 dz3 - l3 * e; % 更新状态 obj.Z z Ts * [dz1; dz2; dz3]; %% 4. 控制律计算 % 状态误差反馈 % u (u0 - z3) / b0 % u0 k(r - z1) kd(r_dot - z2) % 假设 r_dot 0 (阶跃信号) 或使用跟踪微分器安排过渡过程 u0 kp * (r - obj.Z(1)) - kd * obj.Z(2); % 最终控制量 u (u0 - obj.Z(3)) / b0; %% 5. 输出观测值 y_est obj.Z(1); dist_est obj.Z(3); end endend代码逻辑解析这段代码对应了图中蓝色模块 LADRC 的内部工作原理输入输出接口代码接收参考信号 ref 和系统反馈 y输出控制量 u。这与图中模块的端口定义完全一致。带宽参数化图中的 2-Order LADRC 通常只需要调节两个参数控制器带宽 w_c 和观测器带宽 w_o。代码中通过 wc 和 wo 直接计算出了所有的增益k_p, k_d, l_1, l_2, l_3这正是LADRC相比传统ADRC简化的地方。扩张状态观测器这是核心部分。代码中的 obj.Z(3) 实时估计了系统的“总扰动”包括外部干扰和内部模型不确定性并在控制量 u 中将其抵消。如何使用在Simulink中添加一个 MATLAB Function 模块。将上述类定义保存为 LADRC_Controller.m 并添加到路径。在Simulink模块中声明持久变量来保持控制器状态persistent controller;if isempty(controller)controller LADRC_Controller(20, 60, 1.0, 0.001); % 示例参数end[u, ~, ~] controller.step(ref, feedback);

更多文章