按照文献上的原理搭建
《从PID技术到“自抗扰控制”技术》韩京清
一、安排过渡过程:
其中的fst函数:
function y = fst(x1,x2,r,h)
d = r*h;
d0 = d*h;
y = x1+h*x2;
a0 = sqrt(d^2+8*r*abs(y));
%a的表达式 分段函数
if(abs(y)>d0)
a = x2+0.5*(a0-d)*sgn(y);%%%%% 注:有文章说 a=x2+(a0-d)/2*sgn(y)
else
a = x2+y/h;
end
%fst的表达式 分段函数
if(abs(a)<=d)
fst = -r*a/d;
else
fst = -r*sgn(a);
end
y = fst;
end
注意:代码中a和图片中的公式不一样,学习过程中发现其他文献都是*sgn(y)。
为了调用符合函数sgn,需要重建一个.m文件写子函数:
function y=sgn(x)
if x>0
y=1;
elseif x<0;
y=-1;
else
y=0;
end
end
二、非线性反馈:
其中的fal函数:
function y = fal(e,alpha,delta)
fal=1;
if(abs(e)>delta)
fal = abs(e)^alpha*sgn(e);
else
fal = e/delta^(1-alpha);
end
y = fal;
end
三、ESO扩张观测器:
fal函数和上面的一样,只是输入不同。
四、参数设置
参数调节经验:
可以单独先调过渡过程的r,观看v1和v2的输出,再调其他部分。
博主总结的很好,我觉得很有用,收藏了。
ADRC参数整定经验
TD:有两个参数r、h
r越大,快速性越好,但是容易超调和引发振荡
h越大,静态误差越小,刚开始带来的“超调”越小,初始的误差越小;但会导致上升过慢,快速性不好
ESO:有6个参数bata01;beta02;beta03;b;T=0.0015;alpha1;alpha2;delta_Eso;
一般alpha1=0.5;alpha2=0.25;delta_Eso=0.01;是固定参数,只需要调节其他三个参数:
bata01和1/h是同一个数量级,过大会带来振荡甚至发散;
beta02过小会带来发散,过大会产生高频噪声;
beta03过大会产生振荡;过小会降低跟踪速度;
Nolinear_PD:三个参数:Kp、Kd、delt
Kp越大,会减少误差,但是会降低快速性
Kd越大,增加快速性,但是过大会产生振荡
delt的值基本不影响输出,但是一般在0.01~0.1之间选取,过大会产生振荡
最终参数:
r = 30;h =0.01;Kp = 500;Kd = 25;delt = 0.01;
bata01=100;beta02=300;beta03=1500;alpha1=0.5;alpha2=0.25;delta_Eso=0.01;b=5;T=0.0015;
我的仿真:
输出
与PID的对比:
加入白噪声:
结果:ADRC比PID更快到达目标值,且几乎没有超调;加入白噪声模拟外部干扰,ADRC抗扰性能更加。