MATLAB 自抗扰控制 - Active Disturbance Rejection Control

2023-12-03 13:04

本文主要是介绍MATLAB 自抗扰控制 - Active Disturbance Rejection Control,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录

MATLAB 模型参考自适应控制 - Model Reference Adaptive Control


文章目录

  • 系列文章目录
  • 前言
  • 一、控制器结构
    • 1.1 一阶逼近
    • 1.2 二阶逼近
  • 二、指定控制器参数
  • 参考


前言

自抗扰控制 (ADRC) 是一种无模型控制方法,适用于为具有未知动态特性以及内部和外部扰动的被控对象设计控制器。此算法只需要对被控对象动态特性进行逼近,即可设计具有稳健抗扰功能的无超调的控制器。

您可以使用 Active Disturbance Rejection Control 模块来实现 ADRC。该模块使用已知系统动态特性的一阶或二阶模型逼近以及建模为被控对象的扩张状态的未知动态特性和扰动。通常,您可以根据工作范围内被控对象的开环阶跃响应来确定此阶数。

一阶逼近 - y ˙ ( t ) = b 0 u ( t ) + f ( t ) {\dot{y}}(t)=b 0 u(t)+f(t) y˙(t)=b0u(t)+f(t)

二阶逼近 - y ¨ ( t ) = b 0 u ( t ) + f ( t ) {\ddot{y}}(t)=b 0 u(t)+f(t) y¨(t)=b0u(t)+f(t)

其中:

  • y(t) 是被控对象输出。

  • u(t) 是输入信号。

  • b0 是临界增益,它是描述被控对象对输入 u(t) 的响应的估计增益。

  • f(t) 是总扰动,包括未知动态特性扰动和其他扰动。

该模块使用扩张状态观测器 (ESO) 来估计 f(t),并通过减少估计的扰动对模型逼近已知部分的影响来实现抗扰控制。

您可以实现离散时间和连续时间控制器。设置控制器时域和采样时间以匹配被控对象模型的时域。


一、控制器结构

1.1 一阶逼近

对于一阶被控对象模型逼近 y ˙ ( t ) = b 0 u ( t ) + f ( t ) {\dot{y}}(t)=b0u(t)+f(t) y˙(t)=b0u(t)+f(t),被控对象输出状态是 x 1 = y ( t ) x_{1}=\mathrm{y}(t) x1=y(t) ,扩张状态是 x 2 = f ( t ) x_{2}=\mathrm{f}(t) x2=f(t)
状态空间模型如下。
x ˙ = A x + B u + ( 0 f ˙ ( t ) ) {{\dot{x}=A x+B u+\left(\begin{array}{c}{{0}}\\ {{\dot{f}(t)}}\end{array}\right)}} x˙=Ax+Bu+(0f˙(t))
y = C x , y=C x, y=Cx,

其中

A = ( 0 1 0 0 ) , B = ( b 0 0 ) , C = ( 1 0 ) . A=\begin{pmatrix} 0 & 1 \\ 0 & 0 \end{pmatrix},\ B=\begin{pmatrix} b0 \\ 0 \end{pmatrix},C=(1\ 0). A=(0010), B=(b00),C=(1 0).

对于此可观测系统,模块使用龙伯格观测器来提供被控对象状态和总扰动的估计值。使用估计的状态

z 1 = y ^ ( t ) z 2 = f ^ ( t ) , \begin{array}{c}{{z_{1}=\hat{y}(t)}}\\ {{z_{2}=\hat{f}(t),}}\end{array} z1=y^(t)z2=f^(t),

控制器计算控制输入 u(t),如下所示。

u ( t ) = u 0 ( t ) − z 2 b 0 , u(t)={\dfrac{u0(t)-z2}{b0}}, u(t)=b0u0(t)z2,

其中

u 0 ( t ) = K P ( r ( t ) − z 1 ) . u\mathrm{0}(t)=K P(r(t)-z1). u0(t)=KP(r(t)z1).

这是一个基于估计的状态反馈控制器,当估计值和实际值相等时,系统具有一阶闭环行为。此闭环系统具有极点 s = –KP。

此控制器表示为以下控制结构。

在这里插入图片描述

为了简化控制器调节,该模块将控制器极点设置在 (s + ωc) 处,将观测器极点设置在 ( s + ω 0 ) 2 (s+\omega_{0})^{2} (s+ω0)2 处,其中 ωc 和 ωo 分别为控制器带宽和观测器带宽。

1.2 二阶逼近

对于二阶被控对象模型逼近 y ¨ ( t ) = b 0 u ( t ) + f ( t ) \ddot{y}(t)=b{0}u(t)+f(t) y¨(t)=b0u(t)+f(t) ,被控对象输出状态是 x 1 = y ( t ) x_{1}=\mathrm{y}(t) x1=y(t) x 2 = y ˙ ( t ) x_{2}=\mathrm{\dot{y}}(t) x2=y˙(t) ,扩张状态是 x 3 = f ( t ) x_{3}=\mathrm{f}(t) x3=f(t)

状态空间模型如下。

x ˙ = A x + B u + ( 0 0 f ˙ ( t ) ) \dot{x}=A x+B u+\left(\begin{array}{c}{{0}}\\ {{0}}\\ {{\dot{f}(t)}}\end{array}\right) x˙=Ax+Bu+ 00f˙(t)

y = C x , y=C x, y=Cx,

