ADRC自抗扰控制器的Simulink仿真之旅:S函数构建ESO与TD模块
ADRC自抗扰控制器的simulink仿真,ESO和TD等模块使用S函数开发最近在研究控制算法这块ADRC自抗扰控制器着实引起了我的兴趣。今天就来跟大家分享一下ADRC在Simulink中的仿真实现特别是ESO扩张状态观测器和TD跟踪微分器模块使用S函数开发的过程。ADRC简介ADRC是一种不依赖于精确模型的新型控制技术它把系统中的未知动态当作扰动通过扩张状态观测器对扰动进行实时估计和补偿从而提高系统的控制性能。简单来说它就像是给控制系统安装了一双“眼睛”能实时“看”到外界干扰并及时做出调整。Simulink仿真搭建ESO模块的S函数开发ESO在ADRC里起着至关重要的作用它负责估计系统的状态和总扰动。下面咱们就看看ESO的S函数代码实现。function [sys,x0,str,ts] ESO(t,x,u,flag) switch flag, case 0, [sys,x0,str,ts]mdlInitializeSizes; case 1, sysmdlDerivatives(t,x,u); case 3, sysmdlOutputs(t,x,u); case {2, 4, 9 } sys []; otherwise error([Unhandled flag ,num2str(flag)]); end % 初始化部分 function [sys,x0,str,ts]mdlInitializeSizes sizes simsizes; sizes.NumContStates 3; % ESO的状态变量个数 sizes.NumDiscStates 0; sizes.NumOutputs 3; % 输出个数 sizes.NumInputs 2; % 输入个数一般是系统输出和控制输入 sizes.DirFeedthrough 0; sizes.NumSampleTimes 1; sys simsizes(sizes); x0 [0;0;0]; % 初始状态 str []; ts [0 0]; % 导数计算部分 function sysmdlDerivatives(t,x,u) beta1 100; beta2 200; beta3 500; y u(1); u0 u(2); e y - x(1); sys(1) x(2) beta1*e; sys(2) x(3) beta2*e - 5*u0; sys(3) beta3*e; % 输出计算部分 function sysmdlOutputs(t,x,u) sys x;这段代码中mdlInitializeSizes函数用于初始化S函数的基本参数比如状态变量个数、输入输出个数等。mdlDerivatives函数则根据ESO的数学模型来计算状态变量的导数这里通过设定beta1、beta2、beta3等参数来调整观测器的性能。mdlOutputs函数简单地将当前的状态变量作为输出。TD模块的S函数开发TD主要用于安排过渡过程跟踪输入信号并给出其微分信号。function [sys,x0,str,ts] TD(t,x,u,flag) switch flag, case 0, [sys,x0,str,ts]mdlInitializeSizes; case 1, sysmdlDerivatives(t,x,u); case 3, sysmdlOutputs(t,x,u); case {2, 4, 9 } sys []; otherwise error([Unhandled flag ,num2str(flag)]); end % 初始化部分 function [sys,x0,str,ts]mdlInitializeSizes sizes simsizes; sizes.NumContStates 2; % TD的状态变量个数 sizes.NumDiscStates 0; sizes.NumOutputs 2; % 输出个数 sizes.NumInputs 1; % 输入个数一般是参考输入 sizes.DirFeedthrough 0; sizes.NumSampleTimes 1; sys simsizes(sizes); x0 [0;0]; % 初始状态 str []; ts [0 0]; % 导数计算部分 function sysmdlDerivatives(t,x,u) r 10; h 0.01; fh0 x(2); fh1 r*(sign(x(1)-ufh0*h/2)-sign(x(1)-u-fh0*h/2)); sys(1) x(2); sys(2) fh1; % 输出计算部分 function sysmdlOutputs(t,x,u) sys x;在TD的S函数中mdlInitializeSizes同样负责初始化相关参数。mdlDerivatives函数根据TD的算法通过设置r速度因子和h采样时间等参数来计算状态变量的导数。mdlOutputs函数将TD的两个状态变量输出分别为跟踪信号和其微分信号。整体仿真模型搭建在Simulink中将开发好的ESO和TD的S函数模块添加进来再结合系统模型和控制器部分就可以搭建出完整的ADRC仿真模型。通过调整各个模块的参数可以观察系统在不同情况下的响应比如抗干扰能力、跟踪性能等。ADRC自抗扰控制器的simulink仿真,ESO和TD等模块使用S函数开发通过这次基于S函数开发ESO和TD模块的ADRC Simulink仿真实践对ADRC的工作原理和实现细节有了更深入的理解。也希望这篇博文能给同样在研究ADRC的小伙伴们一些启发一起探索控制领域的奇妙世界
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2415709.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!