基于扩张状态观测器的永磁同步电机(PMSM) 自抗扰控制ADRC仿真模型 MATLAB/Simulink ①跟踪微分器TD为系统输入安排过渡过程得到光滑的输入信号以及输入信号的微分信号。 ②非线性状态误差反馈律NLSEF把跟踪微分器产生的跟踪信号和微分信号与扩张状态观测器得到的系统的状态计通过非线性函数进行适当组合作为被控对象的控制量 ③扩张状态观测器ESO作用是得到系统状态变量的估计值及扩张状态的实时作用量。今天咱们来盘一盘永磁同步电机PMSM自抗扰控制ADRC的仿真实现。直接说重点ADRC这玩意儿核心就三把刀跟踪微分器TD、非线性状态误差反馈NLSEF、扩张状态观测器ESO。下面带大家手撕代码看看这三位爷在Simulink里怎么配合干活。先看跟踪微分器TD。这哥们儿主要解决信号突变引发的系统冲击相当于给系统加了个缓冲带。在Simulink里可以用S函数实现核心算法就这两行function sys TD_Update(t,x,u,para) h para(1); % 仿真步长 r para(2); % 速度因子 sys [x(2); -r*sign(x(1)-u x(2)*abs(x(2))/(2*r))];这非线性函数sign换成饱和函数sat效果更丝滑。参数r决定跟踪速度调参时先怼到50试试观察输出波形别出现明显滞后就成。接下来扩张状态观测器ESO才是重头戏直接决定系统抗扰能力。搭建时注意电机状态方程得拆明白% ESO核心状态更新 function sys ESO_Update(t,x,u,para) beta1 para(1); beta2 para(2); beta3 para(3); b 0.5; % 系统增益 e x(1) - y; % y为实际输出 dx1 x(2) - beta1*e; dx2 x(3) - beta2*fal(e,0.5,0.01) b*u; dx3 -beta3*fal(e,0.25,0.01); sys [dx1; dx2; dx3];这里fal函数是ADRC祖传的非线性函数比普通PID多了个变增益机制。注意beta系数的调节顺序先调beta3保证扰动估计收敛再调beta1、beta2匹配动态响应。基于扩张状态观测器的永磁同步电机(PMSM) 自抗扰控制ADRC仿真模型 MATLAB/Simulink ①跟踪微分器TD为系统输入安排过渡过程得到光滑的输入信号以及输入信号的微分信号。 ②非线性状态误差反馈律NLSEF把跟踪微分器产生的跟踪信号和微分信号与扩张状态观测器得到的系统的状态计通过非线性函数进行适当组合作为被控对象的控制量 ③扩张状态观测器ESO作用是得到系统状态变量的估计值及扩张状态的实时作用量。最后把TD和ESO的输出喂给NLSEFfunction u NLSEF(e1,e2,z3,para) alpha para(1); % 非线性因子 delta para(2); % 线性区间 u0 fal(e1,alpha,delta) fal(e2,alpha,delta); u (u0 - z3)/b; % 补偿总扰动这里有个坑爹点参数b必须和ESO中的b严格一致否则扰动补偿直接翻车。建议把b做成全局变量或者封装在子系统参数里。仿真时注意三点1. 电机参数别直接照搬论文先验参数不准会让ESO抓瞎2. 离散仿真步长建议0.1ms太大会导致ESO发散3. 先跑开环看观测器精度再闭环调NLSEF参数。实测中发现TD的输出信号偶尔会抖这时候把sign函数换成连续型sat函数立竿见影。ADRC这玩意儿参数虽多但调节有套路先保证ESO能准确观测扰动再调TD让指令过渡平滑最后微调NLSEF的非线性区间。照着这个顺序操作基本上半天就能调出能用的参数。