1.前言

最近开始了对滑模控制的学习,使用的书籍为刘金琨的《滑膜变结构控制MATLAB仿真》,今天是按照书上的例程做了一个简单的自适应控制系统。

2.程序解析

此程序中,电机控制系统的动态模型为:

,其中,θ为电机的角位置,J为转动惯量,d(t)为干扰且满足,η为干扰上界,为角位置跟踪误差

定义跟踪误差函数,也就是滑模面函数s为:,当s=0时,有e和edot都为0,且是按照指数收敛:

也就是说当时间趋于∞时,误差将指数收敛到0,收敛速度取决于c,所以误差函数s的收敛性意味着位置跟踪误差e和速度跟踪误差e'的收敛性,也就是说:s为滑膜函数。

2.1.控制器代码

首先是控制器的S函数。控制器就是系统的输入控制量u:

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=[];    %终止仿真子函数otherwiseDAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));endfunction [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes   %初始化子函数sizes = simsizes;sizes.NumContStates  = 0;  %连续状态变量个数
sizes.NumDiscStates  = 0;  %离散状态变量个数
sizes.NumOutputs     = 1;  %输出变量个数
sizes.NumInputs      = 3;   %输入变量个数
sizes.DirFeedthrough = 1;   %输入信号是否在输出端出现
sizes.NumSampleTimes = 0;   % at least one sample time is neededsys = simsizes(sizes);
x0  = [];   %初始值
str = [];
ts  = [];   %[0 0]用于连续系统,[-1 0]表示继承其前的采样时间设置
simStateCompliance = 'UnknownSimState';function sys=mdlOutputs(t,x,u)   %计算输出子函数J = 2;
thd = u(1);
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-1/J*(k*s+xite*sign(s)));
sys(1) = ut;

因为控制器不涉及到复杂的微分运算,故只用在mdlOutputs中写控制输入u的代码

2.2.受控对象代码

本例中,受控对象为电机控制系统,,需要对这个微分方程进行描述,因为要用到θ、θ',虽然方程中有θ'',但是可以通过除以J得到θ''的表达式,故代码如下:

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=[];    %终止仿真子函数otherwiseDAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));endfunction [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 neededsys = 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);

3.仿真结果和Simulink注意事项

Simulink建立如下模型:

将微分方程算法换为定步长fixed step中的ode4!不然仿真超级慢!

具体分析可见:https://www.ilovematlab.cn/thread-260054-1-1.html

最后结果为:

系统最终能够跟踪阶跃信号

