VSC/SMC(五)——基于参考模型的滑模控制

目录

1.被控模型和参考模型

2.控制律推导

 3.仿真分析

3.1s函数编写被控对象

3.2s函数编写控制器

3.3仿真结果

4.学习问题


1.被控模型和参考模型

顾名思义,首先我们要有参考模型,以二阶为例,参考模型如下:

被控二阶系统:

其中,d(t)为外部扰动,且|d(t)| ≤ D。

2.控制律推导

①定义跟踪误差e = y-ym,设计滑模面/滑模函数为:s = e'+c*e,则s' = e''+c*e';

②设滑模趋近律为s';

③将系统参数代入滑模导函数中,并联立滑模函数导数和趋近律,即

s' = e''+c*e' = (y''-ym'')+c*e'=(a*y'+b*u+d-(am*ym'+bm*r))+c*e';

所以:u = [s'-c*e'-d+(am*ym'+bm*r)-a*y']/b,若趋近律取为等速趋近律,即s' = -η*sign(s),则

u = [-η*sign(s)-c*e'-d+(am*ym'+bm*r)-a*y']/b = [-η-c*|e'|-d+|am*ym'|+|bm*r|-|a*y'|]*sign(s)/b,因为

d ≤  D,不妨取d = D,则u = [-η-c*|e'|-D+|am*ym'|+|bm*r|-|a*y'|]*sign(s)/b

怎么推导和书上给的控制律不一样?加号那里符号有差别?

④使用Lyapunov函数证明闭环系统稳定性:

取Lyapunov函数V = 1/2*s^2

 3.仿真分析

3.1s函数编写被控对象

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 3,
    sys=mdlOutputs(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;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 2;
sizes.NumInputs      = 1;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [1.5;0];
str = [];
ts = [0 0];

function sys=mdlDerivatives(t,x,u)
a=25;
b=133;

sys(1)=x(2);
sys(2)=-a*x(2)+b*u+10*sin(t);
function sys=mdlOutputs(t,x,u)
sys(1)=x(1);
sys(2)=x(2);

3.2s函数编写控制器

function [sys,x0,str,ts] = spacemodel(t,x,u,flag)
switch flag,
case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
case 3,
    sys=mdlOutputs(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  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 4;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0  = [];
str = [];
ts  = [0 0];
function sys=mdlOutputs(t,x,u)
a=25;b=133;
am=20;bm=100;
D=10;
c=10;
ym=u(1);y=u(3);
dym=u(2);dy=u(4);

e=y-ym;
de=dy-dym;
s=c*e+de;

r=sin(pi*t);
xite=0.02;

wt=1/b*(-c*abs(de)-abs(bm*r)-D-xite-abs(am*dym)-abs(a*dy));

M=2;
if M==1
    ut=wt*sign(s);
elseif M==2
    delta=0.02;
    if s>delta
        sats=1;
    elseif abs(s)<=delta
        sats=s/delta;
    elseif s<-delta
        sats=-1;
    end
    ut=wt*sats;
end
% ut = 1/b*(am*dym-bm*r-c*de-a*dy-(D+xite)*sign(s));%为什么要加绝对值?
sys(1)=ut;

3.3仿真结果

4.学习问题

书中推导为什么加绝对值?但是如果不加,追踪效果不佳,我的推导出来是这样:

并且也能满足Lyapunov稳定证明条件。

注:仅为便利自己学习,错误在所难免,如有侵权,请联系删除,有兴趣的学者可以参考学习交流,谢谢!


 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr. 邹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值