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 如何确定注入的幅值和相位?
这可能是大家最关心的问题。我给大家分享一个我在项目中实际用过的方法,分三步走:
- 离线辨识反电动势谐波:让电机空载运行,用示波器或者ADC采样反电动势波形,做FFT分析,提取出5次和7次谐波的幅值和相位。
- 计算理论注入量:根据电机参数(电感、磁链等),用公式反推出需要注入的6次谐波电流的幅值和相位。这一步可以用Matlab或者Python算一下。
- 在线微调:理论值往往有偏差,因为电感会饱和、温度会变化。我一般会在控制器里加一个简单的搜索算法,在理论值附近±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次谐波注入的原理和仿真,今天就聊到这儿。下一节咱们会讲更高级的谐波注入方法——多同步旋转坐标系下的谐波抑制,那个方法更灵活,但实现也更复杂。大家先把今天的内容消化一下,有问题欢迎交流。