其中

A = ( 0 1 0 0 0 1 0 0 0 ) , B = ( 0 b 0 0 ) , C = ( 1 0 0 ) . A={\left(\begin{array}{l l l}{0}&{1}&{0}\\ {0}&{0}&{1}\\ {0}&{0}&{0}\end{array}\right)},B={\left(\begin{array}{l l}{0}\\ {b0}\\ {0}\end{array}\right)},C=(1\quad0\quad0). A= 000100010 ,B= 0b00 ,C=(100).

对于此可观测系统,模块使用龙伯格观测器来提供被控对象状态和总扰动的估计值。使用估计的状态

z 1 = y ^ ( t ) z 2 = y ˙ ^ ( t ) z 3 = f ^ ( t ) , \begin{array}{c}{{z_{1}=\hat{y}(t)}}\\{{z_{2}=\hat{\dot{y}}(t)}} \\ {{z_{3}=\hat{f}(t),}}\end{array} z1=y^(t)z2=y˙^(t)z3=f^(t),

控制器计算控制输入 u(t),如下所示。

u ( t ) = u 0 ( t ) − z 3 b 0 , u(t)={\dfrac{u0(t)-z3}{b0}}, u(t)=b0u0(t)z3,

其中

u 0 ( t ) = K P ( r ( t ) − z 1 ) − K D z 2. u\mathrm{0}(t)=K P(r(t)-z1)-K D z2. u0(t)=KP(r(t)z1)KDz2.

这是一个基于估计的状态反馈控制器,当估计值和实际值相等时,系统具有二阶闭环行为。

此控制器表示为以下控制结构。

在这里插入图片描述
为了简化控制器调节,该模块分别将控制器极点设置在 ( s + ω 0 ) 2 (s+\omega_{0})^{2} (s+ω0)2 处,将观测器极点设置在 ( s + ω 0 ) 3 (s+\omega_{0})^{3} (s+ω0)3 处,其中 ωc 和 ωo 分别为控制器带宽和观测器带宽。

二、指定控制器参数

为了对您的被控对象实现 ADRC,您必须为被控对象逼近的临界增益值 b0 提供合理的估计值。为此,可采用以下方法。

  1. 使用幅值为 uOL 的阶跃信号,在工作范围内对开环被控对象进行仿真。
  2. 记录较短持续时间内被控对象输出的变化。
    • 对于一阶 ADRC,请使用响应逼近 y = at 并确定 a,如下所示。
      a = y ( e n d ) − y ( 0 ) t ( e n d ) − t ( 0 ) a=\dfrac{y(e n d)-y(0)}{t(e n d)-t(0)} a=t(end)t(0)y(end)y(0)
    • 对于二阶 ADRC,请使用响应逼近 y = ½at² 并确定 a,如下所示。
      a = 2 ( y ( e n d ) − y ( 0 ) ) ( t ( e n d ) − t ( 0 ) ) 2 a={\dfrac{2(y(e n d)-y(0))}{(t(e n d)-t(0))^{2}}} a=(t(end)t(0))22(y(end)y(0))
  3. 然后,您可以基于 a 和阶跃幅值 uOL 确定 b0。
    b 0 = a u O L b{\mathrm{{0}}}={\dfrac{a}{u O L}} b0=uOLa
    在模块参数中使用临界增益参数设置此值。

然后,要调节控制器响应,请分别使用控制器带宽和观测器带宽指定 ωc 和 ωo 值。这些值取决于控制器的性能要求。一般情况下,更快的响应需要更大的控制器带宽。观测器还需要比控制器收敛得更快。因此,请将观测器带宽设置为控制器带宽的 5 到 10 倍。

此外,该模块允许您指定状态的初始条件,限制控制器输出,并输出估计的状态值。

参考

[1] Han, Jingqing. “From PID to Active Disturbance Rejection Control.” IEEE Transactions on Industrial Electronics 56, no. 3 (March 2009): 900–906. https://doi.org/10.1109/TIE.2008.2011621.

[2] Herbst, Gernot. “A Simulative Study on Active Disturbance Rejection Control (ADRC) as a Control Tool for Practitioners.” Electronics 2, no. 3 (August 15, 2013): 246–79. https://doi.org/10.3390/electronics2030246.

[3] Zhiqiang Gao. “Scaling and Bandwidth-Parameterization Based Controller Tuning.” In Proceedings of the 2003 American Control Conference, 2003, 6:4989–96. Denver, CO, USA: IEEE, 2003. https://doi.org/10.1109/ACC.2003.1242516.

这篇关于MATLAB 自抗扰控制 - Active Disturbance Rejection Control的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/449552

相关文章

Python实现局域网远程控制电脑

《Python实现局域网远程控制电脑》这篇文章主要为大家详细介绍了如何利用Python编写一个工具,可以实现远程控制局域网电脑关机,重启,注销等功能,感兴趣的小伙伴可以参考一下... 目录1.简介2. 运行效果3. 1.0版本相关源码服务端server.py客户端client.py4. 2.0版本相关源码1

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

MFC中Spin Control控件使用,同时数据在Edit Control中显示

实现mfc spin control 上下滚动,只需捕捉spin control 的 UDN_DELTAPOD 消息,如下:  OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult) {  LPNMUPDOWN pNMUpDown = reinterpret_cast(pNMHDR);  // TODO: 在此添加控件通知处理程序代码    if