当前位置: 首页 > news >正文

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

目录

  • 一、建立系统数学模型
  • 二、控制器设计
    • 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 > Dy = 1;
elseif s < -Dy = -1;
elsey = k * s;
end

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

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

相关文章:

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

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

MySQL处理引擎

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种都 使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的、不同的功能和能力。通过 选择不同的技术&#xff0c;能够获得额外的速度或者功能&#xff0c;从而改善应用的整体性能。 这些不同的技…...

HTTP 方法详解:GET、POST 和 PUT

HTTP 方法详解&#xff1a;GET、POST 和 PUT HTTP 方法&#xff08;GET、POST、PUT&#xff09;用于客户端和服务器之间的通信。它们在输入、输出和传输内容上有显著区别。 1. GET 方法 – 获取资源 用途&#xff1a;从服务器获取资源。 输入&#xff1a; 请求行&#xff…...

被工信部认可的开源软件治理解决方案

近日&#xff0c;工信部网络安全产业发展中心正式发布了“2023年信息技术应用创新解决方案”&#xff0c;开源网安凭借“基于SCA技术开源软件治理解决方案”顺利入选&#xff0c;成为经工信部认可的优秀解决方案&#xff0c;这是开源网安连续两届荣获此荣誉。 工业和信息化部网…...

文件包含漏洞--pyload

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.PHP伪协议利用 php://协议 php://filter &#xff1a;用于在读取作用和写入文件时进行过滤和转换操作。 作用1&#xff1a;利用base64编码过滤器读取源码 通常利用文件包含执行php://filte…...

C++包管理之`vcpkg`简介

文章目录 工程文件安装vcpkg安装fmt库安装全局的库安装仅该工程使用的库 在CMake中使用vcpkg通过CMAKE_TOOLCHAIN_FILE使用vcpkg通过CMakePresets.json使用vcpkg 在C开发中&#xff0c;我们经常会使用一些第三方库&#xff0c;比如说Boost、fmt、spdlog等等。这些库的安装和使用…...

【机器学习】必会核函数之:高斯核函数

