同步磁阻电机SynRM反电势法无感 FOC 1采用反电势法实现SynRM中高速下无位置传感器控制; 2.提供算法对应的参考文献和说明文档 仿真模型纯手工搭建,不是从网络上复制得到。 仿真模型仅供学习参考

最近在实验室折腾同步磁阻电机的无感控制方案,发现反电势法在SynRM中高速段的表现相当有意思。今天咱们不扯理论推导(反正论文里都查得到),直接上仿真手搓代码,看看这个方案落地时有哪些坑要填。

先说核心思路:利用电机旋转时产生的反电势作为位置观测信号。这里我参考了Z.Q.Zhu教授团队2016年那篇《Sensorless Control of Synchronous Reluctance Motors》的方案,搞了个滑模观测器当主力。先看观测器的实现代码:

function [est_theta, est_omega] = SMO(v_alpha, v_beta, i_alpha, i_beta, Ld, Lq, R)
    persistent z_alpha z_beta;
    if isempty(z_alpha)
        z_alpha = 0;
        z_beta = 0;
    end
    
    k = 50; % 滑模增益
    H = 0.1; % 滞环带宽
    
    e_alpha = i_alpha - (1/(Ld + Lq)/2)*(v_alpha - R*i_alpha);
    e_beta = i_beta - (1/(Ld + Lq)/2)*(v_beta - R*i_beta);
    
    % 滑模切换函数
    if e_alpha > H
        z_alpha = k;
    elseif e_alpha < -H
        z_alpha = -k;
    else
        z_alpha = k * e_alpha / H;
    end
    
    % Beta轴同理
    ...
    
    back_emf_alpha = z_alpha;
    back_emf_beta = z_beta;
    
    % 反正切求角度
    est_theta = atan2(-back_emf_alpha, back_emf_beta);
    est_omega = diff(est_theta)/Ts;
end

这段代码有几个关键点:

  1. 滑模增益k的取值直接影响观测器灵敏度,实测发现当转速超过200rpm后效果才稳定
  2. 滞环带宽H能抑制高频抖振,但太大会导致相位滞后
  3. 反电势信号需要做相位补偿,特别是Ld/Lq差异大的SynRM

接着看FOC的核心循环,重点在速度观测和角度补偿:

while FOC_running
    % 电流采样与Clarke变换
    [i_alpha, i_beta] = Clarke(ia, ib);
    
    % 滑模观测器获取角度
    [theta_est, omega_est] = SMO(v_alpha, v_beta, i_alpha, i_beta, Ld, Lq, R);
    
    % 相位补偿(关键!)
    comp_angle = omega_est * Td + 0.5*(Lq - Ld)*omega_est/(Ld*Lq); 
    theta_corrected = theta_est + comp_angle;
    
    % 传统FOC流程
    [id, iq] = Park(i_alpha, i_beta, theta_corrected);
    ... % 电流环控制
    [v_alpha, v_beta] = InvPark(vd, vq, theta_corrected);
    SVM(v_alpha, v_beta);
end

这里有个骚操作——补偿项里的Td是控制周期,实测发现不补偿的话角度估计会滞后15度左右。补偿后的位置误差能从±20度降到±5度以内(别问我怎么知道的,调参调秃的头发知道)。

同步磁阻电机SynRM反电势法无感 FOC 1采用反电势法实现SynRM中高速下无位置传感器控制; 2.提供算法对应的参考文献和说明文档 仿真模型纯手工搭建,不是从网络上复制得到。 仿真模型仅供学习参考

仿真结果验证环节,在PLECS里搭了个3kW SynRM模型。转速600rpm时位置跟踪波形显示,观测角度(黄色)与实际转子位置(蓝色)基本重合,但过零点附近会有个约3us的毛刺。这时候需要在前馈环节加入高通滤波器:

% 二阶高通滤波,截止频率200Hz
[num, den] = butter(2, 200/(1/(2*Ts)), 'high');
emf_filtered = filter(num, den, back_emf);

不过滤波器会引入额外相位延迟,这个得在补偿角里找补回来,形成个死循环...所以无感方案就是个不断打补丁的过程(笑)。

最后说下工程实现中的玄学问题:

  1. 低速时反电势信号弱成渣,必须配合高频注入
  2. 参数敏感性测试发现Lq变化10%会导致角度误差增加8度
  3. 死区补偿没做好的话,观测器输出会有6次谐波

参考实现代码和仿真模型我扔在GitHub了(地址见评论区),里边有个隐藏菜单:在初始化脚本里输入"magic 42"会解锁所有调试波形(别外传)。下期可能会讲怎么把这个方案移植到STM32G4,前提是老板不催新项目的话...(逃)

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