matlab/simulink二阶线性自抗扰控制器(LADRC)仿真模型,已经封装完成,响应速度快,抗扰能力相较于传统pi更优秀。 采用线性ADRC相较于非线性ADRC大大减少了调参难度,已成功用于电机速度环替代传统pi。

最近在搞电机控制的朋友应该都遇到过这个难题——传统PI调节器在速度环上遇到负载突变就跟喝高了似的,响应慢还容易振荡。上个月我把实验室那台直流电机的PI换成二阶线性自抗扰(LADRC),效果立竿见影。

先看这个Simulink模型结构(贴模型截图怕被说营销,直接说关键部分吧)。核心就三个模块:跟踪微分器TD、线性扩张状态观测器LESO、误差反馈控制律。重点说下观测器部分:

function [z1, z2, z3] = LESO(u, y, h, beta1, beta2)
% h:采样时间 beta:观测器带宽参数
persistent z_old
if isempty(z_old)
    z_old = [0;0;0];
end
e = z_old(1) - y;
z_old = z_old + h*[z_old(2) - beta1*e;
                   z_old(3) - beta2*e + u;
                   -beta3*e];
z1 = z_old(1);
z2 = z_old(2); 
z3 = z_old(3);

这个观测器牛在能实时估算出系统总扰动(包括模型误差和外部干扰),代码里z3就是专门吃干扰的。相比非线性ADRC需要调5个参数,线性版只要调两个带宽参数,新手友好度直接拉满。

matlab/simulink二阶线性自抗扰控制器(LADRC)仿真模型,已经封装完成,响应速度快,抗扰能力相较于传统pi更优秀。 采用线性ADRC相较于非线性ADRC大大减少了调参难度,已成功用于电机速度环替代传统pi。

实际调试时发现个骚操作:先把观测器带宽ωo设为控制器带宽ωc的3-5倍,然后微调就行。比如电机模型里我设ωc=50,ωo=200,效果比之前调了三天三夜的PI参数强多了。抗扰测试时突然给电机轴加载,速度回落不到2%就立刻恢复,传统PI这时候早就超调10%以上了。

看个对比波形更直观(想象这里有两个响应曲线图)。传统PI的上升时间大概0.15秒,LADRC直接干到0.08秒,关键是波形平滑得跟德芙似的。最惊喜的是参数鲁棒性——同一组参数换到功率差30%的电机上居然还能用,这要是放在以前PI时代,早被老板骂摸鱼了。

现在这套模型已经封装成Simulink模块(带mask的那种),双击直接输带宽参数就行。要代码的兄弟注意观测器离散化方法,用欧拉法会出幺蛾子,建议改成龙格库塔法。下次试试在三相异步电机上移植,搞成了再来分享。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