滑模变结构控制--刘金琨学习

matlab仿真

上述仿真按照书上例子所作采用了s function模块、mux模块、scope模块

 

 两者的命名要对应才能调用

 chap1_1input模块代码

function [sys,x0,str,ts] = spacemodel(t,x,u,flag)
switch flag,
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
  case 1,
    sys=mdlDerivatives(t,x,u);
  case 3,%%因为是连续系统所以flag只用到0、1、3,且flag值随着仿真过程自动变化
    sys=mdlOutputs(t,x,u);
  case {2,4,9}
    sys=[];
  otherwise
    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;%定义一个输出
sizes.NumInputs      = 0;
sizes.DirFeedthrough = 1;%输入与输出有直接联系
sizes.NumSampleTimes = 0;  
sys = simsizes(sizes);
x0  = [];
str = [];
ts  = [];
function sys=mdlOutputs(t,x,u)
thd = 1.0;%设置输出即目标角度为1
sys(1) = thd;

且上述input代码表示无输入单输出,输出为目标角度

 chap1_1ctrl模块代码

function [sys,x0,str,ts] = spacemodel(t,x,u,flag)
switch flag,
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
  case 1,
    sys=mdlDerivatives(t,x,u);
  case 3,
    sys=mdlOutputs(t,x,u);
  case {2,4,9}
    sys=[];
  otherwise
    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;%定义一个输出
sizes.NumInputs      = 3;%定义三个输入
sizes.DirFeedthrough = 1;%输入与输出直接相关
sizes.NumSampleTimes = 0;  
sys = simsizes(sizes);
x0  = [];
str = [];
ts  = [];
function sys=mdlOutputs(t,x,u)
J = 2;%定义转动惯量为2
thd = u(1);%输入1为目标角度
th = u(2);%输入2为实际角度
dth = u(3);%输入3为实际角度的微分

e = th - thd;%e为实际角度与目标角度的差值
de = dth;%对差值求导
c = 10;%滑模控制参数
s = c*e + de;%滑模面函数
xite = 1.1;%趋近律参数

k = 0;%趋近律参数
ut = J*(-c*dth-1/J*(k*s+xite*sign(s)));%滑模控制律

sys(1) = ut;%输出滑模控制律

ctrl模块代码为三输入单输出,输入为实际角度、实际角度的微分、目标角度、输出为滑模控制律的控制输入

 chap1_1plant模块代码

function [sys,x0,str,ts] = spacemodel(t,x,u,flag)
switch flag,
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
  case 1,
    sys=mdlDerivatives(t,x,u);
  case 3,
    sys=mdlOutputs(t,x,u);
  case {2,4,9}
    sys=[];
  otherwise
    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 2;%设定两个连续状态变量
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 sys=mdlDerivatives(t,x,u)
J = 2;%转动惯量设置为2
dt = sin(t);%扰动设为正弦函数
ut = u(1);%输入为滑模控制律的控制输入
sys(1) = x(2);%表示x(1) = 角度,x(1)的导数为x(2)等于角速度,
sys(2) = 1/J*(ut+dt);%x(2)的导数为角加速度,即为电机的动态模型方程转化而来
function sys=mdlOutputs(t,x,u)
sys(1) = x(1);%输出状态变量1即角度
sys(2) = x(2);%输出状态变量2即角速度

plant模块代码为单输入双输出,其中输入为滑模控制律的控制输入,输出为角度和角速度

当k = 0时

当k = 10时

 逻辑我认为是在input模块输入目标角度,在ctrl模块设计滑模面函数和滑模控制律,在plant模块进行模拟电机系统,给系统一个输入,输出角度与角速度

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
滑模变结构控制是一种强鲁棒性的控制方法,能够在存在参数变化和外部扰动的情况下保持系统良好的控制性能。在Matlab中,可以利用Simulink进行滑模变结构控制仿真。 首先,在Matlab的Simulink环境中搭建系统模型,包括被控对象、滑模控制器、信号比较器和控制输入等模块。可以使用基本的连续或离散信号模块来表示系统的输入、输出等信号。被控对象可以根据实际应用选择不同的模型,如连续时间或离散时间系统。 然后,在滑模控制器模块中,可以采用理想滑模控制或者超滑模控制的设计方法。可以使用Sum模块计算系统输出和滑模控制器的输出之间的差值,然后通过比例、积分和微分环节来设计滑模控制器的输出信号。滑模控制器的输出信号可以通过Gain模块进行放大或衰减。 接着,在信号比较器模块中,将滑模控制器的输出信号与参考输入信号进行比较,得到误差信号。误差信号通过为系统提供控制输入信号,从而驱动系统按照期望的轨迹运行。 最后,通过调整滑模控制器的参数,如比例系数、积分时间和微分时间等,可以对系统的控制性能进行优化。可以使用Simulink中的Scope或Display模块来监测系统状态和控制效果,在仿真过程中进行参数调整和性能分析。 总结来说,滑模变结构控制Matlab仿真程序可以通过Simulink搭建系统模型,并利用滑模控制器、信号比较器和控制输入模块来实现,通过调整参数和监测系统状态,对系统的控制性能进行优化和评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值