3、谐波注入法(一):基于6次谐波注入的转矩脉动抑制原理与仿真

各位工程师朋友,咱们接着聊转矩脉动抑制。前面讲了电流谐波是怎么来的,今天咱们直接上手一个最经典的方法——6次谐波注入法

说实话,我在做电机控制的前两年,一直被6次转矩脉动折磨得够呛。尤其是跑低速重载工况时,那振动和噪声,客户直接投诉说“这电机是不是坏了”。后来我才意识到,问题出在反电动势和电流的谐波匹配上。

3.1 为什么偏偏是6次谐波?

先问大家一个问题:永磁同步电机的转矩脉动,主要频率成分是什么?

答案是6次基频。为什么会这样?

你想想看,三相永磁同步电机,每相的反电动势里都含有5次、7次谐波。5次谐波是负序的,7次谐波是正序的。它们相互作用,在电磁转矩里就产生了6次脉动分量。说白了,这就是个“差频”现象。

我个人的习惯是,拿到一个新电机,先做一次空载反电动势的FFT分析。看看5次和7次谐波的含量,基本就能判断出6次转矩脉动的严重程度。有一次我测到一个电机,5次谐波含量高达3.5%,7次也有2.8%,结果转矩脉动直接干到了额定转矩的12%。嗯,这种电机不做谐波补偿,根本没法用。

3.2 6次谐波注入的核心思想

谐波注入法的思路其实很直接:既然转矩脉动是谐波电流和谐波反电动势相互作用的结果,那我们就主动注入一些谐波电流,去抵消这个脉动

具体来说,我们在d-q轴的电流指令上,叠加一个6次谐波分量。这个6次谐波电流会产生一个额外的转矩分量,刚好和原来的6次转矩脉动相位相反、幅值相等。两者一抵消,转矩就平了。

这里有个关键点:注入的谐波电流,频率是6倍基频,但它在d-q轴上的表现形式是6次正序和6次负序的叠加。我刚开始做的时候,直接在d轴和q轴上各加了一个6次正弦波,结果转矩脉动反而更大了。后来才明白,注入的谐波电流必须和反电动势的谐波相位匹配,不是随便加个正弦波就行的。

核心公式:

注入的d轴6次谐波电流:id6 = Id6 · sin(6θe + φd6)

注入的q轴6次谐波电流:iq6 = Iq6 · sin(6θe + φq6)

其中θe是电角度,Id6、Iq6和φd6、φq6是需要优化的幅值和相位。

3.3 如何确定注入的幅值和相位?

这可能是大家最关心的问题。我给大家分享一个我在项目中实际用过的方法,分三步走:

  1. 离线辨识反电动势谐波:让电机空载运行,用示波器或者ADC采样反电动势波形,做FFT分析,提取出5次和7次谐波的幅值和相位。
  2. 计算理论注入量:根据电机参数(电感、磁链等),用公式反推出需要注入的6次谐波电流的幅值和相位。这一步可以用Matlab或者Python算一下。
  3. 在线微调:理论值往往有偏差,因为电感会饱和、温度会变化。我一般会在控制器里加一个简单的搜索算法,在理论值附近±20%范围内扫描,找到转矩脉动最小的点。

我曾经在一个项目里,理论计算出来的注入幅值是0.8A,相位是120度。结果实际调试下来,幅值要调到1.1A,相位要调到135度才最好。为什么?因为那个电机的磁路饱和比较严重,电感参数变了。所以大家记住:理论计算是基础,在线调试是关键

3.4 仿真验证:看看效果

光说不练假把式。咱们用Matlab/Simulink搭个模型看看效果。下面是一个简化的仿真代码框架:

% 永磁同步电机6次谐波注入仿真
% 参数设置
Rs = 0.05;      % 定子电阻
Ld = 0.4e-3;    % d轴电感
Lq = 0.4e-3;    % q轴电感
Psi_f = 0.1;    % 永磁磁链
P = 4;          % 极对数