【Matlab】简单的滑模控制程序及Simulink仿真相关推荐

  1. 永磁直驱风力发电系统,MATLAB simiulink,滑模控制,永磁同步电机,直驱式风力发电

    永磁直驱风力发电系统,MATLAB simiulink,滑模控制,永磁同步电机,直驱式风力发电. 风力机才用MPPT算法,机侧变流器采用滑模控制转速外环,PI控制电流内环,网侧逆变器均采用PI控制. ...

  2. 利用MATLAB模糊控制器实现对水位高度调节SIMULINK仿真(隶属度7分级)

    A.理论分析与设计 (1)确定模糊控制器的输入.输出变量 模糊控制器的两个输入变量,分别选为液位偏差E(设定液位高度r-实测液位高度y)和液位偏差变化率EC,输出模糊变量为控制阀门开度U: (2)确定 ...

  3. Matlab基础学习笔记(五)—— Simulink仿真

    听万门的一个Matlab实践课做的笔记 知识结构 笔记链接(点我) 知识点比较零散记得比较概括,用幕布看可能更清晰一点 本节内容只是做个简单记录,具体使用某个库再进行具体学习 顺便放个邀请注册链接,可 ...

  4. matlab 软启动器,基于Matlab/Simulink的滑模软起动器仿真研究

    摘要:随着电动机的广泛使用,对电机起动的要求越来越高,对软起动装置也使用越来越多.滑模软起动器" title="滑模软起动器">滑模软起动器几种软起动方式的改变主要 ...

  5. 滑模控制入门与简单应用

    1.阅读书籍 ①<终端滑模控制理论及应用>张袅娜 第1章 (简单的滑模控制理论框架) ② <滑模变结构控制MATLAB仿真基本理论与设计方法(第3版)>刘金琨 第1-7章(理论 ...

  6. 滑模控制二阶系统实例(5mins理解入门,附带MATLAB实现)

    问题 设想一个在一维空间的物块,在其上施加一个力f,物块会运动: 显然这是一个二阶系统,选取状态变量 x 1 x_1 x1​为位移, x 2 x_2 x2​为速度,则有: x 1 ˙ = x 2 x ...

  7. stm32pid算法控制电机转速_论文推荐 | 基于全阶状态滑模观测器的混合永磁记忆电机磁链观测...

    点击"公众号首页-论文导读-微刊"或页面下端"阅读原文"可在线浏览文章全文,如果你喜欢本文,请分享到朋友圈.2020年第28卷第2期基础研究基本信息 作者: 姜 ...

  8. 整体撸一遍PMSM的滑模观测器(SMO)公式+模型+代码

    滑模的基本原理参照这一系列文章:  滑模系列文章链接: 永磁同步电机矢量控制到无速度传感器控制学习教程(PMSM)(一) 永磁同步电机矢量控制基础补充(五)--什么是低通滤波器? 永磁同步电机无速度传 ...

  9. [滑模控制器浅述] (5) 基于分层滑模的吊车控制

    [滑模控制器浅述] (5) 基于分层滑模的吊车控制 [滑模控制器浅述] (5) 基于分层滑模的吊车控制 1 前言 2 吊车动力学模型 3 分层滑模控制器设计 4 仿真 5 参考文献 [滑模控制器浅述] ...

最新文章

  1. 获取某个日期的当前周一的时间
  2. python手机版ios-iOS 项目中如何使用 Python
  3. SAP-采购订单交货成本抓取方法
  4. TensorFlow2-神经网络训练
  5. EF 拉姆达 linq if else (整理)
  6. 苹果应用上架,一些信息的勾选(2017年4月27日)
  7. C++:类对象的复制和赋值
  8. 拖得太久了 美运营商ATT取消三星折叠手机Galaxy Fold预购订单
  9. C语言 数组中删除指定字符
  10. Window操作系统注册表学习
  11. 转 Java多线程中Sleep与Wait的区别
  12. 查询解析MySQL_mysql内部查询过程详解
  13. linux系统如何更改输入法切换快捷键,linux中什么快捷键可实现中英文的切换
  14. 视频水印素材 md5修改
  15. 计算机二级显示用户不存在,计算机二级考试最常见的错误集合
  16. Steamwoks上传游戏及提交审核指南
  17. [含lw+源码等]微信小程序在线考试管理系统+后台管理系统[包运行成功]
  18. (二十三)Kotlin简单易学 基础语法-什么是函数式编程
  19. 一道3G门户的面试题
  20. IDM下载器的自定义设置

热门文章

  1. 冒泡排序python_冒是什么意思、发音和在线翻译 - 英语单词大全 - 911查询
  2. Oracle PL-SQL 的使用
  3. Stream使用技巧(1)------数据处理技巧
  4. Python的pyecharts做旭日图,太6了
  5. PR视频背景模板 6个创意炫酷动态短视频背景排版pr模板
  6. js基础面试题整理(包含ES5,ES6)
  7. 斑马无线打印服务器,斑马打印机网络中文打印实例(亲测可用)
  8. Mark-sweep GC
  9. 【iconfont图标】vue引入并使用阿里巴巴iconfont图标流程【uniapp引入iconfont真机APP不显示问题解决,移动端引入报错解决】
  10. 端午节节日PPT模板