自抗扰控制(ADRC)仿真系统(matlab/simulink)的搭建

自抗扰控制(ADRC)仿真系统(matlab/simulink)的搭建一、现在关于自抗扰控制技术方面的研究已经比较成熟了,基本上了解结构以后都可以找到历程实现,今天简单总结一采用自抗扰控制的仿真系统搭建,不必畏惧,熟悉皆可达。1.首先自抗扰控制分为TD(跟踪微分器),非线性组合,ESO扩张状态观测器。而每部分的公式推导均可在《自抗扰控制技术-估计补偿不确定因素的控制技术》这本书中找到,很推荐,如果有些不了解的也可以搜索韩老师的论文看看。2.按照一般论文流程,先介绍整体结构,框图如下:其实结构也挺少,使用习惯以后,其实很好理解。3.接下来按照每个部分简单做一个介绍。

大家好,又见面了,我是你们的朋友全栈君。

一、现在关于自抗扰控制技术方面的研究已经比较成熟了,基本上熟悉结构以后都可以找到例子实现,今天以一个简单的例子来介绍自抗扰控制的仿真系统搭建,不必畏惧,熟悉皆可达。
1.首先自抗扰控制分为TD(跟踪微分器),非线性组合,ESO扩张状态观测器。而每部分的公式推导均可在《自抗扰控制技术-估计补偿不确定因素的控制技术》这本书中找到,很推荐,如果有些不了解的地方也可以搜索韩老师的论文看看。
在这里插入图片描述
2.按照一般论文流程,先介绍整体结构,框图如下:
在这里插入图片描述
其实结构也挺少,使用习惯以后,其实很好理解。
3.接下来按照每个部分简单做一个介绍。
(1)先介绍一下TD(跟踪微分器)部分。
首先我们需要知道为什么需要TD部分,我个人有些自己粗浅的理解。首先想想我们常见的输入信号,是不是个阶跃,一般如下图所示:
在这里插入图片描述
这里是输入为1的阶跃信号,其实这种信号很常见,数值大小我们暂时不看。例如智能车的位置信息,锅炉系统的设置温度,水流控制的流量大小。这种信号最大的缺点就是,系统开始工作的时候我们希望加快系统的响应速度,因此给一个较大的放大环节(可以想成传统PID的P控制器系数),而这个时候的输入减输出(e=r-y)就很大,在乘以P环节的比例系数会更大,在到达设定值之前也就是y<r之前这个偏差一直是朝着一边变化的,因此很容易出现超调。这就是超调和快速性之间的矛盾出现了。
因此你想不想让输入变成下图这样:
在这里插入图片描述
其中红色曲线为输入,绿色曲线为红色的微分信号。完成这个功能的过程就是TD部分的设计。公式如下:
在这里插入图片描述
上面有个fhan函数有点懵,别急下面马上有。fhan 是最速控制综合函数,当 在这里插入图片描述
时,有以下表达式:
在这里插入图片描述
不用担心,这上面这么多公式你只需要注意两个变量,r,h。其中r为速度因子,h表示步长(采样间隔,一般单片机是0.1s)。r一般在10-500之前选取,具体看你系统的情况,调试不难,调试的时候看TD的输出曲线就行。
(2)非线性组合
这部分有个很简单的方法,你可以直接在TD的两个输出的(TD后输入信号,TD后输入信号的微分)做差后面分别加一个KP就ok了,一个取名KP,一个取名KD。这就等于两个比例环节,说明白了就是对信号的组合方式,如何利用误差和误差的微分。当然也可以采用非线性组合,例如以下:
在这里插入图片描述

非线性组合方式有很多,前面介绍的那本书上也有很多介绍,百度也能很多,自己设置几个非线性函数也可以,这里就不介绍了。
(3)ESO_扩张状态观测器
大家应该对状态观测器还有一点印象吧。没印象也没关系,就是设置另一个系统出来观测原系统的状态变量。公式如下:
在这里插入图片描述
看着复杂,其实自己推导确实很复杂。简单介绍一下。这个z1就是对输出的估计,毕竟叫扩张状态观测器。这个z3是对系统总扰动的估计。到这里有个简单的了解就行了。对于上面扩张状态观测器有很多变量,看的可能有点晕。fal函数仅仅是对误差e进行了一些变化。这里我们可以直接使用误差,有兴趣的这里可以继续研究。这样的话ESO就会变成如下形式:
在这里插入图片描述

这里再推荐高志强的一篇线性化设计ADRC的论文,也可以参考上面给出的书本自抗扰控制技术第209页,将带宽的概念引入自抗扰控制。参考论文《 Scaling and bandwidth-parameterization based controller
tuning》。引入后ESO中的三个变量将变成这样:
在这里插入图片描述

这样的话ADRC的ESO部分将变得非常清爽。

4.仿真框图
在这里插入图片描述
仿真结果:
输出显示:绿色为安排过渡过程后的输入信号,红线为输出信号。
在这里插入图片描述
TD输出:红色为TD后的输入,绿色为微分信号。
在这里插入图片描述
ESO输出:红色为z1、绿色 z2、蓝色z3
在这里插入图片描述
代码部分:
%TD部分

function [v1,v2] = fcn(u)
persistent v1_1 v2_1
h=0.1;
delta=10;
if isempty(v1_1)
    v1_1=0;
end

if isempty(v2_1)
    v2_1=0;
end



%hfst计算内容
d=delta*h;
d0=h*d;
y=v1_1-u+h*v2_1;
a0=sqrt(d*d+8*delta*abs(y));
a=0;
out1=0;
if abs(y)>d0
    a=v2_1+(a0-d)/2*sign(y);
end

if abs(y)<=d0
    a=v2_1+y/h;
end

if abs(a)>d
    out1=-delta*sign(a);
end

if abs(a)<=d
    out1=-delta*a/d;
end
out=out1;
%结束

v1=v1_1+h*v2_1;
v2=v2_1+h*out;

v1_1=v1;
v2_1=v2;

v1=v1;
v2=v2;

end

ESO部分:此部分我是用Simulink搭建的,和公式写都一样,有兴趣的可以用s-function写一个。

在这里插入图片描述
到此结束!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144200.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Intellij idea 2020设置经典样式(背景为黑色Darcula)

    Intellij idea 2020设置经典样式(背景为黑色Darcula)IntelliJIdea安装后一开始的样式是背景色是白的,如果想设置为经典的Darcula样式,按照如下步骤超级即可。File–>settting…—->Appearance—->DarculaApply–>OK即可

    2022年6月27日
    106
  • pytorch学习笔记七:torchvision.datasets.ImageFolder使用详解

    pytorch学习笔记七:torchvision.datasets.ImageFolder使用详解一、数据集组织方式ImageFolder是一个通用的数据加载器,它要求我们以下面这种格式来组织数据集的训练、验证或者测试图片。root/dog/xxx.pngroot/dog/xxy.pngroot/dog/xxz.pngroot/cat/123.pngroot/cat/nsdf3.pngroot/cat/asd932_.png对于上面的root,假设data文件夹在.py文件…

    2022年6月24日
    35
  • ubuntu20.04安装pycharm_linux下安装软件命令

    ubuntu20.04安装pycharm_linux下安装软件命令PyCharmIDE2019.1现在已经发布了,许多新特性和改进。全新的JupyterNotebook支持、改进了HTML和CSS的快速文档、快速导航到最近的位置、自定义主题插件等等。PyCharm的新功能JupyterNotebook支持,已经完全重新设计。现在可以在PyCharm2019.1中直接编辑Notebook,并提供方便的并排视图,帮助您更好地了解Notebook的源代码,同…

    2022年8月26日
    2
  • 自定义Python排序函数比较方式

    自定义Python排序函数比较方式当你想按自己的方式对数组元素进行排序时,我们需要自定义比较函数实现我们想实现的排序方式。例1以降序对数组进行排序>>>defcomp(x,y):…returny-x…>>>a=[1,8,4,5,2,7]>>>a.sort(comp)>>>a[8,7,5,4,2,1…

    2022年10月30日
    0
  • ajax parsererror报错,jQuery为ajax请求返回“ parsererror”[通俗易懂]

    ajax parsererror报错,jQuery为ajax请求返回“ parsererror”[通俗易懂]我一直在从jquery收到针对Ajax请求的“parsererror”,我尝试将POST更改为GET,以几种不同的方式(创建类等)返回数据,但我似乎无法弄清楚问题出在哪里。我的项目在MVC3中,我使用的是jQuery1.5,我有一个Dropdown,并且在onchange事件上,我触发了一个调用,以根据所选内容获取一些数据。下拉列表:(这会从Viewbag的列表中加载“Views”,并触发事…

    2022年6月29日
    19
  • Oracle 11g R2 Rman备份与恢复

    Oracle 11g R2 Rman备份与恢复Oracle11gR2Rman备份备份与恢复的定义及分类备份的定义及分类:备份就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储。备份是一份数据副本,从不同的角度分类如下:从物理与逻辑的角度来分类:从物理与逻辑的,备份可以分为物理备份和逻辑备份。物理备份…

    2022年5月8日
    120

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号