% 反电动势5次、7次谐波参数
E5_amp = 2.5;   % 5次谐波幅值(V)
E5_phase = 30;  % 5次谐波相位(度)
E7_amp = 2.0;   % 7次谐波幅值(V)
E7_phase = -45; % 7次谐波相位(度)

% 计算需要注入的6次谐波电流
% 这里用简化公式,实际项目中需要更精确的计算
Id6_amp = 0.5;  % d轴6次谐波幅值
Id6_phase = 60; % d轴6次谐波相位
Iq6_amp = 0.8;  % q轴6次谐波幅值
Iq6_phase = 120;% q轴6次谐波相位

% 仿真主循环
for k = 1:N
    theta_e = mod(theta_e + omega_e*dt, 2*pi);
    
    % 基波电流指令
    Id_ref = Id_base;
    Iq_ref = Iq_base;
    
    % 叠加6次谐波
    Id_ref = Id_ref + Id6_amp * sin(6*theta_e + Id6_phase*pi/180);
    Iq_ref = Iq_ref + Iq6_amp * sin(6*theta_e + Iq6_phase*pi/180);
    
    % 电流环PI控制
    [Vd, Vq] = current_PI_control(Id_ref, Iq_ref, Id_fb, Iq_fb);
    
    % 转矩计算(包含谐波效应)
    Te = 1.5*P*(Psi_f*Iq_fb + (Ld-Lq)*Id_fb*Iq_fb + ...);
    
    % 记录数据
    Te_record(k) = Te;
end

% 计算转矩脉动
Te_avg = mean(Te_record);
Te_ripple = (max(Te_record) - min(Te_record)) / Te_avg * 100;
fprintf('转矩脉动: %.2f%%\n', Te_ripple);

个人经验:仿真时一定要把逆变器的非线性效应(死区时间、管压降)也加进去。我见过太多人仿真效果很好,一上硬件就翻车,就是因为忽略了逆变器本身也会产生谐波。建议在仿真模型里加入死区效应模块,这样结果更贴近实际。

3.5 仿真结果分析

我拿一个典型的10kW永磁同步电机做仿真,基频50Hz,额定转矩64Nm。结果如下:

工况 转矩脉动(峰峰值) 6次谐波含量 备注
未注入谐波 7.8 Nm (12.2%) 6.5 Nm 基波运行
理论注入 2.1 Nm (3.3%) 0.8 Nm 基于离线辨识参数
在线优化后注入 1.2 Nm (1.9%) 0.3 Nm 经过在线微调

看到没?从12.2%降到1.9%,效果非常明显。不过我要提醒大家,这个结果是在理想条件下得到的。实际硬件上,受限于电流环带宽和PWM分辨率,可能只能降到3%~5%左右。

注意:谐波注入不是万能的。如果电机本身的反电动势谐波含量特别大(比如超过5%),或者电感饱和严重,单纯靠6次谐波注入可能效果有限。这时候需要结合其他方法,比如电流预测控制或者迭代学习控制。我曾经在一个高饱和电机上试过,6次谐波注入只能把脉动从15%降到8%,最后还是加了重复控制器才搞定。

3.6 实现中的几个坑

最后跟大家聊聊实际实现时容易踩的坑:

  • 电流环带宽不够:6次谐波在高速时频率很高。比如电机跑到6000rpm,极对数4,基频就是400Hz,6次谐波就是2400Hz。你的电流环带宽至少要达到2400Hz的5倍以上,也就是12kHz,才能有效跟踪。我建议电流环采样频率至少20kHz起步。
  • 角度精度问题:谐波注入对角度精度要求很高。角度误差5度,效果可能就减半。我用过旋转变压器,也用过磁编码器,个人感觉磁编码器在低速时精度更好一些。
  • 饱和效应:注入的谐波电流会叠加在基波电流上,可能导致电流峰值超过逆变器容量。一定要做限幅保护,别让电流冲过头。

好了,关于6次谐波注入的原理和仿真,今天就聊到这儿。下一节咱们会讲更高级的谐波注入方法——多同步旋转坐标系下的谐波抑制,那个方法更灵活,但实现也更复杂。大家先把今天的内容消化一下,有问题欢迎交流。