目录

1.滑模控制设计步骤

2.鲁棒滑模控制器设计

2.1系统

2.2选取滑膜面

2.3定义跟踪误差

2.4计算控制律

3.simulink仿真分析

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

3.2利用S函数编写控制器

3.3Simulink模型

3.4结果分析


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系统

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

2.2选取滑膜面

2.3定义跟踪误差

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

2.4计算控制律

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

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

其中: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);otherwiseDAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));end
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizessizes = 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.2利用S函数编写控制器

程序如下:

function [sys,x0,str,ts,simStateCompliance] = Controller_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);otherwiseDAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));end
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizessizes = simsizes;
sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 4;
sizes.NumInputs      = 3;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
x0  = [];
str = [];
ts  = [0 0];simStateCompliance = 'UnknownSimState';function sys=mdlDerivatives(t,x,u)sys = [];
function sys=mdlUpdate(t,x,u)sys = [];function sys=mdlOutputs(t,x,u)
thetad = u(1);%理想位置信号θd
dthetad = cos(t);%θd'
ddthetad = -sin(t);%θd''
theta = u(2);
dtheta = u(3);
e = thetad-theta;%跟踪误差
de = dthetad-dtheta;c = 15;
epsilon = 5;k = 10;%调节参数s = c*e+de;%滑模面
dL = -10;dU = 10;%扰动上下界
d1 = (dU-dL)/2;d2 = (dU+dL)/2;
dc = d2-d1*sign(s);
ut = (epsilon*sign(s)+k*s+c*de+ddthetad+25*dtheta-dc)/133;%控制律/滑模控制器
sys = [ut;dthetad;e;de];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.3Simulink模型

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

3.4结果分析

角度θ

角速度θ'

误差e

误差变化率de

控制输入u

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

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

参考资料:

《滑模变结构控制MATLAB仿真:基本理论与设计方法第四版》---刘金琨

VSC/SMC(二)——基于趋近律的滑模鲁棒控制(白嫖程序模型)相关推荐

  1. 基于趋近律的滑模鲁棒控制simulink仿真

    滑模控制刚入门菜鸟一枚,找个实例练练手.参考刘金琨老师的<滑模变结构控制MATLAB仿真>中的基于趋近律的滑模鲁棒控制,对部分地方做出了修改. 考虑如下的被控对象:,其中,b>0,d ...

  2. matlab里面滑模控制示例,基于趋近律的滑模控制matlab仿真实例(12页)-原创力文档...

    基于趋近律的滑模控制 一.基于趋近律的滑模控制 1.控制器的设计 针对状态方程 (1) 采用趋近律的控制方式,控制律推导如下: (2) (3) 其中slaw为趋近律. 将状态方程式(1)代人(2)得 ...

  3. SMC/VSC(十一)——基于趋近律的离散滑模控制(白嫖程序模型)

    目录 前言 1.被控对象 2.控制器设计 3.m语言仿真分析 3.1出图结果 4.S函数仿真分析 4.1控制器设计 ​​4.2调参 4.3s函数编写被控对象 4.4s函数编写控制器 4.5仿真结果 前 ...

  4. VSC/SMC(一)——基于趋近律的滑模控制(含程序模型)

    目录 1.几种典型的趋近律 1.1等速趋近律 1.2指数趋近律 1.3幂次趋近律 1.4一般趋近律 2.控制器设计 2.1被控对象 2.2选取滑膜面 2.3定义跟踪误差 2.4计算控制律 3.Simu ...

  5. 基于扩张观测器(LESO)的滑模控制

    目录 前言 1 二阶系统LESO观测器设计 2.基于LESO的滑模控制器设计 ​​​​3. 仿真分析(普通高增益项) 3.1仿真模型 3.2仿真结果 3.3 总结 4. 仿真分析(优化后的高增益项) ...

  6. 基于积分型滑模控制器的永磁同步电机FOC 转速环基于积分型滑模面设计积分型滑模面结构控制器,采用指数趋近律来提高系统的动态性能

    基于积分型滑模控制器的永磁同步电机FOC 1.转速环基于积分型滑模面设计积分型滑模面结构控制器,采用指数趋近律来提高系统的动态性能. 2.提供算法对应的参考文献和仿真模型 ID:56486774298 ...

  7. VSC/SMC(十五)——基于模糊逼近的积分滑模控制

    目录 前言 1. 一阶系统积分滑模 1.1 一阶系统 1.2 控制器设计 1.2.1 选取积分滑模面 1.2.2 选取指数趋近律 1.2.3 Lypunov闭环系统稳定性证明 1.3 仿真分析 1.4 ...

  8. VSC/SMC(七)——基于高增益观测器的滑模控制(含程序模型)

    目录 前言 1.系统 2.观测器设计 3.控制器设计 4.MATLAB/Simulink仿真 4.1s函数编写被控对象 4.2Simulink模型 5结果分析 5.1出图结果 5.2结论 5.3调参 ...

  9. 基于神经网络的滑模鲁棒控制

    目录 前言 1.双关节机械手臂模型 2.神经网络自适应律设计 3. 滑模控制律设计 4. 仿真分析 4.1 仿真模型 4.2 仿真结果 4.3 小结 5 学习问题 前言 上一篇文章我介绍了神经网络补偿 ...

  10. 【模糊滑模】基于模糊切换增益调节的滑模控制

    前言:接上文,滑模控制主要的问题是抖振问题,接着我就学习了一下如何减小抖振,这里主要根据模糊控制来减小,看了一下模糊滑模控制,它是将符号函数的增益系数自适应,来减小滑模面附近的抖振,在这期间稍微有点感 ...

最新文章

  1. 国内github访问慢的解决方法
  2. java list主要实现_java容器-list的常用实现及原理
  3. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第2章-一类多智能体系统的领导-跟随一致性
  4. 安卓代码迁移:Program sh not found in PATH
  5. python输入数据爬取_python根据用户需求输入想爬取的内容及页数爬取图片方法详解...
  6. 图论 —— 图的连通性 —— Tarjan 求强连通分量
  7. 数字信号处理5:FIR滤波器设计
  8. CentOS7中解决root用户Operation not permitted
  9. IntelliJ IDEA如何去掉xml文件背景色
  10. c语言 格式化硬盘,在Windows 7上用c ++格式化硬盘(Formatting a hard disk in c++ on Windows 7)...
  11. matlab计算海洋浮力频率_海洋要素计算:潮汐调和分析
  12. solr配置索引库启动tomcat报错记录及解决
  13. 什么是指令集架构ISA【从处理器谈起】
  14. python爬虫实现批量下载百度图片
  15. 机房监控系统解说—防火墙篇
  16. uniapp获取通知栏内容 监听通知栏信息
  17. java.lang.IncompatibleClassChangeError 常见错误
  18. FANUC机器人的移动速度范围(仅供参考)
  19. Qt知识回顾(十)——图形视图、动画和状态机框架
  20. OS_PV操作_5.行人与机动车过路口问题

热门文章

  1. 【浅谈】日文的文本等出现乱码的情况以及解决办法
  2. 虚假信息成物联网“毒瘤”
  3. 完美卸载IE8/IE7安装IE6
  4. linux安装时找不到硬盘分区,在安装linux时出现找不到硬盘如何解决
  5. 攻防世界 WEB bilibili
  6. 理解MeasureSpec
  7. 【小盐巴学习笔记】—用Python批量爬取微博评论
  8. AdventureWorks数据库数据字典研究
  9. Basic 语言发展史
  10. 计算机病毒的命名规则