使用滑模控制对sin(t)曲线追踪


结合:【Matlab】简单的滑模控制程序及Simulink仿真本片文章观看,此篇文章是在这篇文章的基础上进行修改的

输出u的推导过程

 如果不明白控制量输出u的推到过成请看:【控制理论】滑模控制最强解析这篇文章

根据推到结果写s—function函数

控制器的s-function

function [sys,x0,str,ts] = simple_adaptive_controller(t, x, u, flag) switch flag, case 0, [sys,x0,str,ts]=mdlInitializeSizes;  % 调用初始化子函数 case 1, sys=[]; case 2, sys=[]; case 3, sys=mdlOutputs(t,x,u);    %计算输出子函数 case 4, sys=[];   %计算下一仿真时刻子函数 case 9, sys=[];    %终止仿真子函数 otherwise DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); end function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes   %初始化子函数 sizes = simsizes; sizes.NumContStates = 0;  %连续状态变量个数 sizes.NumDiscStates = 0;  %离散状态变量个数 sizes.NumOutputs = 1;  %输出变量个数 sizes.NumInputs = 5;   %输入变量个数 sizes.DirFeedthrough = 1;   %输入信号是否在输出端出现 sizes.NumSampleTimes = 0;   % at least one sample time is needed sys = simsizes(sizes); x0 = [];   %初始值 str = []; ts = [];   %[0 0]用于连续系统,[-1 0]表示继承其前的采样时间设置 simStateCompliance = 'UnknownSimState'; function sys=mdlOutputs(t,x,u)   %计算输出子函数 J = 2; thd = u(1); dthd = u(4); ddthd = u(5); th = u(2); dth = u(3); e = th - thd; de = dth; c = 10; s = c*e + de; xite = 1.1; k = 0; ut = J*-c*(dth - dthd)-J*xite*sign(s) - J*ddthd ; sys(1) = ut;

模型状态方程的s-function函数建立

function [sys,x0,str,ts] = plant(t, x, u, flag) switch flag, case 0, [sys,x0,str,ts]=mdlInitializeSizes;  % 调用初始化子函数 case 1, sys=mdlDerivatives(t,x,u);   %调用计算微分子函数 case 2, sys=[]; case 3, sys=mdlOutputs(t,x,u);    %计算输出子函数 case 4, sys=[];   %计算下一仿真时刻子函数 case 9, sys=[];    %终止仿真子函数 otherwise DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); end function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes   %初始化子函数 sizes = simsizes; sizes.NumContStates = 2;  %连续状态变量个数 sizes.NumDiscStates = 0;  %离散状态变量个数 sizes.NumOutputs = 2;  %输出变量个数 sizes.NumInputs = 1;   %输入变量个数 sizes.DirFeedthrough = 0;   %输入信号是否在输出端出现 sizes.NumSampleTimes = 1;   % at least one sample time is needed sys = simsizes(sizes); x0 = [0, 0];   %初始值 str = []; ts = [0 0];   %[0 0]用于连续系统,[-1 0]表示继承其前的采样时间设置 simStateCompliance = 'UnknownSimState'; function sys = mdlDerivatives(t, x, u)    %计算微分子函数 J = 2; dt = sin(t); ut = u(1); sys(1) = x(2); sys(2) = 1/J*(ut+dt); function sys=mdlOutputs(t,x,u)   %计算输出子函数 sys(1) = x(1); sys(2) = x(2);

simulink模型

最终图像

蓝色是追踪角度thea曲线

黄色是sin曲线

橘红色是dthea曲线

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM