滑模变结构控制仿真实例(s-function代码详解)

news2024/11/16 23:56:15

目录

  • 一、建立系统数学模型
  • 二、控制器设计
    • 1. 设计滑模面(切换面)
    • 2.设计控制器 u
    • 3. 稳定性证明
  • 三、 Matlab 仿真
    • 1. s-function 模型
    • 2. 主要代码
    • 3. 仿真结果(采用符号函数sign(s))
    • 4. 仿真结果(采用饱和函数sat(s))

一、建立系统数学模型

{ x ˙ 1 = x 2 x ˙ 2 = x 3 x ˙ 3 = x 1 + x 2 x 3 + u \begin{aligned} \left\{ \begin{array}{l} \dot{x}_1 = x_2 \\ \dot{x}_2 = x_3 \\ \dot{x}_3 = x_1 + x_2 x_3 + u \end{array} \right. \end{aligned} x˙1=x2x˙2=x3x˙3=x1+x2x3+u
该数学模型参考:通俗理解滑模变结构控制

二、控制器设计

设计滑模控制器需要满足以下条件:

  1. 稳定性条件:在s=0的滑模面上,状态是收敛的,即滑动模态存在;
  2. 可达性条件:在切换面s=0以外的运动点将于有限时间内到达切换面;
  3. 保证滑模运动的稳定性;
  4. 达到控制系统运动品质要求。

1. 设计滑模面(切换面)

s = x 1 + 2 x 2 + x 3 \begin{align*} s = x_1 + 2x_2+x_3 \end{align*} s=x1+2x2+x3

2.设计控制器 u

对滑模面函数求导得
s ˙ = x ˙ 1 + 2 x ˙ 2 + x ˙ 3 \dot{s} = \dot{x}_1+2\dot{x}_2+\dot{x}_3 s˙=x˙1+2x˙2+x˙3

将数学模型中状态变量表达式代入可得
s ˙ = x ˙ 1 + 2 x ˙ 2 + x ˙ 3 = x 2 + 2 x 3 + x 1 + x 2 x 3 + u = x 1 + x 2 + 2 x 3 + x 2 x 3 + u \begin{align*} \dot{s} &= \dot{x}_1+2\dot{x}_2+\dot{x}_3 \\ &=x_2+2x_3+x_1+x_2 x_3+u \\ &= x_1+x_2+2x_3+x_2 x_3 + u \end{align*} s˙=x˙1+2x˙2+x˙3=x2+2x3+x1+x2x3+u=x1+x2+2x3+x2x3+u

s ˙ \dot{s} s˙ = 趋近律, 采用指数趋近律 s ˙ = − s g n ( s ) − s \dot{s} = -sgn(s)-s s˙=sgn(s)s s g n ( s ) sgn(s) sgn(s)为符号函数)求得控制器 u u u
u = − s g n ( s ) − s − x 1 − x 2 − 2 x 3 − x 2 x 3 \begin{align*} u = -sgn(s) - s -x_1 -x_2 -2x_3-x_2 x_3 \end{align*} u=sgn(s)sx1x22x3x2x3

3. 稳定性证明

设计 L y a p u n v o Lyapunvo Lyapunvo函数 V = 1 2 s 2 V = \frac{1}{2}s^2 V=21s2 , 求得其导数 V ˙ = s s ˙ = − ∣ s ∣ − s 2 \dot{V} = s\dot{s} = -|s|-s^2 V˙=ss˙=ss2
由此可知,该 L y a p u n v o Lyapunvo Lyapunvo 函数的导数负定,系统渐进稳定, t → ∞ t \rightarrow \infty t 时, s → 0 s \rightarrow 0 s0。因此 x 1 , x 2 , x 3 x_1, x_2, x_3 x1,x2,x3都趋于 0 0 0

三、 Matlab 仿真

1. s-function 模型

在这里插入图片描述

2. 主要代码

仿真中,为避免与模板中的 u u u 冲突,将输入 u 用 control_u 替代。

pa = struct('c1',1, ...
            'c2',2);
  case 1,
    sys=mdlDerivatives(t,x,u,pa);
  case 3,
    sys=mdlOutputs(t,x,u,pa);
sizes.NumContStates  = 3; %3个连续状态变量
sizes.NumDiscStates  = 0; %input只有输出,没有输入,即没有自身状态
sizes.NumOutputs     = 4; %输出为:dx1,dx2,dx3,control_u
sizes.NumInputs      = 0; %输入个数为0
sizes.DirFeedthrough = 0; %输入不会直接影响输出。输出是仅仅由状态变量决定的
sizes.NumSampleTimes = 1;   % at least one sample time is needed
%状态方程的更新通过输入u 来计算新的状态值,然后输出这些状态值。
%这意味着输入u 不直接影响输出,而是通过状态更新来间接影响输出。
%所以 DirFeedthrough 应该设置为 0。
% 初始化状态变量
x0  = [3;0;0]; 
function sys=mdlDerivatives(t,x,u,pa)
c1 = pa.c1;
c2 = pa.c2;
x1 = x(1);
x2 = x(2);
x3 = x(3);
%滑模面
s = x3+c2*x2+c1*x1;
%控制输入
control_u = -sign(s)-s-x1-x2-2*x3-x2*x3;
%系统状态方程
dx1 = x2;
dx2 = x3;
dx3 = x1+x2*x3+control_u;
sys = [dx1;dx2;dx3];
%输出函数
function sys=mdlOutputs(t,x,u,pa)
c1 = pa.c1;
c2 = pa.c2;
x1 = x(1);
x2 = x(2);
x3 = x(3);
%滑模面
s = x3+c2*x2+c1*x1;
%控制输入
control_u = -sign(s)-s-x1-x2-2*x3-x2*x3;   %使用符号函数sign(s)
%control_u = -sat(s)-s-x1-x2-2*x3-x2*x3;     %使用饱和函数消除抖振(改进)
% 输出状态变量 x1, x2, x3 以及 control_u
sys = [x;control_u]; %或者sys = [x(1);x(2);x(3);control_u];

3. 仿真结果(采用符号函数sign(s))

在这里插入图片描述
使用符号函数的控制器u,会产生明显抖振,为了消除抖振,可以采用饱和函数来替代符号函数
即指数趋近律 s ˙ = − s g n ( s ) − s \dot{s} = -sgn(s)-s s˙=sgn(s)s 换为 s ˙ = − s a t ( s ) − s \dot{s} = -sat(s)-s s˙=sat(s)s
其中

s a t ( s ) = { 1 s > Δ k s ∣ s ∣ ≤ Δ , k = 1 / Δ − 1 s < − Δ sat(s)= \left\{ \begin{array}{ll} 1 & s > \Delta \\ ks & |s| \leq \Delta, k = 1/\Delta\\ -1 & s < -\Delta \end{array} \right. sat(s)= 1ks1s>ΔsΔk=1/Δs<Δ

取阈值 Δ = 1 \Delta = 1 Δ=1 , 改进后的控制器u为
u = − s a t ( s ) − s − x 1 − x 2 − 2 x 3 − x 2 x 3 \begin{align*} u = -sat(s) - s -x_1 -x_2 -2x_3 -x_2 x_3 \end{align*} u=sat(s)sx1x22x3x2x3

更改代码实现饱和函数控制器,只需把之前函数输出部分代码中 s i g n ( s ) sign(s) sign(s)改为 s a t ( s ) sat(s) sat(s),其余不变

function sys=mdlOutputs(t,x,u,pa)
c1 = pa.c1;
c2 = pa.c2;
x1 = x(1);
x2 = x(2);
x3 = x(3);
%滑模面
s = x3+c2*x2+c1*x1;
%控制输入
%control_u = -sign(s)-s-x1-x2-2*x3-x2*x3;   %使用符号函数sign(s)
control_u = -sat(s)-s-x1-x2-2*x3-x2*x3;     %使用饱和函数消除抖振

% 输出状态变量 x1, x2, x3 以及 control_u
sys = [x;control_u]; %或者sys = [x(1);x(2);x(3);control_u];

并在s-function函数最下方(即 m d l T e r m i n a t e ( t , x , u ) mdlTerminate(t,x,u) mdlTerminate(t,x,u)函数后面)添加 s a t ( s ) sat(s) sat(s)饱和函数的实现:

%function sys=mdlTerminate(t,x,u)
%sys = [];
% end mdlTerminate

% y = sat(s) 将输入 s 限制在 [-1, 1] 范围内,其中 k = 1 / D
function y = sat(s)   
D = 1; %设置阈值 D
k = 1 / D; %设置比例常数 k
if s > D
    y = 1;
elseif s < -D
    y = -1;
else
    y = k * s;
end

4. 仿真结果(采用饱和函数sat(s))

在这里插入图片描述
可以看出,抖振被有效消除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3中Cesium离线地图

最近的需求需要在vue3发布Cesium离线地图&#xff0c;之前openlayers我是在本地开启http server发布的地址可以使用&#xff0c;但是Cesium会报跨域错误&#xff0c;在网上查了一下&#xff0c;后用的是nginx代理&#xff0c;下面我记录一下自己的方法。 1.判断是否联网 expo…

Linux、Windows、Mac 系统安装 Nginx 及配置命令全攻略

一、Linux 系统安装 Nginx 及配置 &#xff08;一&#xff09;安装依赖包 在 Linux 系统中安装 Nginx 前&#xff0c;首先需要安装依赖包。以下是常见的依赖包安装命令&#xff1a; yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 若安装过程中出现错…

力扣高频SQL 50题(基础版)第三十二题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第三十二题1789.员工的直属部门题目说明实现过程准备数据实现方式结果截图 力扣高频SQL 50题&#xff08;基础版&#xff09;第三十二题 1789.员工的直属部门 题目说明 表&#xff1a;Employee ------------------…

Yolov8训练时正常,但验证时Cuda out of memory问题的解决方案(非完全解决)

【问题描述】 在Yolov8训练时&#xff0c;训练中正常&#xff0c;但每轮训练中做验证时报错Cuda out of memory&#xff1a; 【解决方案】 往下翻有具体的报错信息&#xff1a; 可知是显存爆了。在没有条件更换训练显卡的情况下&#xff0c;笔者尝试增加with torch.no_grad…

TiDB Hackathon 2024丨用 TiDB 构建未来的 AI 创新应用, 瓜分超 ¥210,000 奖金池!

2024 TiDB Future App Hackathon 来啦&#xff01;这是第八届 TiDB Hackathon&#xff0c;TiDB Hackathon 自举办以来&#xff0c;已累计参赛人数超过 3000 人 &#xff01;回顾去年的 TiDB Hackathon 赛事&#xff0c;有来自 88 个国家近 1500 名小伙伴参加&#xff0c;提交了…

IDEA某个项目被同事提交的代码导致不能进入Debug了,不是IDEA的问题。千万要避坑!

刚开始我发现突然不能进入debug了&#xff0c;打上去后就立马边灰了&#xff0c;我以为是我IDEA的问题&#xff0c;后来我换了其他项目都能正常进入debug. 而且后续&#xff0c;这个项目的其他同事也都不能进入debug了。 我就怀疑是项目中有人提交了代码导致的。 后来查…

必备插件自取 vue3.0 在vscode提升编码效率

一些vue开发中用到的插件&#xff0c;抽空总结一下&#xff0c;一是方便自己查看&#xff0c;另外是供其他需要的同学参考。在开发vue项目中&#xff0c;无论用什么编辑器一些好用的插件对我们来讲或许是必要的&#xff0c;因为好的插件既能方便我们编码&#xff0c;又能提升开…

文件解析漏洞--IIS--Vulhub

文件解析漏洞 一、IIS解析漏洞 用windowserver2003安装IIS测试 1.1 IIS6.X 方法一&#xff1a;目录解析 在网站下建立文件夹的名字为.asp/.asa的文件夹&#xff0c;其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。 1.txt文件里是asp文件的语法查看当前时间 方…

PSO求解函数最小值的MATLAB例程|MATLAB源代码

本篇文章适合PSO入门&#xff0c;进阶的可能会觉得太简单的。 目录 PSO例程作用运行结果代码函数解释 例程修改tips PSO Particle Swarm Optimization&#xff0c;粒子群优化算法&#xff0c;通过模拟鸟群或鱼群的行为来寻找最优解。在计算时通过对一群粒子的位置和速度进行迭…

Stable Diffusion Windows本地部署超详细教程(手动+自动+整合包三种方式)

2022年作为AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;时代的元年&#xff0c;各个领域的AIGC技术都有一个迅猛的发展&#xff0c;给工业界、学术界、投资界甚至竞赛界都注入了新的“AI活力”与“AI势能”。 其中在AI绘画领域&#xff0c;Stable D…

内部类练习题

代码&#xff1a; public static void main(String[] args) {A anew A();a.f(); } class A{private String name"A";public void f(){class B{private String name"B";public void show(){System.out.println("A姓名为&#xff1a;"A.this.name…

智慧校园实训管理:打造高效实验项目管理系统

在智慧校园的实训管理框架中&#xff0c;实验项目管理功能是培养学生实践能力和创新精神的关键一环。这一功能通过数字化手段&#xff0c;实现了实验项目的全流程管理&#xff0c;从项目设计、资源调配、过程监控到成果评估&#xff0c;确保了实训活动的高效开展和教学质量的稳…

LabVIEW打开的视频格式IMAQ AVI Open

LabVIEW打开的视频格式IMAQ AVI Open LabVIEW所支持的视频解码器是有限的&#xff0c;不能支持所有的视频解码器。如果解码器选择的不正确&#xff0c;会出现的错误。 错误提示信息如下&#xff1a; Error -1074396009 occurred at IMAQ AVI Open Possible reason(s): An inter…

人工智能大模型发展带来的风险挑战和对策

经过近70年的发展&#xff0c;人工智能技术发展经历了三次起伏&#xff0c;2022年以来&#xff0c;以ChatGPT、Sora等为代表的预训练大模型持续取得突破&#xff0c;推动着人工智能技术从感知向认识&#xff0c;从分析判断式向生成式&#xff0c;从专用向通用进入快速发展的新阶…

提供一个下载国外DockerHub镜像的办法

由于众所周知的一些问题&#xff0c;国内现在下载国外的镜像比较难。尤其是比较新的版本的时候。 比如阿里云加速器的镜像库&#xff0c;skywalking-oap的最新版本也只有8.9&#xff0c;有时候不满足业务需要。官网目前最新10.0.1。很多情况下我们需要9以上版本。 提供几个办…

tomcat使用问题:安装后无法访问localhost:8080

一、tomcat 未启动 所以http://localhost:8080打不开&#xff1b; 二、环境变量未配置 tomcat图标显示已启动&#xff0c;但http://localhost:8080还是打不开&#xff0c;可能是环境变量没有配置好&#xff0c;关于怎么配置环境变量网上到处都是,一下仅供参考&#xff1a; …

halcon_C#联合halcon打开摄像头

1. 创建halcon项目 -> 2.测试连接 -> 3. 在halcon中打开摄像头成功 -> 4. 插入代码 -> 5. 导出为.cs文件 6. 创建VS项目 -> 7.将action部分代码嵌入winform -> 8. 编写代码 -> // 导入HalconDotNet命名空间&#xff0c;这是用于Halcon图像处理的…

MySQL存储引擎和

MySQL存储引擎 在数据库中保存的是一张张有着千丝万缕关系的表&#xff0c;所以表设计的好坏&#xff0c;将直接影响着整个数据库。而在设计表的时候&#xff0c;最关注的一个问题是使用什么存储引擎。MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种…

redis面试(四)ZSet数据结构

Sorted Set 有序集合ZSet&#xff0c;但是有序集合的英文明明是sorted sets。 那这个“Z”代表什么意思&#xff0c;这点官网没有解释&#xff0c;但是gitHub上有人问过&#xff0c;作者是这样回答的 Hello. Z is as in XYZ, so the idea is, sets with another dimension: t…

Selenium与WebDriver:Errno 8 Exec格式错误的多种解决方案

概述 在使用Selenium和WebDriver进行网页自动化时&#xff0c;可能会遇到各种错误。其中一个常见问题是执行格式错误&#xff08;Errno 8 Exec format error&#xff09;。这个错误通常在运行ChromeDriver时出现&#xff0c;错误提示涉及路径中的某个文件&#xff0c;如THIRD_…