结合:【Matlab】简单的滑模控制程序及Simulink仿真本片文章观看,此篇文章是在这篇文章的基础上进行修改的

输出u的推导过程

如果不明白控制量输出u的推到过成请看:【控制理论】滑模控制最强解析这篇文章

根据推到结果写s—function函数

控制器的s-function

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

模型状态方程的s-function函数建立

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=[]; %终止仿真子函数
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 = 1; %输入变量个数
sizes.DirFeedthrough = 0; %输入信号是否在输出端出现
sizes.NumSampleTimes = 1; % at least one sample time is needed sys = 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);

simulink模型

最终图像

蓝色是追踪角度thea曲线

黄色是sin曲线

橘红色是dthea曲线

使用滑模控制对sin(t)曲线追踪的更多相关文章

  1. 车辆跟随滑模控制的python实现

    上一篇文章一个汽车跟踪问题的滑模控制实例,已经从理论上证明了可以使用滑模变结构控制策略来解决汽车跟踪问题. 下面分别采用指数趋近律.等速趋近律.准滑模控制的方法完成车辆跟随问题的仿真 import m ...

  2. 【Matlab】简单的滑模控制程序及Simulink仿真

    文章: [控制理论]滑模控制最强解析 滑模控制程序及Simulink仿真 这篇文章仿真和输出U的推到有些问题,博主根据此篇文章进行修改进行对sin(t)曲线的追踪(使用滑模控制) 使用滑模控制对sin ...

  3. 控制CUP占用率曲线

    在<编程之美>上看过一道面试题就是要求:输出cup占用率的曲线图 今天看到了一篇文章就试试看看: #include <iostream> #include <cmath& ...

  4. 控制CPU占用率曲线

    编程之美的第一个问题,我的机器是双核的,用文中的代码,得到的曲线波动比较大额,受其他进程的影响比较大.文中提到10ms接近windows的调度时间片,如果选得太小,会造成线程被频繁唤醒和挂起,造成内核 ...

  5. TCP/IP详细说明--滑模、拥塞窗口、慢启动、Negle算法

    TCP的数据流大致能够分为两类,交互数据流与成块的数据流. 交互数据流就是发送控制命令的数据流.比方relogin,telnet.ftp命令等等.成块数据流是用来发送数据的包,网络上大部分的TCP包都 ...

  6. 编程之美读书笔记1.1——让CPU占用率曲线听你的指挥

    http://blog.csdn.net/pipisorry/article/details/36189155 <strong><span style="font-size ...

  7. STM32控制永磁同步电机 | FOC电机控制算法概述

    1. FOC基本概念 参考:https://www.sohu.com/a/432103720_120929980 FOC(field-oriented control)为磁场导向控制,又称为矢量控制( ...

  8. Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解

    前言:  虽然本文标题的有点标题党的感觉,但无论如何,通过这篇文章的学习以及你自己的实践认知,写个简单的滑屏小 Demo还是just so so的. 友情提示: 在继续往下面读之前,希望您对以下知识点 ...

  9. Android中滑屏实现----触摸滑屏以及Scroller类详解 .

    转:http://blog.csdn.net/qinjuning/article/details/7419207 知识点一:  关于scrollTo()和scrollBy()以及偏移坐标的设置/取值问 ...

随机推荐

  1. HTML学习如何布局

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>菜鸟 ...

  2. hive从入门到放弃(一)——初识hive

    之前更完了<Kafka从入门到放弃>系列文章,本人决定开新坑--hive从入门到放弃,今天先认识一下hive. 没看过 Kafka 系列的朋友可以点此传送阅读: <Kafka从入门到 ...

  3. think php 未登录,禁止访问页面 + 退出登录

    1.首先在Local创建一个基类控制器 D:\PHP\phpstudy_pro\WWW\1906A\pyg>php think make:controller goods/Base --plai ...

  4. 理解 Events Loop 宏任务微任务

    在 JavaScript 中,任务被分为两种,一种宏任务(MacroTask),一种叫微任务(MicroTask). MacroTask(宏任务) script全部代码.setTimeout.setI ...

  5. 【数据库】优化SQL语言

    第1章数据模型设计 第1条:确保所有表都有主键 [1]当表缺少主键时,会出现各种问题,所有表都必须有一列(或多列)设置为主键. [2]主键应当具备的特征 唯一性,值非空,不可变,尽可能简单 [3]不要 ...

  6. VTK数据拓扑结构、几何结构和属性数据

    读取到VTK数据后,将数据组织起来并添加属性值. 示例: #include <vtkSmartPointer.h> #include <vtkPoints.h> #includ ...

  7. java反射之java 泛型的本质

    1.泛型 反射API用来生成在当前JAVA虚拟机中的类.接口或者对象的信息.Class类:反射的核心类,可以获取类的属性,方法等内容信息.Field类:Java.lang.reflect.表示类的属性 ...

  8. 【基础】工作中常用的linux命令,经常会被面试官问到

    前言 面试经常会问到一些Linux操作命令,下面就工作中常用的和面试问的频率较高的命令做详细描述. 常用命令 修改密码:passwd 用户名 切换用户名:su 用户名 查看当前路径:pwd 调整路径: ...

  9. For循环案例练习一基础版

    输出1-10之间的数据 1 public class LX1 { 2 public static void main(String[] args) { 3 for (int x=1;x<=10; ...

  10. WinCE知识介绍

    学习WinCE基本开发的步骤: 1.了解WinCE发展史: 2.WinCE开发环境搭建:[软件工具+插件] 3.简单案例: 参考:http://blog.csdn.net/educast/articl ...