永磁同步电机(pmsm,无位置传感器控制(扩张状态观测器,超螺旋滑模,扩展卡尔曼滤波) 脉振高频注入(有方波和正弦两种)仿真模型。 可以带负载!!书上的模型不能带 弱磁控制有电压弱磁和超前角弱磁

先说扩张状态观测器(ESO),这货能把系统扰动和未知状态一起给观测了。举个代码片段:

function dydt = ESO_System(t,y,u)
    b = 0.5;  % 系统增益
    dydt = [y(2);
            -b*y(2) + u + 10*sin(2*pi*t)];  % 故意加个扰动
end

这里故意塞了个10Hz的正弦扰动,ESO的牛批之处在于能把这种未知扰动给扒出来。实际调试时注意beta参数的调整,别让观测器带宽超过采样频率的一半,否则直接崩给你看。

超螺旋滑模(ST-SMC)是抗扰动的神器,核心在于设计双曲函数来削抖振。看这段控制率:

float sliding_surface = w_ref - w_actual;
float u_eq = (J/B)*sliding_surface;  //等效控制
float u_sw = K1 * sqrt(fabs(sliding_surface)) * sign(sliding_surface)
           + K2 * integral(sign(sliding_surface));  //切换控制

这里的K1和K2需要满足李雅普诺夫稳定条件,建议先用粒子群优化调参。实测中遇到过K2过大导致电流毛刺的问题,记得配合低通滤波器食用。

扩展卡尔曼滤波(EKF)在位置估计中属于老戏骨了。关键在雅可比矩阵的计算:

def jacobian_F(x):
    theta = x[2]
    return np.array([[1, 0, -Ts*x[1]*np.sin(theta)],
                     [0, 1, Ts*x[0]*np.cos(theta)],
                     [0, 0, 1]])

这个状态转移矩阵的线性化处理直接影响收敛速度。有个骚操作是把电周期分成12个扇区,每个扇区用不同Q矩阵参数,实测位置误差能降30%以上。

脉振高频注入分方波和正弦波两种玩法。方波注入的硬件实现简单:

SquareWaveGen -> BandPassFilter -> Clarke_Transform -> PhaseLockedLoop

但要注意死区补偿,否则高频电流会畸变。正弦注入更丝滑但计算量大,推荐用查表法生成sin(2θ)信号,配合自适应陷波滤波器食用更佳。

带负载仿真是教科书里不会说的秘密。在Simulink里加个动态负载模块:

function TL = load_torque(t)
    persistent count;
    if isempty(count), count=0; end
    if mod(t,0.5)<0.001
        count = mod(count+1,3);
    end
    TL = [0.5 1.0 1.5](count+1);  //突变负载
end

这种阶跃式负载最能考验控制器的鲁棒性。实测时发现EKF在负载突变时容易发癫,需要加入负载转矩前馈补偿。

弱磁控制方面,电压弱磁调d轴电流时要注意饱和问题:

if(Vdc < sqrt(vd^2 + vq^2)){
    delta_iq = (sqrt(Vdc^2 - vd^2) - vq) / Lq;
    id_ref -= delta_iq * K_weak;  //电压环弱磁
}

而超前角弱磁更适合高速场景,但角度补偿量超过30度就会导致转矩剧烈波动,建议配合MTPA曲线做分段补偿。

最后说个血泪教训:千万别直接用论文里的参数!某次把某顶会论文的ESO参数套到实际电机上,结果观测器直接发散把IGBT都给崩了。不同电机的电感、磁链参数差异巨大,一定要做参数辨识。

更多推荐