ADRC-active disturbance rejection control-自抗扰控制器
ADRC自抗扰控制基本思想要点:
1.标准型与总扰动,扩张状态与扰动整体辨识,微分信号生成与安排过渡过程以及扰动的消减与控制量产生。
ADRC主要构成:

1)跟踪微分器(TD)---the tracking differentiator –跟踪微分器
解决由不连续或带随机噪声的量测信号,合理提取连续信号(跟踪给定)及微分信号的问题。
根据微分输出与最速综合函数,可以安排闭环系统的过渡过程。
以单位阶跃信号为例,经过跟踪微分器的过渡,产生的输出效果为:

特点:1>使误差反馈增益和误差微分增益选取范围扩大
2>使给定的反馈增益所适应的对象参数范围扩大,提高鲁棒性

2)扩张状态观测器(ESO)--extended state observer –扩展状态观测器
状态观测器将影响被控对象输出的扰动作用扩张成新的状态变量,通过特殊的反馈机制观测被扩张的总扰动信号
通过输入,输出构建总扰动为一个状态变量,二阶的系统,他的扩张观测器达到三阶,加入了总扰动的状态。
总扰动中包含系统内部扰动和外部高频噪声干扰,
扩张状态观测器的输出为:Z1=y ,Z2=dy ,Z3(观测到的系统总扰动)‘

3)非线性状态误差反馈控制律(NLSEF)--nonlinear state error feedback –非线性状态误差反馈

根据跟踪微分器(TD)得出的给定信号和给定信号的微分与状态观测器观测到的系统输出和输出的导数的误差,进而进行控制和扰动补偿,非线性控制方法由fal或最速控制综合函数Fhan构造。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
经典PID

优点 :
1.仅由误差来决定控制
2.运算量低,可以以极高的速率运行
缺点:
1.误差函数采用
e=v−y
的形式不太合理,比如输入阶跃信号的时候,会导致误差函数也是一个阶跃信号,对控制的稳定性有影响
2.在经典PID里面需要计算误差信号的微分,但是根本无法严格的计算微分信号,只能使用近似计算
3.经典PID的比例、误差、积分项是线性组合输出最后的控制量的,线性组合并不是一个最优的组合方案
4.严格上来说,积分项虽然消除了静态固有误差,但是会大大影响控制的稳定性能
针对上面的四个缺点,ADRC分别提出了改进方法,如下:
1》transient profile generator–经典微分器
为了防止跳变信号,对信号作如下处理,其实也就是下面的跟踪微分器:

如下图所示,使用这种变换实际上是模仿最短时间到达一个点的概念,在到达平衡位置处前恒定加速运动,过平衡位置后恒定减速运动,使目标点在规定的加速度下以最短的时间到达目标点,并且到达速度为零,其中v是当前位置

此外在计算机中或者仿真中只能使用离散时间的解决方案,因此,解决方案可以表示为

其中,

1》--1)跟踪微分器(TD)---the tracking differentiator –跟踪微分器
这里解释为什么要改进经典的微分器,实际上,使用经典PID里面的微分器会很大的放大信号噪声。如果使用经典的微分器,当附加上噪声n(t)的时候


即:采样周期越短,噪声被放大越大,因此采用如下改进:

nonlinear weighted sum--非线性加权和
在使用了跟踪微分器之后,一个输入实际上变成了两个输入e1=v1−x1,e2=v2−x2,为信号的误差和信号误差的微分,这里利用这两个信号来组合得到控制输出,ADRC里面采用非线性的组合方式,使用了一个函数如下所示 
fal函数具有小误差,大增益;大误差,小增益的特性,十分适合用于控制,可以减少控制误差,最后的非线性PID可以写作


这是跟踪微分控制器的离散方程,看方程其实就很直接。
h:为时间尺度 MATLAB的仿真步长为0.001 所以 h = 0.001

Simulink 模型里的TD 有一个输入状态,经过TD安排过渡时间,计算fst(快速控制最优综合函数)后,会得到两个输出v1 目标状态,v2系统的微分。

这是TD的内部结构,和公式里面的一样,就是跟踪微分的阶跃响应公式。fst 输入的第一个参数为
v1(t) - v0(t).在结构图里,就是v1-v,之后的结构对照公式即可看明白。

这里看一下对TD的仿真波形图:

基本上很好的跟踪上了正弦波。
这里提示一下TD模型里的参数修改的地方。在这个模型里只有两个参数r,h.


