SMC/VSC(九)——控制器容错自适应滑模控制(含程序模型)

目录

前言

1.二阶系统

2.控制器设计 

 3.仿真分析

3.1S函数编写被控对象

3.2Simulink建模

 3.3结果分析

3.4结论

4.相轨迹绘制

4.1Scope模块导出设置

4.2模型导出数据设置

4.3MATLAB绘制相轨迹

4.3.1从MATLAB中导出高清图


前言

近期学习平滑切换问题挺烦恼的,想看看控制器切换的容错控制例子,文献复现不出来,感谢刘老师的书,直接有代码以及详细解释,下面将书上的一个例子自己推导一遍并进行复现。

个人理解所谓的容错控制就是当某个系统的执行器失效,有多种解决办法,如:启动备用执行器获取进行自适应补偿控制,但是启动的过程中,你不能有太大的抖动。这里给出的仿真例子是利用滑模控制进行自适应补偿。所谓自适应控制律,便是控制律随系统故障而发生变化,而且可以自适应重组,且这里由于是但输入系统,所以为了模拟控制器容错,采用在0.5s时控制器控制力突然变化,控制器的容错反应。

1.二阶系统

 如果控制发生部分损坏,即模型中的控制输入u=σu',0<σ<1。

2.控制器设计 

其实就是u = δuc,δ根据自己设计需求不同时间可设定不同值(由于这里是但输入,故0<δ<1),p^为自适应律,因为滑模面是随着误差变化的,故而控制律也是自适应变化的。

定义线性滑模面:

s=c*e+e'

定义Lyapunov函数:

求导,得: 

做如下定义: 

从而得证控制系统稳定。

 得到相应控制律和自适应为:

 3.仿真分析

3.1S函数编写被控对象

扰动d(t) = 10*sin(t),b = 0.1,指令位置xd = sin(t),初始状态设定为[0.5  0]。

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 3,
    sys=mdlOutputs(t,x,u);
case {2, 4, 9 }
    sys = [];
otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 2;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 2;
sizes.NumInputs      = 2;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 0;
sys=simsizes(sizes);
x0=[0.5 0];
str=[];
ts=[];
function sys=mdlDerivatives(t,x,u)
b = 0.1;
ut=u(2);%控制律
dt=u(1);%扰动
sys(1)=x(2);
sys(2)=b*ut+dt; 
function sys=mdlOutputs(t,x,u)
sys = x;

3.2Simulink建模

滑膜函数系数c = 15,控制器调节参数k = 5,η = 10,γ = 10,取控制器参数初值为p^ = 1,注意这里控制器存在一阶导数,所以有一个状态变量。

 3.3结果分析

 

 

 

3.4结论

由于此处为单输入,即只有一个控制器,所以为了模拟容错控制器的方法,在t = 0.5s时,改变了一下系数δ,即相当于控制器“抖动”了一下,但是只有由于自适应律,使得能够快速调节控制力平滑,达到所谓的自适应补偿容错控制。

4.相轨迹绘制

绘制相轨迹首先要将误差e和误差变化律de导出到工作区间,常见的用Scope或者to workspace模块导出,这里介绍Scope模块导出绘图的方法,to workspace模块也是类似的。

4.1Scope模块导出设置

4.2模型导出数据设置

注:

①除了上述图例显示bug外;

②我发现利用Scope导出的数据只能画一遍图,画完工作区的数据便自动清除了;

③而且利用Scope的Array导数数据只能导出单变量数据。

4.3MATLAB绘制相轨迹

注由于为了图例能够区别显示,所以留下了模型导数数据设置Time前面的✔,所以第二列才是数据。

%%%相轨迹
c = 15;
e = e(:,2);de = de(:,2);
plot(e,de,'r',e,-c*e,'k','linewidth',2)
xlabel('e');ylabel('de');
legend('相轨迹','滑膜面s=0');
title('相轨迹');

4.3.1从MATLAB中导出高清图

这里再介绍如何从MATLAB中导出高清图:

 之后复制图窗或者保存都可以导出高清出图。

如果有帮助,麻烦帮忙点个赞是我最大的分享动力,非常感谢!

注:仅为便利自己学习,错误在所难免,如有侵权,请联系删除,有兴趣的学者可以参考学习交流,谢谢!

  • 20
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
指数趋近律控制器是一种控制器设计方法,用于实现系统的快速趋近和稳定。它结合了指数趋近和等速趋近两个项,以实现快速趋近面并减小抖振。指数趋近项通过逐步减小趋近速度,缩短趋近时间,并使运动点在到达面时的速度较小。而等速趋近项则在接近零时,保证趋近速度为一个非零值,以确保在有限时间内到达面。通过增大指数趋近项的系数k和减小等速趋近项的系数ε,可以同时实现快速趋近和抖振的削弱。这种控制器设计方法在实际应用中被广泛使用。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [变结构控制(1)--指数趋近律](https://blog.csdn.net/LUNZO/article/details/124896004)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [VSC/SMC(一)——基于趋近律的控制(程序模型)](https://blog.csdn.net/weixin_50892810/article/details/126468161)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [控制几种趋近率的对比(hm-2)](https://blog.csdn.net/da_xian_yu/article/details/118945725)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr. 邹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值