欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ADRC自抗扰控制自学笔记(包含simulink仿真)

程序员文章站 2022-03-26 18:24:05
...

ADRC控制中包含三个主要的部分:

跟踪微分器,非线性状态反馈(非线性组合),扩张观测器。

ADRC自抗扰控制自学笔记(包含simulink仿真)
ADRC特点:

继承了经典PID控制器的精华,对被控对象的数学模型几乎没有任何要求,又在其基础上引入了基于现代控制理论的状态观测器技术,将抗干扰技术融入到了传统PID控制当中去,最终设计出了适合在工程实践中广泛应用的全新控制器。

本博客将从0开始,逐一介绍每一个部分,最后在合起来实现ADRC,每个部分都将介绍其公式原理和仿真实验。


一、跟踪微分器(TD)

这是一个单输入双输出的模块,作用有两个:

  • 避免输入量不要有跳变,便于实际系统实时跟踪。因为传统的pid有个问题,就是当跟踪像阶跃信号这种突变信号时超调和上升时间共存的现象,所以我们的思路就是对输入的信号进行平滑处理,也就是避免其出现突变。
  • 过滤高频噪声

所以输出1就是处理过的信号,第二个信号是输出1的微分,输出1和2都将用于下一环节,这里不介绍。

先摆出他的输出效果图,输入为阶跃信号:
ADRC自抗扰控制自学笔记(包含simulink仿真)

说明:蓝色为处理后的阶跃信号,显然就好很多,没有那么突变。黄色为微分。

TD公式:
ADRC自抗扰控制自学笔记(包含simulink仿真)

ADRC自抗扰控制自学笔记(包含simulink仿真)

公式不难理解,接下来,我将对TD进行simulink仿真,其中fst函数我用的脚本写的:

ADRC自抗扰控制自学笔记(包含simulink仿真)

ADRC自抗扰控制自学笔记(包含simulink仿真)

友情提示:离散差分方程建模和连续系统微分方程建模一样,先找准输出y(k),再找准y(k-1)…,然后他们之间用单位延迟连接,最后在这基础上连其他东西。

hfst函数模块:

function out = hfst(u1,u2,r,h)
d=r*h;
d0=h*d;
y=u1+h*u2;
a0=sqrt(d*d+8*r*abs(y));
a=0;
out1=0;
if abs(y)>d0
    a=u2+(a0-d)/2*sign(y);
end

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

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

if abs(a)<=d
    out1=-r*a/d;
end
out=out1;
end

说明:TD模型涉及两个调参:δ和h,h为采样周期,delta决定跟踪快慢(δ越大,过滤后的输出越接近输入),一般的仿真模型r可以尽量大一些,在100~500范围内基本相同,即使再大效果也基本不会有大的提升,我这里delta为50,h=0.001。


二、非线性组合

这一部分对应第一张图中的非线性组合模块,这一模块为双输入单输出,输入的是两个误差,分别是指令信号差和指令信号微分的差,参考指令信号和参考指令信号的微分均由TD产生。

传统的pid或者pd控制就是比例、积分、微分的线性加权之和,但这种线性的组合不是最佳的,后来发现三者的非线性组合效果更好。最常用的就是pd形式的非线性组合
ADRC自抗扰控制自学笔记(包含simulink仿真)
这里面涉及的调参有三个:β1,β2,δ

实验:演示非线性pd相比传统pd的优越性

咱们先看传统的pd控制:
对象为:

sys = tf([133],[1,25,0])
dsys = c2d(sys,0.001,'z');
 [num,den]=tfdata(dsys,'v');

ADRC自抗扰控制自学笔记(包含simulink仿真)

效果:
ADRC自抗扰控制自学笔记(包含simulink仿真)

显然效果不好。

再来看看非线性pd控制:

ADRC自抗扰控制自学笔记(包含simulink仿真)

函数模块代码:

function y =nonlinear_pd(e1,e2)
alfa1=0.75;
alfa2=1.5;
delta=0.002;
beta1=150;
beta2=1;
fal1=1;
fal2=1;

if abs(e1)<=delta
    fal1=e1/(delta^(1-alfa1));
end

if abs(e1)>delta
    fal1=(abs(e1))^(alfa1)*sign(e1);
end

if abs(e2)<=delta
    fal2=e2/(delta^(1-alfa2));
end

if abs(e2)>delta
    fal2=(abs(e2))^(alfa2)*sign(e2);
end

y=beta1*fal1+beta2*fal2;
end

效果:

ADRC自抗扰控制自学笔记(包含simulink仿真)

可见效果好多了,因此非线性pid有效果!!!!!!

当然,我们这里用的是非线性pd控制,我们也可以用论文中的非线性pid控制,同理,这一部分公式为:

ADRC自抗扰控制自学笔记(包含simulink仿真)

这里不再演示了。


三、ESO扩张观测器

相关标签: 控制