双击1,再选择2的地方就可以了。然后设置3处的两个参数;
2)扩张状态观测器(ESO)--extended state observer –扩展状态观测器
最后的扩张状态观测器也是最重要的一个模块,此处不需要误差积分模块了,ESO给出了系统未知状态和未知干扰的估计和补偿。假设外部的干扰为f(x1,x2,ω,t)控制信号为u,系统可以被表示为

之后增加一个新的状态x3用于表示干扰,最后ESO可以被写作

其中参数一个例子是β01=1,β02=1/2h0.5,β03=2/25*h1.2.输入输出如下图所示

最终整个系统函数和框图如下图所示
ADRC系统函数表示

整个ADRC系统框图表示

这里综合参考资料里面的结论,提炼几点:
1. ADRC系统的系统阶数由系统的相对阶数决定
2. 安排过渡过程解决快速控制和超调的矛盾
3. 不适用积分项也可以消除静态误差,避免积分副作用
4. ADRC的关键创新点其实在与ESO模块,也就是扩展状态观测器模块,他将所有不知道的影响归纳为一个中间控制量加入系统之中,可以很好的提高系统的抗干扰性能
5. ADRC中系统分类,不是按照线性、非线性、时变和时不变来分,而是按照系统的”时间尺度”来分类
参考资料:
1.韩京清.从PID技术到“自抗扰控制”技术[J].控制工程,2002,9(3):13-18
2.韩京清. 非线性PID控制器[J]. 自动化学报, 1994, 20(4):487-490.
3.韩京清. 自抗扰控制技术[J]. 前沿科学,2007,1(1):24-31
转载自:https://blog.csdn.net/mrhcat/article/details/71424198,https://blog.csdn.net/qq_34445388/article/details/79705968 仅为学习使用!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

