【Matlab】简单的滑模控制程序及Simulink仿真
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仿真相关推荐
- 永磁直驱风力发电系统,MATLAB simiulink,滑模控制,永磁同步电机,直驱式风力发电
永磁直驱风力发电系统,MATLAB simiulink,滑模控制,永磁同步电机,直驱式风力发电. 风力机才用MPPT算法,机侧变流器采用滑模控制转速外环,PI控制电流内环,网侧逆变器均采用PI控制. ...
- 利用MATLAB模糊控制器实现对水位高度调节SIMULINK仿真(隶属度7分级)
A.理论分析与设计 (1)确定模糊控制器的输入.输出变量 模糊控制器的两个输入变量,分别选为液位偏差E(设定液位高度r-实测液位高度y)和液位偏差变化率EC,输出模糊变量为控制阀门开度U: (2)确定 ...
- Matlab基础学习笔记(五)—— Simulink仿真
听万门的一个Matlab实践课做的笔记 知识结构 笔记链接(点我) 知识点比较零散记得比较概括,用幕布看可能更清晰一点 本节内容只是做个简单记录,具体使用某个库再进行具体学习 顺便放个邀请注册链接,可 ...
- matlab 软启动器,基于Matlab/Simulink的滑模软起动器仿真研究
摘要:随着电动机的广泛使用,对电机起动的要求越来越高,对软起动装置也使用越来越多.滑模软起动器" title="滑模软起动器">滑模软起动器几种软起动方式的改变主要 ...
- 滑模控制入门与简单应用
1.阅读书籍 ①<终端滑模控制理论及应用>张袅娜 第1章 (简单的滑模控制理论框架) ② <滑模变结构控制MATLAB仿真基本理论与设计方法(第3版)>刘金琨 第1-7章(理论 ...
- 滑模控制二阶系统实例(5mins理解入门,附带MATLAB实现)
问题 设想一个在一维空间的物块,在其上施加一个力f,物块会运动: 显然这是一个二阶系统,选取状态变量 x 1 x_1 x1为位移, x 2 x_2 x2为速度,则有: x 1 ˙ = x 2 x ...
- stm32pid算法控制电机转速_论文推荐 | 基于全阶状态滑模观测器的混合永磁记忆电机磁链观测...
点击"公众号首页-论文导读-微刊"或页面下端"阅读原文"可在线浏览文章全文,如果你喜欢本文,请分享到朋友圈.2020年第28卷第2期基础研究基本信息 作者: 姜 ...
- 整体撸一遍PMSM的滑模观测器(SMO)公式+模型+代码
滑模的基本原理参照这一系列文章: 滑模系列文章链接: 永磁同步电机矢量控制到无速度传感器控制学习教程(PMSM)(一) 永磁同步电机矢量控制基础补充(五)--什么是低通滤波器? 永磁同步电机无速度传 ...
- [滑模控制器浅述] (5) 基于分层滑模的吊车控制
[滑模控制器浅述] (5) 基于分层滑模的吊车控制 [滑模控制器浅述] (5) 基于分层滑模的吊车控制 1 前言 2 吊车动力学模型 3 分层滑模控制器设计 4 仿真 5 参考文献 [滑模控制器浅述] ...
最新文章
- 获取某个日期的当前周一的时间
- python手机版ios-iOS 项目中如何使用 Python
- SAP-采购订单交货成本抓取方法
- TensorFlow2-神经网络训练
- EF 拉姆达 linq if else (整理)
- 苹果应用上架,一些信息的勾选(2017年4月27日)
- C++:类对象的复制和赋值
- 拖得太久了 美运营商ATT取消三星折叠手机Galaxy Fold预购订单
- C语言 数组中删除指定字符
- Window操作系统注册表学习
- 转 Java多线程中Sleep与Wait的区别
- 查询解析MySQL_mysql内部查询过程详解
- linux系统如何更改输入法切换快捷键,linux中什么快捷键可实现中英文的切换
- 视频水印素材 md5修改
- 计算机二级显示用户不存在,计算机二级考试最常见的错误集合
- Steamwoks上传游戏及提交审核指南
- [含lw+源码等]微信小程序在线考试管理系统+后台管理系统[包运行成功]
- (二十三)Kotlin简单易学 基础语法-什么是函数式编程
- 一道3G门户的面试题
- IDM下载器的自定义设置
热门文章
- 冒泡排序python_冒是什么意思、发音和在线翻译 - 英语单词大全 - 911查询
- Oracle PL-SQL 的使用
- Stream使用技巧(1)------数据处理技巧
- Python的pyecharts做旭日图,太6了
- PR视频背景模板 6个创意炫酷动态短视频背景排版pr模板
- js基础面试题整理(包含ES5,ES6)
- 斑马无线打印服务器,斑马打印机网络中文打印实例(亲测可用)
- Mark-sweep GC
- 【iconfont图标】vue引入并使用阿里巴巴iconfont图标流程【uniapp引入iconfont真机APP不显示问题解决,移动端引入报错解决】
- 端午节节日PPT模板