【ADRC/Matlab实现】非线性状态误差反馈NLSEF

目录

一、作用

二、理论分析

三、Matlab仿真

3.1 .m文件

3.2 simulink仿真


一、作用

找到一种非线性的控制组合代替传统的PID控制器的线性组合,获得更有效的误差反馈控制率,只需将误差信号换成关于误差的非线性函数如fst函数(fhan函数)和fal函数等,可实现“小误差大增益,大误差小增益”的效果。

二、理论分析

有了跟踪微分器TD之后,我们就可以利用误差e1=v1-x1和误差微分e2=v2-x2组成PD控制u=Kp*e1+Kd*e2,甚至可以实现PID控制u=Kp*e1+Kd*e2+Ki*e0,其中e_{0}=\int_{0}^{t}e_{1}(\tau )d\tau

但是这种线性组合不一定是最好的,韩京清老师在论文中提到“大量仿真研究表明采用e1,e2和e0的适当非线性组合效果更好”,于是他提出常用的两种形式的非线性组合:

对于第一种非线性组合来说,α和δ是可以调节的参数,一般取a0<0<a1<1<a2,δ根据工程经验一般取0.1。在二阶系统的控制中一般只用误差e1和误差微分e2来组成非线性PD控制器:u=K_{p}fal({e_{1}},{a_{1}},{\delta _{1}})+K_{d}fal({e_{2}},{a_{2}},{\delta _{2}})

第二种非线性组合用到的fhan(e1,c*e2,r,h0)与跟踪微分器TD中用到的fhan(e,x2,r,h)不同,用于误差反馈时,其参数c叫“阻尼因子”,相当于PID的微分增益,h0叫精度因子,决定跟踪设定值的跟踪精度,1/h0相当于PID的比例增益。

三、Matlab仿真

3.1 .m文件

function u0  = NLSEF(e1,e2)
k1=2;k2=4;
a1=0.5;a2=0.25;
delta=0.1;
u0=k1*fal(e1,a1,delta)+k2*fal(e2,a2,delta);
end

fal.m

function [f] = fal(e,a,d)
if abs(e)<d
    f=e*d^(a-1);
else
    f=(abs(e))^a*sign(e);
end
end

3.2 simulink仿真

和ESO结合使用时,非线性误差反馈控制律的输出u0往往要减去干扰估计值z3

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值