PMSM 永磁同步电机 ADRC 自抗扰控制 SVPWM matlab simulink 仿真 (1)该模型采用 matlab/simulink 2016b 版本搭建,使用matlab 2016b及以上版本打开最佳。 (2)该模型已经代为转换到各个常用版本。 【算法介绍】 (2)采用转速、电流双闭环控制; (3)转速环采用ADRC自抗扰控制器; (4)电流环采用PI控制器; (5)采用SVPWM矢量控制; 【简要技术说明文档和参考文献】 (1)成品模型原则上不提供技术; (2)本模型简要说明文档和运行视频。 (3)可要求simulink视频教程一份。

打开Simulink模型时总能看到些有意思的组合——这次把ADRC自抗扰控制器塞进永磁同步电机里,配合经典的SVPWM玩矢量控制,实测效果比纯PI方案抗扰动强不少。直接上干货,咱们从模型结构开始拆解。

模型主干是经典的双闭环结构:外层转速环用ADRC镇场子,内层电流环还是PI老搭档。重点说说ADRC部分,这玩意儿最大的亮点在于用扩张状态观测器(ESO)把系统内外扰动一锅端了。看这段核心代码:

function [u, z1, z2] = ADRC_2order(v, y, h, r0, h1, beta01, beta02, beta03, b0)
    persistent z1_prev z2_prev z3_prev;
    if isempty(z1_prev)
        z1_prev = 0; z2_prev = 0; z3_prev = 0;
    end
    
    % 跟踪微分器
    fh = fhan(z1_prev - v, z2_prev, r0, h1);
    z1 = z1_prev + h * z2_prev;
    z2 = z2_prev + h * fh;
    
    % 扩张状态观测器
    e = z1_prev - y;
    z3 = z3_prev + h * (-beta03*e);
    
    % 非线性反馈
    u0 = beta01*e + beta02*fal(e, 0.5, 0.01);
    u = (u0 - z3)/b0;
    
    % 更新状态
    z1_prev = z1; z2_prev = z2; z3_prev = z3;
end

这个二阶ADRC实现里藏着三个关键部件:TD(跟踪微分器)负责柔化指令,ESO实时估计系统扰动,最后的非线性组合把误差和扰动补偿打包输出。参数beta系列控制观测器带宽,b0是系统增益的倒数,调参时先确定b0再动beta比较稳妥。

电流环倒是传统PI的天下,不过要注意q轴电流给定来自转速环输出,d轴直接给零——这是经典id=0控制法。SVPWM部分用了七段式调制,注意死区时间补偿模块别漏掉,否则低速时转矩脉动会教你做人。

PMSM 永磁同步电机 ADRC 自抗扰控制 SVPWM matlab simulink 仿真 (1)该模型采用 matlab/simulink 2016b 版本搭建,使用matlab 2016b及以上版本打开最佳。 (2)该模型已经代为转换到各个常用版本。 【算法介绍】 (2)采用转速、电流双闭环控制; (3)转速环采用ADRC自抗扰控制器; (4)电流环采用PI控制器; (5)采用SVPWM矢量控制; 【简要技术说明文档和参考文献】 (1)成品模型原则上不提供技术; (2)本模型简要说明文档和运行视频。 (3)可要求simulink视频教程一份。

仿真时突发奇想给电机加载阶跃扰动,ADRC的转速恢复比PI快了近200ms。看这个转速响应曲线(配图示意):

Time(s) | Speed(rpm)
0.5     | 1000
0.6     | 突降500rpm负载
0.8     | 恢复至998 

抗扰性能主要得益于ESO的实时扰动估计,模型里的z3变量就是观测到的总扰动量。有意思的是当故意把电机参数设错30%,ADRC控制效果依然坚挺,这验证了其强鲁棒性。

最后提一嘴SVPWM的实现细节,用Simulink自带的Space Vector Generator模块时,注意设置正确的直流母线电压和PWM频率。实测载波频率10kHz时电流THD仅4.7%,算是不错的成绩。

需要模型实操视频的同志可以留言,记得用2016b以上版本打开,低版本可能会报模块不兼容——虽然提供了版本转换文件,但总有些诡异的兼容性问题。下期可能拆解ADRC参数整定技巧,想看的老铁扣个1。

更多推荐