【ADRC】一. 线性跟踪微分器
跟踪微分器(TD,Tracking-Differentiator)由韩京清研究员在《自抗扰控制技术》中提出,是自抗扰控制(ADRC,Active Disturbance Rejection Controller)的一个重要组成部分。跟踪微分器最常见的用途是安排过渡过程,但它作为一种微分器,同样也可以提取含噪信号的微分、配置系统零点、引入相角超前等。
下面我们从头来梳理一下跟踪微分器提出的过程。
假如我们要提取一个信号的微分,最直接也是最简单的想法便是用 (R(n+1)−R(n))/dt(R(n+1)-R(n))/dt(R(n+1)−R(n))/dt,写成传递函数的形式就是一个纯微分环节 sss。这样做对一个理想的信号是没问题的,但一旦有一个噪声混在信号中,这个噪声便会微分环节放的非常大,使提取出来的原信号的微分失真。而现实系统中的信号普遍存在噪声,所以我们想要一种方式,可以既提取出原信号的微分,又不放大噪声。
所以就有了经典微分器,其传递函数为:
G(s)=s1+τs=s∗11+τs=s∗FL(s)G(s) = \frac{s}{1+\tau s} = s * \frac{1}{1+\tau s} = s * F_L(s) G(s)=1+τss=s∗1+τs1=s∗FL(s)
可以看到,其实就是在一个纯微分环节后,又串联了一个一阶低通滤波器来抑制噪声。当滤波器的时间常数 τ\tauτ 趋近 0 时,G(s)G(s)G(s) 趋近于纯微分环节 sss,微分的效果变好,相角滞后小,但对噪声的抑制效果变差,反之亦然。
我们从波特图中也可以清楚的看出来:
所以在实际系统中提取微分信号,其实就是在相角滞后(微分的效果)和噪声抑制之间做权衡,虽然鱼和熊掌不可兼得,但我们仍然可以尽力找到一个滞后和噪声都可以接受的平衡点。
其实上面说的微分器很简单,就是一个纯微分环节 sss 与一个低通滤波器 FL(s)F_L(s)FL(s) 的乘积,搞清楚了这件事情之后,我们可以很容易地引入很多更高级的微分器:只需要把 FL(s)F_L(s)FL(s) 换成一些更高级的低通滤波器就好了。
下面我们考虑一个双极点滤波器:
FL(s)=ωn2s2+2ξωn+ωn2F_L(s) = \frac{\omega_n^2}{s^2 + 2\xi \omega_n + \omega_n^2} FL(s)=s2+2ξωn+ωn2ωn2
其中,ωn\omega_nωn 是滤波器的固有频率, ξ\xiξ 是阻尼比。滤波器的极点越多,幅值特性下降的速度越快,所以当滤波器提供相同的滤波效果时,一般来说,越高阶的滤波器可以拥有越低的带宽,在低频时的相位滞后可以更小。对双极点滤波器来说,阻尼比越低,低频时相位滞后越小。下面的对比图摘自《控制系统设计指南》。
但阻尼比低也不是没有代价的,下面我们画出 ξ\xiξ 变化时滤波器的波特图和阶跃响应曲线。
可以看到,当 ξ<1\xi <1ξ<1 时,该滤波器是一个欠阻尼的二阶震荡环节,其阶跃响应将有超调;当 ξ<0.707\xi < 0.707ξ<0.707 时,滤波器的波特图将出现增益凸峰,ξ\xiξ 越小,凸峰越显著。一般在控制系统中应用双极点滤波器来滤波时,ξ\xiξ 通常设置在 0.4 到 0.7 之间。
当 ξ=0.707\xi = 0.707ξ=0.707 时,该滤波器是一个二阶 Butterworth 滤波器,它是在不产生增益凸峰的前提下衰减速度最快的滤波器,我们不过多展开。当 ξ=1\xi = 1ξ=1 时,该滤波器是一个线性跟踪滤波器(下文为了方便,统一都叫跟踪微分器,尽管这一定程度上混淆了微分器和滤波器的概念),它是在阶跃响应不产生超调的前提下衰减速度最快的滤波器。
到这里,我们已经清楚,线性跟踪微分器是双极点滤波器在阻尼比等于1时的一种特例。那么为什么跟踪微分器要令 ξ=1\xi = 1ξ=1 呢?要说清楚这个我们首先要看一下低通滤波器的指令处理作用。
现在考虑一个最简单的一阶低通滤波器,其截止频率为 1rad/s:
FL(s)=11+sF_L(s) = \frac{1}{1+s} FL(s)=1+s1
其阶跃响应曲线如下图所示:
我们可以看到,这个低通滤波器把一个阶跃信号变成了一条平滑的曲线。从频域上考虑,这是因为低通滤波器把阶跃信号的高频部分滤掉了,所以信号只能以一个较低的频率缓慢上升。
利用低通滤波器的这一特点,我们可以使用低通滤波器对输入信号进行处理,我们的目的不是为了滤去输入信号的噪声,而是使输入信号变得平滑。这就是 ADRC 中强调的“安排过渡过程”。
虽然低通滤波器可以既可以对输入信号进行处理,也可以对反馈信号进行处理,但这两个场合对低通滤波器的要求是不一样的。处理反馈信号时,需要特别关注相角的滞后,相角滞后会导致系统的相角裕度变小,严重时甚至会导致系统失稳。为了减小相位滞后,我们甚至可以容忍信号的略微失真,因为有噪声、传感器精度以及量化误差等的限制,我们本就无法获得一个完全准确的反馈信号。而信号失真在处理输入信号时是完全无法忍受的!别说信号失真,即使是响应的超调也是应该尽量避免的,但与此同时,只要控制周期稍微高一些,相位的滞后对输入信号的影响非常小。
所以线性跟踪微分器令 ξ=1\xi = 1ξ=1 的原因也很明了了,线性跟踪微分器更关注输入信号的处理,所以要保证滤波器的阶跃响应没有超调。但这也导致线性跟踪微分器相位滞后非常严重,不太适合用在反馈滤波环节上。
我们重写线性跟踪微分器为:
G(s)=r2s2+2rs+r2G(s) = \frac{r^2}{s^2 + 2rs + r^2} G(s)=s2+2rs+r2r2
其中参数 rrr 越大,系统阶跃响应时间越短,指令跟踪的速度越快,参数 rrr 决定了跟踪速度,故称其为速度因子。
设输入信号为 v0v_0v0,将上述线性跟踪微分器离散化,得到:
{x1(k+1)=x1(k)+hx2(k)x2(k+1)=x2+h(−r2(x1(k)−v0(k))−2rx2(k))\left\{ \begin{array}{l} x_1\left( k+1 \right) =x_1\left( k \right) +hx_2\left( k \right)\\ x_2\left( k+1 \right) =x_2+h\left( -r^2\left( x_1\left( k \right) -v_0\left( k \right) \right) -2rx_2\left( k \right) \right)\\ \end{array} \right. {x1(k+1)=x1(k)+hx2(k)x2(k+1)=x2+h(−r2(x1(k)−v0(k))−2rx2(k))
x1(k)x_1(k)x1(k) 会一直跟踪 v0(k)v_0(k)v0(k),x2(k)x_2(k)x2(k) 为 x1(k)x_1(k)x1(k) 的导数,速度因子 rrr 决定跟踪的速度。
但还有一个问题我们没有弄明白,那就是我们为什么需要把输入信号变得平滑?直接使用阶跃不行吗?
我们首先从物理上直观地去认识。不考虑偏载力矩、摩擦力矩等非线性因素,现假设某云台的最大加速的加速度和最大减速的加速度相同,记作 amaxa_{max}amax,现在想要其以最快速度不超调的向某个方向转动 xxx 度,我们应该怎么做?根据高中物理,我们知道,应该先让云台以 amaxa_{max}amax 的加速度加速到 x/2x/2x/2 处,然后再让云台以 amaxa_{max}amax 的加速度减速运动到 xxx。这就是一个简单的三角规划,它蕴涵了时间最优控制的思想。
那我们如果直接使用 PID,令这个云台去响应一个阶跃信号会发生什么呢?阶跃信号是一个物理系统无法实现的信号,当执行器性能远超于负载时(即相较于负载惯量和偏载力矩而言,电机输出的电磁转矩非常大,且额定转速满足系统快速性的要求),我们会发现,系统响应阶跃信号也可以响应的很好。但大部分物理系统的执行器性能都是和实际需求相匹配的,在这种情况下,如果我们想要快速性,令云台刚开始以 amaxa_{max}amax 的加速度加速,不管怎么调 PID 的参数,其在 x/2x/2x/2 至 xxx 的区间内 ,一定无法一直以 amaxa_{max}amax 的加速度减速,那么就会产生超调。如果我们不想要超调,那刚开始就一定只能用比较小的加速度来加速。这就是韩京清研究员指出传统 PID “快速性”和“超调”之间的矛盾。
所以我们需要对输入信号进行处理,使之变得物理可实现。
下面我们进行理论推导。加入前置滤波环节之后,系统的方框图如下所示:
假设原系统的闭环传递函数为 G(s)G(s)G(s),我们在指令上加了一个滤波环节 FL(s)F_L(s)FL(s),通过方框图化简,易知,开环传递函数不变,闭环传递函数变为 G(s)∗FL(s)G(s)*F_L(s)G(s)∗FL(s)。
现在我们考虑一个带机械谐振的欠阻尼的二阶震荡系统,其闭环传递函数如下:
G(s)=1069s2+9.811s+1069∗s2+100s+10000s2+s+10000G(s) = \frac{1069}{s^2 + 9.811s + 1069}*\frac{s^2 + 100s + 10000}{s^2 + s + 10000} G(s)=s2+9.811s+10691069∗s2+s+10000s2+100s+10000
一个线性跟踪微分器,令快速因子 rrr 为 20,有如下的传递函数:
FL(s)=400s2+40s+400F_L(s) = \frac{400}{s^2 + 40s + 400} FL(s)=s2+40s+400400
我们现在来比较一下前置滤波环节对闭环波特图和阶跃响应曲线的影响:
前置滤波环节通过降低带宽的方式,降低了系统的闭环谐振峰和谐振频率,把整个闭环幅值特性都压到了0db以下,有效降低了阶跃响应时的超调和震荡。而且,我们可以看到,前置滤波环节不仅可以对系统本身的谐振峰进行调整,而且还可以压低机械谐振等高频的未建模动态。
搞清楚这件事之后,又有一个问题出现了,我们前面说过,线性跟踪微分器的相角滞后特别严重,不适合用在反馈滤波上,更适合对指令滤波,那么如果我们要对指令进行滤波,就没有比线性跟踪微分器更好的方法了吗?
答案是有,现在我们先不考虑机械谐振,系统闭环传递函数为:
G(s)=1069s2+9.811s+1069G(s) = \frac{1069}{s^2 + 9.811s + 1069} G(s)=s2+9.811s+10691069
考虑这样一个带零点的滤波器:
FL(s)=s2+10s+1000s2+50s+1000F_L(s) = \frac{s^2 + 10s + 1000}{s^2 + 50s + 1000} FL(s)=s2+50s+1000s2+10s+1000
系统闭环波特图和阶跃响应曲线如下:
可以看到,带零点的滤波器相位滞后明显小于不带零点的线性跟踪微分器,阶跃响应曲线也好于线性跟踪微分器处理过的系统。
那这样分析下来,线性跟踪微分器不适合用在反馈滤波上,指令滤波效果又比不上那些带零点的滤波器,我们为什么还要用线性跟踪微分器呢?
我认为这是因为线性跟踪微分器在工程应用中有优越性。我设计的带零点的 FL(s)F_L(s)FL(s) ,本质上是一个陷波滤波器,或者说是带阻滤波器。陷波滤波器比低通滤波器引入的相角滞后小得多,但想要在工程中应用,还需要考虑建模、辨识以及噪声和谐振频率的测量问题,同时还要考虑到模型摄动以及噪声、谐振频率的变动。如果想要滤除的信号的频率相差过大,还需要多个陷波滤波器串联,这也是为什么我举陷波滤波器的例子时没考虑机械谐振的原因。但线性跟踪微分器只有快速因子 rrr 需要整定,通过简单的整定,我们可以把中低频的模型问题和高频的未建模动态一并处理掉,一个系统总有一些高频的未建模动态,所以“加个线性跟踪微分器处理处理”总是一个不错的选择。
至此,线性跟踪微分器的由来以及优缺点已经全部讲完了。
【ADRC】一. 线性跟踪微分器相关推荐
- ADRC线性跟踪微分器(ST+SCL语言)
ADRC自抗扰相关算法源代码和公式请参看下面文章链接: ADRC/Matlab一步步实现跟踪微分器TD(附完整PLC测试代码链接)_ladrc线性跟踪微分器差分方程_RXXW_Dor的博客-CSDN博 ...
- 【ADRC】跟踪微分器
在上一篇文章中,分析了PID算法的基本数学原理,从PID算法的原理与实际应用,是可以看出其PID的优点与缺点的,ADRC算法(自抗扰控制)也可以说是针对PID算法的一些缺点,或者说工程中难以实现的点做 ...
- 如何只使用TD跟踪微分器改进普通PID控制(附完整梯形图代码)
ADRC自抗扰控制专栏有系列文章,大家可以自行搜索.ADRC的模块基本都可以独立使用,这篇博客我们讲解只使用TD跟踪微分器+传统PID的组合来改良PID控制.ADRC 跟踪微分器TD的算法详解请参看下 ...
- 无名的ADRC的C语言实现
分为ADRC.h和ADRC.c 确实看头文件有用,有哪些变量都一目了然. 和ACfly一样的是比如都有beta这个参数 ADRC.c /*------------------------------- ...
- 【ADRC】根据ADRC的思想改进PID
根据前面两篇关于ADRC的文章以及PID原理的文章,我们可以利用ADRC的思想来对PID算法做一些改进来看看效果,可以将改进的PID称之为非线性PID.主要可以利用跟踪微分器,针对PID的两个缺陷来进 ...
- 【PMSM】二. 经典电流环、速度环设计(下)
上一篇文章讨论了永磁无刷电机电流环.速度环的建模和控制器的参数整定,这篇文章会讨论前馈.滤波.抗饱和算法以及其他一些要注意的细节,且包含了大量工程经验.结合这两篇文章的内容,我们可以完整地使用经典 P ...
- 自抗扰控制ADRC之三种微分跟踪器TD仿真分析
目录 前言 1 全程快速微分器 1.1仿真分析 1.2仿真模型 1.3仿真结果 1.4结论 2 Levant微分器 2.1仿真分析 2.2仿真模型 2.3仿真结果 3.非线性跟踪微分器--韩教授 3. ...
- 2020-12-28 Matlab自动化控制-Adrc自抗扰控制
Matlab自动化控制-Adrc自抗扰控制 想要初步了解ADRC,可以从韩京清教授的一篇文献和一本书看起 1.文献: 从PID技术到"自抗扰控制"技术(<控制工程>,2 ...
- ADRC自抗扰控制自学笔记(包含simulink仿真)(转载)
他这里让我很好理解了跟踪微分器 非线性PID(准确说是非线性PD,所以可以看到输入是两根线而不是三根线) 也就是说传统PID是线性的?但是不是那些系统是非线性的,比如无人机,平衡车,只是小幅度里近似 ...
最新文章
- php包含文件时显示空白页,php中添加了如下语句出现空白页 删除页面zhengchang
- AI:2020年6月23日北京智源大会演讲分享之AI创业专题论坛——10:00-10:30张亚勤教授《智能产业新浪潮》
- pythonos pathjson_Python Json数据文件操作原理解析
- Jquery-core.holdReady()
- window应用移植到Linux下(应用移植)
- 并行、并发,两者的区别
- 系统架构师5 ***********那就给个合格分了。111
- Android Button字母自动全部大写的问题
- HDU 4873 ZCC Loves Intersection(可能性)
- 创建web工程Spring配置文件找不到问题解决方案
- REST API 的安全认证,我放弃OAuth 2.0 ,选择 JWT 令牌
- 计算机2级vb查询,计算机2级VB
- java堆栈队列api
- tcl android tv系统,TCL to launch motion-controlled Android TV first in China
- java获取kafka topic
- ASUS TUF GAMING B660M PLUS WIFI D4 i5-12600K RX6650XT 黑苹果efi引导文件
- 多元有序logistic回归分析_多元Logistic_回归分析解析.ppt
- PWA之 Service worker
- Linux运维之网络的配置,四种ip方式的设定,网关,dns的设定及物理机的网络连接
- JAVA程序员面试总结,高手整整理加强版 出自“CSDN(www.csdn.net)”