VSC/SMC(二)——基于趋近律的滑模鲁棒控制(含程序模型)

目录

1.滑模控制设计步骤

2.鲁棒滑模控制器设计

2.1系统

2.2选取滑膜面

2.3定义跟踪误差

2.4计算控制律

3.simulink仿真分析

3.1利用S函数编写被控对象

3.2Simulink模型

 3.3结果分析 


1.滑模控制设计步骤

其实,滑模控制的设计控制器主要有三个步骤:

(1)选取滑模面Cx:c需要保证滑模面多项式为Hurwitz多项式,即保证滑模运动方程的特征根均位于复平面左半平面,所以可求特征根之后选取或者通过极点配置选取;x一般为状态变量或者误差。

(2)选取趋近律。

(3)使用Lyapunov函数分析证明V = 1/2*s^2 > 0,且V' = s*s'<0,一般是定义Lyapunov函数为V = 1/2*s^2,之后求导证明即可,详细推导证明过程可见本文。

本文学习的鲁棒滑模控制,实际上是在上篇文章基础之上有外界扰动后的抗扰动控制器设计,那么有外界干扰后,滑模控制器又该如何设计呢?跟着我一起来和刘金琨老师学习吧!

2.鲁棒滑模控制器设计

2.1系统

以上篇文章为基础加上外部的未知扰动,如下:

6ea02e2240234ed7851d7e25df6b3a70.png

2.2选取滑膜面

ffb74eb5255e4967895af97fa37c37f0.png

2.3定义跟踪误差

04747282a57543e0b302dc90a4cedc32.png

 其中:θd(t)为理想位置信号/跟踪信号。

2.4计算控制律

注意这里计算趋近律时,将扰动直接考虑了扰动d进入u,所以后面要对扰动进行上下界限制以调整设计的dc扰动调整项,以保证V' = 1/2*s*s' < 0。

282c3ee0b28f43668a5142949294dfd9.png

 联立指数趋近律s' = -ε*sign(s)-k*s,所以控制律为:

71fccadf1c434439b74032acdfc2cf6e.png

其中:dc为需要设计满足系统稳定性得有干扰的界相关的数 。

假设外界扰动dL≤d(t)≤dU,选取Lyapunov函数V = 1/2s*s’,V' = s*s'=s*(-ε*sign(s)-ks+dc-d) = -s*ε*sign(s)-k*s^2+s*dc-sd = -ε*|s|-k*s^2+s*(dc-d),要想V'<0,则需要s*(dc-d)<0,所以做出如下分析:

①当s < 0时,dc-d > 0,即dc > dU,要想滑动到切换面s,所以取dc = dU;

①当s > 0时,dc-d < 0,即dc < dL,要想滑动到切换面s,所以取dc = dL。

取d1 = (dU-dL)/2,d2 = (dU+dL)/2,联立求得dc = d2-d1*sign(s),证明完毕。

3.simulink仿真分析

本文选取扰动上界dU = 10,扰动下界dL = -10,外部扰动d(t) = 10*sin(pi*t)取理想信号θd(t) = sint(t),即跟踪该正弦曲线;选取被控对象状态变量为[θ θ’],初始状态为[-0.15 -0.15]

3.1利用S函数编写被控对象

程序如下:

function [sys,x0,str,ts,simStateCompliance] = Plant_2_2(t,x,u,flag)
switch flag,
 case 0,
    [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
  case 1,
    sys=mdlDerivatives(t,x,u);
  case 2,
    sys=mdlUpdate(t,x,u);
  case 3,
    sys=mdlOutputs(t,x,u);
  case 4,
    sys=mdlGetTimeOfNextVarHit(t,x,u);
  case 9,
    sys=mdlTerminate(t,x,u);
  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      = 2;%扰动d(t)+控制u
sizes.DirFeedthrough = 0;%注无直接馈通关系
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
x0  = [-0.15;-0.15];%设定状态变量初值
str = [];
ts  = [0 0];

simStateCompliance = 'UnknownSimState';

function sys=mdlDerivatives(t,x,u)
theta = x(1);%θ
dtheta = x(2);%θ'
ddtheta = -25*dtheta+133*u(2)+u(1);%θ''
sys = [dtheta;ddtheta];%dx 
function sys=mdlUpdate(t,x,u)

sys = [];

function sys=mdlOutputs(t,x,u)

sys = x;

function sys=mdlGetTimeOfNextVarHit(t,x,u)

sampleTime = 1;    %  Example, set the next hit to be one second later.
sys = t + sampleTime;

function sys=mdlTerminate(t,x,u)

sys = [];

3.2Simulink模型

扰动d(t) = 10sin(Πt),建立如下模型:

f307509191004530a2495d4731c5435d.png

 3.3结果分析 

ab2c7a78a2634a81a833cfdf2cd6f792.png

 角度θ 

7368fe34ae82418d9a7f24ee1e07783c.png

  角速度θ'

f0c3efd648e84cc08f277e83da39c0d8.png

 误差e 

6e7f7ede95224028ad7a17ec87edd5d3.png

误差变化率de 

1d4d6db2d13e42e7971904a5f6854076.png

 控制输入u 

结论:从角位置可见,该滑模控制器能实现较好的追踪效果;从角速度、误差和误差变化率看,有较小的抖动出现,但在扰动下基本能够通过控制力消除误差,体现了滑膜控制的鲁棒性;但是从控制输入看,出现了很糟糕的抖动。实际上,滑膜控制具有强鲁棒性的特点,所以一直被广泛使用,但抖动问题时滑膜控制所致命的地方,所以后续会提出改进的滑模控制设计

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

  • 6
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mr. 邹

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

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

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

打赏作者

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

抵扣说明:

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

余额充值