高斯核函数 1、引言2、高斯核函数2.1 定义2.2 核心原理2.3 应用场景2.4 代码示例3、总结1、引言 在机器学习和数据科学领域,核方法 ( K e r n e l M e t h o d s ) (Kernel Methods) (Kerne...

51单片机和STM32区别

51单片机和 STM32 区别 51单片机和 STM32 是两种常见的微控制器&#xff0c;它们在架构、性能、外设接口、功耗和开发环境等方面有所不同。 1. 架构差异 51单片机基于传统的哈佛总线结构&#xff0c;采用 CISC 架构&#xff0c;而 STM32 基于 ARM Cortex-M 系列的32位处理器核…...

Python 伪随机数生成器

random.sample() 函数原理 在 Python 中&#xff0c;随机数的生成通常依赖于伪随机数生成器&#xff08;PRNG&#xff09;。random 模块提供了一个易于使用的接口来生成伪随机数。以下是 random 模块中随机数生成的基本原理和方法&#xff1a; 伪随机数生成器&#xff08;PRN…...

7.5 grafana上导入模板看图并讲解告警

本节重点介绍 : blackbox_exporter grafana大盘导入和查看告警配置讲解 grafana大盘 grafana 上导入 blackbox_exporter dashboard 地址 https://grafana.com/grafana/dashboards/13659举例图片http总览图value_mapping设置 展示设置阈值&#xff0c;展示不同背景色 告警配…...

BUG解决(vue3+echart报错):Cannot read properties of undefined (reading ‘type‘)

这是 vue3echart5 遇到的报错&#xff1a;Cannot read properties of undefined (reading ‘type‘) 这个问题需要搞清楚两个关键方法&#xff1a; toRaw&#xff1a; 作用&#xff1a;将一个由reactive生成的响应式对象转为普通对象。 使用场景&#xff1a; 用于读取响应式…...

VSCode+git的gitee仓库搭建

​ 在此之前你已经在gitee创建好了账号&#xff0c;并新建了一个仓库。 1. 安装 Visual Studio Code Visual Studio Code 是编辑 Markdown 和站点配置文件的基础&#xff0c;以下将其简称为 VSCode&#xff0c;你可以在它的 官方网站 下载到它。 如若不理解各个版本之间的区别…...

Golang | Leetcode Golang题解之第297题二叉树的序列化与反序列化

题目&#xff1a; 题解&#xff1a; type Codec struct{}func Constructor() (_ Codec) {return }func (c Codec) serialize(root *TreeNode) string {if root nil {return "X"}left : "(" c.serialize(root.Left) ")"right : "("…...

交叉熵和MSE的区别

交叉熵 交叉熵损失通常用于分类问题&#xff0c;尤其是二分类和多分类问题。它度量的是预测概率分布与真实标签概率分布之间的差异。 适用于分类问题。常用于神经网络中的Softmax层之后作为损失函数。适用于二分类、多分类中的模型优化&#xff08;如图像分类、文本分类等&am…...

具身智能又进一步!卡内基梅隆Meta苏黎世联邦实现虚拟人超灵活抓取

论文链接&#xff1a;https://arxiv.org/pdf/2407.11385 github链接&#xff1a;https://www.zhengyiluo.com/Omnigrasp-Site/ 亮点直击 本文设计了一种灵巧且通用的人形机器人运动表示&#xff0c;这显著提高了样本效率&#xff0c;并使得通过简单而有效的状态和奖励设计来学习…...

嘉盛:货币政策走向与市场预期

在当前经济背景下&#xff0c;美联储的政策决策备受关注。尽管本周的会议可能不会带来实质性利率变动&#xff0c;但其后的走向可能对未来产生深远影响。市场预期与政策走向 随着近几个月大量通胀数据公布&#xff0c;市场普遍预计&#xff0c;美联储将为即将到来的降息措施奠定…...

[C#]基于wpf实现的一百多种音色的Midi键盘软件

键盘 音色库 源码地址&#xff1a;https://download.csdn.net/download/FL1623863129/89599322...

关于香橙派系统烧录,1.1.8或者1.1.10两个版本都无法启动Orangepi5

先执行 git clone https://github.com/orangepi-xunlong/orangepi-build.gitgit log 默认会显示较新的提交记录。如果你需要查看更多的提交记录&#xff0c;可以使用以下方法&#xff1a; git log --oneline --graph --all这会以简洁的方式显示所有分支的提交记录&#xff0c…...

深入解析Python `httpx`源码,探索现代HTTP客户端的秘密!

&#x1f538; 第一部分&#xff1a;httpx请求入口 我们从最常用的入口开始&#xff0c;看看如何使用httpx库发送HTTP请求。通常&#xff0c;我们会使用 httpx.get() 或 httpx.post() 方法&#xff1a; import httpxresponse httpx.get(https://example.com) print(response…...

python爬虫【3】—— 爬虫反反爬

一、常见的反爬手段和解决方法 二、splash 介绍与安装 三、验证码识别 图片验证码的处理方案 手动输入(input) 这种方法仅限于登录一次就可持续使用的情况图像识别引擎解析 使用光学识别引擎处理图片中的数据&#xff0c;目前常用于图片数据提取&#xff0c;较少用于验证码…...

远程技术面试的潜规则:摄像头角度可能影响你的录用

一、摄像头角度&#xff1a;被忽视的专业细节在软件测试的工作中&#xff0c;我们习惯用严谨的态度去排查代码里的每一个bug&#xff0c;用精准的测试用例去验证产品的每一项功能。但在远程技术面试这个特殊的“测试场景”里&#xff0c;很多人却忽略了一个看似无关紧要&#x…...

嵌入式工程师核心素养:从测试到系统构建的全链路能力模型

1. 从“明星评选”看嵌入式工程师的成长路径与价值塑造最近看到一篇关于某公司内部“品质与服务创建活动”的报道&#xff0c;评选了四位明星工程师。这让我感触颇深。在嵌入式这个行当里摸爬滚打了十几年&#xff0c;我见过太多技术扎实但默默无闻的同行&#xff0c;也见过一些…...

自动化文件管理:基于Python的网盘批量处理方案

自动化文件管理&#xff1a;基于Python的网盘批量处理方案 【免费下载链接】BaiduPanFilesTransfers 百度网盘批量转存、分享和检测工具 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduPanFilesTransfers 在数字资源日益丰富的时代&#xff0c;百度网盘用户面临着批…...

好用的山西GEO服务商

你可能已经感受到&#xff1a;当客户在AI大模型里问“山西哪家GEO优化公司靠谱&#xff1f;”、“中小企业如何用AI引流”时&#xff0c;你的企业信息根本搜不到。流量入口变了&#xff0c;传统SEO正在失效。如果能选对一家GEO服务商&#xff0c;就能在这个新战场里抢占先机。我…...

安卓上架权限弹窗

https://ask.dcloud.net.cn/article/41194 直接这个网站看&#xff0c;但是要注意&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;真机运行的时候&#xff0c;改了manifest.json的配置要重新打基座...

在Taotoken模型广场中根据任务需求挑选最合适的大模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Taotoken模型广场中根据任务需求挑选最合适的大模型 1. 模型广场&#xff1a;统一查看与筛选的起点 当我们需要为特定的开发任务…...

ChatGPT-web-midjourney-proxy 项目常见问题解决方案

ChatGPT-web-midjourney-proxy 项目常见问题解决方案 1. 项目基础介绍和主要编程语言 ChatGPT-web-midjourney-proxy 是一个开源项目&#xff0c;它基于 ChatGPT 和 Midjourney-proxy 技术构建&#xff0c;提供了丰富的文生图、图生文、文生视频等功能。该项目支持自定义 API k…...

家居用品展行业深度分析:格局、痛点与前景

家居用品展是家居产业的风向标与商贸核心枢纽&#xff0c;2026年行业正处于存量焕新、设计驱动、数智赋能的关键转型期。本文从发展现状、核心格局、痛点拆解、趋势机遇、前景预判五大维度&#xff0c;深度剖析家居用品展行业的底层逻辑与发展脉络&#xff0c;助力从业者把握行…...

AI行业4大神仙岗位,0基础也能拿下?薪资直逼200万!

文科生&#xff0c;能进AI行业吗&#xff1f; 毕业做了两年行政&#xff0c;现在想转行&#xff0c;是不是来不及了&#xff1f; 看到AI岗位都要写代码&#xff0c;我连Python都没碰过&#xff0c;是不是没戏了&#xff1f; … 想一想都是问题&#xff0c;做一做一定会有答案&a…...

软件许可优化,别被销售忽悠了,看看这几家到底谁管用

以前我们公司被Adobe审计过一次&#xff0c;赔了不少钱。之后老板让我专门研究软件许可优化这件事。市面上这几家都聊过、试过&#xff0c;我把真实感受跟你说说。先说你可能不太熟的&#xff1a;&#xff08;gofarlic&#xff09;这家是国内武汉的&#xff0c;一开始我也有点怀…...