产品化ADRC:SpinTAC Motion Control Suite (Featuring ADRC)
SpinTAC使用了自抗扰控制器(ADRC,Active Disturbance Rejection Control),自抗扰控制器能够对系统扰动进行实时估算并补偿,其所要整定的参数只有一个即带宽,一旦整定,控制器可以工作在较宽的转速和负载范围内。
观察TI提供的Demo程序,可以发现,ADC中断中,在FOC运行之前运行了SpinTAC控制。
// Run the SpinTAC Components
if(stCnt++ >= ISR_TICKS_PER_SPINTAC_TICK)
{
ST_runVelCtl(stHandle, ctrlHandle);
stCnt = ;
} // run the controller
CTRL_run(ctrlHandle,halHandle,&gAdcData,&gPwmData);
进入ST_runVelCtl()函数,可以发现其输出就是转矩参考值,即Iq参考值,作为q轴电流PI调节器的输入。
void ST_runVelCtl(ST_Handle handle, CTRL_Handle ctrlHandle)
{
_iq speedFeedback, iqReference;
ST_Obj *stObj = (ST_Obj *)handle;
CTRL_Obj *ctrlObj = (CTRL_Obj *)ctrlHandle; // Get the mechanical speed in pu
speedFeedback = EST_getFm_pu(ctrlObj->estHandle); // Run the SpinTAC Controller
// Note that the library internal ramp generator is used to set the speed reference
STVELCTL_setVelocityReference(stObj->velCtlHandle, TRAJ_getIntValue(ctrlObj->trajHandle_spd));
STVELCTL_setAccelerationReference(stObj->velCtlHandle, _IQ(0.0));
STVELCTL_setVelocityFeedback(stObj->velCtlHandle, speedFeedback);
STVELCTL_run(stObj->velCtlHandle); // select SpinTAC Velocity Controller
iqReference = STVELCTL_getTorqueReference(stObj->velCtlHandle);
// Set the Iq reference that came out of SpinTAC Velocity Control
CTRL_setIq_ref_pu(ctrlHandle, iqReference);
}
ADRC-active disturbance rejection control-自抗扰控制器的更多相关文章
- 部署额外域控制器,Active Directory
部署额外域控制器 转自:http://yuelei.blog.51cto.com/202879/117599 如果域中只有一台域控制器,一旦出现物理故障,我们即使可以从备份还原AD,也要付出停机等 ...
- install Active Directory域控制器
设置Active Directory域控制器 正如我们在网络与系统配置专题文章中所提到的那样,我们已将两部服务器设置为对应于内部域“intdomain.com”的Active Directory域控制 ...
- 安装 Windows Server 2012 Active Directory 只读域控制器 (RODC)(级别 200)
安装 Windows Server 2012 Active Directory 只读域控制器 (RODC)(级别 200) 适用对象:Windows Server 2012 本主题介绍如何创建分步的 ...
- 将Samba设置为Active Directory域控制器
一 简介 从版本4.0开始,samba可以作为Active Directory(AD)域控制器(DC)运行,如果在生产环境中安装samba,建议运行两个或者多个DC用于故障转移 本文介绍如何让将一个S ...
- PID控制器(比例-积分-微分控制器)- II
Table of Contents Practical Process Control Proven Methods and Best Practices for Automatic PID Cont ...
- Active Directory网域
Active Directory网域 3.1Windows网络的管理方式 3.1.1工作组模式 工作组由一组用网络连接在一起的计算机组成,他们将计算机内的资源共享给用户访问.工作组网络也被称为“对等式 ...
- windows server 2012 AD 活动目录部署系列(七)Active Directory 的授权还原
域内所有的域控制器都有一个内容相同的Active Directory,而且 Active Directory 的内容是动态平衡的,也就是说任何一个域控制器修改了 Active Directory,其他 ...
- Active Directory中获取域管理员权限的攻击方法
Active Directory中获取域管理员权限的攻击方法 译:by backlion 0x00 前言 攻击者可以通过多种方式在Active Directory中获得域管理员权限, ...
- Active Directory域
引言 在 Microsoft® Windows® 2000 Server 操作系统的诸多增强功能中,Microsoft Active Directory™ 功能的引入意义最为重大,但也最常引起困惑.与 ...
随机推荐
- IT研发工程师职业规划
一些年过去了,以下关于IT研发工程师纬度的职业规划PPT,仍然有一些可以借鉴: ------------------------------------------------------------ ...
- revit二次开发wpf里button按钮无法实现事务
不能在revit提供的api外部使用事务,解决此方法, 1.把button里要实现的功能写到外部事件IExternalEventHandler中,注册外部事件,在button事件中.raise()使用 ...
- [TCP/IP] 计算机网络性能指标
速率:连接在计算机网络上的主机在数字信道上传输数据位数的速率单位是 b/s kb/s mb/s gb/s带宽:数字信道所能传输的最高数据率 查看我的网卡是144Mbps吞吐量:单位时间内通过某个网络的 ...
- CRM实施失败?请注意这6大问题及对策!
据Gartner调查显示:约50%的CRM项目不能达到客户期望.这一点与很多其他的IT项目状况非常类似,大多出于管理问题,供应商服务能力,项目执行不善等. 另据一个在线CRM论坛调查其失败的原因:67 ...
- [目录]C#学习笔记
C#是微软.NET平台下最重要的编程语言,它与C.C++不同,C#编写的源程序是托管在.NET平台下的.C#源程序经C#编译器编译成中间语言(IL,Intermediate Language),再经C ...
- OpenCL洗牌函数shuffle
在OpenCL中,经常会碰到会对向量的多个分量进行交叉运算的情况,比如 float4 d4; //input float scale; //input float2 mix_0 = mix((floa ...
- Android:随机生成算数四则运算简单demo(随机生成2~4组数字,进行加减乘除运算)
首先创建一个新的Android工程,下面是页面布局: Java代码: 我们先来分析一下如何完成的步骤: 1.首先,先完成生成随机数.(包括随机生成几组数字,范围为多少的数字,四则运算符号等): 2.要 ...
- PostgreSQL10.1 linux 编译安装
一 安装准备 1.首先从官网下载PostgreSQL压缩包(也可以使用yum安装),我们这里使用的是10.1的版本 2.将文件上传到linux服务区目录(我们这里放在/root 中) 3.解压缩 ta ...
- 使用make
5.11 库的使用 代码的复用是计算机程序设计语言中的一个重要的概念.可以把编译好的目标文件模块统一放到一个库中,使得程序员可以在不同的程序中共享这些代码. 在Linux操作系统下,最后连接生成可执行 ...
- Neuroph开发过程
文章提纲 安装与配置 开发小结 建立项目 配置项目 理解感知机的代码 安装与配置 JDK的安装:建议JRE 1.8以上: Neuroph安装:建议2.94的版本.下载地址 neuroph-core-2 ...