☰
三次谐波注入原理与实现:如何突破SPWM电压利用率并逼近SVPWM
2026/10/5 12:47:30 网站建设 项目流程

前阵子有个刚入行的同事问我:直流母线540V,为什么普通SPWM带不动380V电机?我没直接回话,反手给他画了个波形。这个问题乍看是个基础题,实际牵扯到SPWM电压利用率的天花板,而打破这个天花板的钥匙,就是三次谐波注入。今天这篇就专门把这事讲透:三次谐波到底往哪儿注、注入系数怎么算,以及为什么“基波幅值的1/6”这个值,值得被叫作三次谐波注入的黄金分割点。

这篇内容适合正在做变频器、伺服驱动、UPS、光伏逆变器或者任何三相逆变器控制的人。不管你是刚接触SPWM的新手,还是已经用SVPWM但没仔细琢磨过调制波形态的老手,都可以从里面拿走点东西。我会从电压利用率为什么被卡住讲起,再手把手把数学推导和代码实现过一遍,最后分享一些我在实际调试中踩过的坑和排查方法。

1. 先算清楚账:SPWM的电压利用率到底卡在哪

1.1 一个真实场景:母线540V,为什么带不动380V电机

很多做电机驱动的朋友都遇到过这种情况:三相整流桥出来,直流母线电压大概是540V,后面接一个额定380V的异步电机,用纯SPWM调制,调制度已经拉到1了,电机空载还行,一带负载就转速掉、电流飙。用示波器看输出线电压,有效值怎么都到不了380V。

问题就出在SPWM的线性调制范围上。我这里用一个大家最常用的定义:电压利用率等于输出线电压基波峰值除以直流母线电压。纯SPWM在调制度M=1时,相电压基波峰值是Vdc/2,线电压基波峰值是√3倍的相电压峰值,也就是√3乘以Vdc/2,约等于0.866Vdc。换算成有效值,线电压有效值大约是0.612Vdc。

拿540V母线来算,线电压有效值就是540乘以0.612,约330V。你目标要输出380V,差了整整15%。这15%不是靠调高M能补回来的,因为M到1就已经进入过调制区了,再往上调波形就会削顶,电流畸变爆炸。所以,纯SPWM在这个系统里天生就喂不饱380V电机。

1.2 为什么M=1就是极限

载波是三角波,调制波是正弦波,两者比较产生PWM。当调制波幅值等于三角载波幅值时,正弦波峰顶刚好顶到100%占空比。一旦调制波幅值超过载波,顶部那一段就会失去线性关系,表现出来就是波形削顶。所以M=1就是这个方案的天花板。

这里很多初学者会问:那我能不能让M=1.1、M=1.2?硬件上能做,但那叫过调制。过调制不是不能用,而是电压利用率提升的同时,输出电压出现大量低次谐波,电流波形失真严重。传统V/F控制里偶尔允许浅过调制,但在高性能矢量控制里基本不敢碰。

所以核心矛盾就变成了:既不想进入过调制区,又想把输出电压往上抬。这时候大家就想到了一条路,给调制波做整形。你不是正弦波峰值顶到1吗?我把你峰值削下来一点,让基波成分还能继续增加。这就是三次谐波注入的出发点。

1.3 波形整形的思路:向调制波开口子

纯正弦调制波是sine函数,峰值必然在π/2处到达1,这个1就是限制。如果我在正弦波上叠一个三次谐波分量,三次谐波在90度附近刚好是负值,可以把调制波的总峰值往下压。这就是“削峰填谷”。

但要强调一点:三次谐波注入不是简简单单往输出波形里加三次谐波污染。三相三线系统里,三次谐波是零序分量,在对称负载下根本没有通路,所以线电压里不会出现三次谐波。我们注入的只是一个存在于调制波内部的数学分量,最终受益的是基波电压的线性输出能力。

打个比方:原来一个一米八的人过限高1.5米的门,直接被卡死。三次谐波注入就是让这个人稍微弯腰低头,身高看起来矮了一截,但他走过去之后该有的骨架一点没变。这里的“骨架”就是基波分量,“弯腰低头”就是三次谐波对峰值的压制。

2. 三次谐波注入的数学:1/6这个数是怎么来的

2.1 写出带注入的调制波

设调制波为:

g(θ) = M [ sinθ + k sin(3θ) ]

这里θ是电角度,M是基波的调制度,k是三次谐波相对于基波幅值的比例系数。注意这个定义方式,三次谐波幅值不是固定常数,而是跟随基波幅值同步缩放,即三次谐波注入幅值 = k × M。比如后面讲的k=1/6,就是指在任意调制度下,三次谐波分量始终是基波分量的六分之一。

为什么用相对比例而不是固定幅值?因为这样调制波形态不随M变化,峰值和M保持线性关系,工程实现最简单。实际写代码的时候,modWave = M * (sinθ + k * sin3θ),M变化时自动缩放。

现在问题就变成:k取多大,才能让调制波g(θ)的峰值尽可能小?峰值越小,M能推得越高,而M越高,基波输出电压就越高。

2.2 极小化峰值:从波形峰值推导k

我们先把M拿出来,只看括号里的部分:

f(θ) = sinθ + k sin(3θ)

目标是找k,使max|f(θ)|最小。这是一个典型的极小极大问题。要解它,先找f的极值点。

求导:

f'(θ) = cosθ + 3k cos(3θ)

把cos(3θ)用三倍角公式展开:

f'(θ) = cosθ + 3k (4cos³θ - 3cosθ) = cosθ + 12k cos³θ - 9k cosθ = cosθ (1 - 9k + 12k cos²θ)

令f'(θ)=0,可以得到两类极值点:

  • cosθ=0,也就是θ=90度和270度;
  • cos²θ=(9k-1)/(12k),这个解只有当k大于1/9时才存在。

当k取不同值时,f(θ)的峰值位置会变化。k特别小时,比如k=0.05,三次谐波分量太弱,压不住正弦波在90度处的峰值,f的最大值仍然出现在θ=90度,数值接近1-k。k慢慢增大,波形峰值逐渐下降。当k增大到超过1/9后,θ=60度附近开始出现新的局部极值点,而且这个极值点会随着k增大先下降后上升。整个过程中,存在一个k值能让波形的整体峰值达到最小。

标准推导的结论是k=1/6。代入验证:

f(θ) = sinθ + (1/6) sin(3θ)

在θ=60度处:

f(60°) = sin60° + (1/6) sin180° = √3/2 + 0 ≈ 0.866

在θ=90度处:

f(90°) = sin90° + (1/6) sin270° = 1 - 1/6 = 5/6 ≈ 0.833

在θ=30度处:

f(30°) = sin30° + (1/6) sin90° = 0.5 + 1/6 ≈ 0.667

所以在k=1/6时,整个调制波的最大值等于√3/2,约0.866。这就意味着原来峰值压到1的正弦波,经过三次谐波注入后,峰值被压到了0.866。换句话讲,基波调制度M最多可以推到1/0.866 = 2/√3 ≈ 1.1547,仍然不碰载波峰值。

这个结果就是电压利用率从0.866Vdc提升到Vdc的数学根据。

2.3 为什么1/6被称为黄金分割点

其实“黄金分割点”这个叫法不是严格的数学定义,而是工程人对这个数值的一种评价。0.618之于线段分割,是在美观和比例之间的一个平衡点;1/6之于三次谐波注入,是在“削峰能力”和“反噬风险”之间的平衡点。

你可能会觉得,k大一点是不是削峰能力更强?不是。k太大,三次谐波分量在0到60度之间会推高波形,过了某个点后波形峰值反而回升。k太小,90度处压不下去,峰值还是高。只有k=1/6这个位置,既能把正弦波峰压到最低,又不会在波形的其他位置产生新的更高尖峰。这个甜点位,从数学上看是极值极小化问题的最优解,从工程手感上看就是黄金分割级别的好用数值。

另外一个很有意思的点是:2/√3这个提升倍数,φ≈1.618的黄金比例正好差得不远。虽然没到严格相等,但在工程美学上,这种“最优解刚好出现在一个简洁分数附近”的现象,总会让人产生一种数学结构上的美感。

2.4 马鞍波与SVPWM的关系

把k=1/6代入调制波,画出波形,你会看到一个长得像马鞍的曲线。正弦波在峰顶被压平,在过零点附近又鼓起一个包。这个马鞍波正是SVPWM在数字实现中等价于SPWM叠加三次谐波注入的直观证据。

SVPWM的调制波本质上是正弦波叠加了一个零序分量。在最大线性调制时,这个零序分量的三次谐波成分刚好等效于基波的1/6。所以你在DSP里直接跑SVPWM,和先做SPWM再注入1/6三次谐波,得到的外部特性几乎一致。区别在于SVPWM的零序分量会随着调制度和扇区变化,调制波形态更灵活,而固定1/6注入是它最简单的一种近似。

这也是为什么我说,搞懂三次谐波注入,就等于搞懂了SVPWM的一半。你看SVPWM的马鞍波,本质上就是今天算出的这个f(θ)。

3. 黄金分割点实操:注入系数、代码实现与工程取舍

3.1 如果k值没选对,波形会发生什么

我经常在调试现场直接用示波器看调制波,这一步能直观判断k选得对不对。下面几种情况我都遇到过:

k偏小,比如k=0.05。三次谐波分量太弱,调制波峰值仍然被90度附近的正弦波主导,峰值接近0.95左右,削峰效果有限,电压利用率只能提升一点,达不到1.1547倍。

k取1/6,波形峰值正好压在0.866,60度和120度附近高度一致,90度处稍微凹陷,整个波形的峰谷交替均匀,这是最舒服的状态。如果你把基波调制度M拉到1.1547,调制波峰值刚好等于1,每个波峰都刚好不削顶。

k偏大,比如k=0.3。三次谐波分量过强,波形在0到60度之间隆起,峰值超过1。这时候你不仅没有获得更高的电压利用率,反而会提前进入过调制。有些工程师为了“多注入一点”去追求更高的输出电压,结果适得其反,这个坑很典型。

所以我的建议是:除非有特殊原因,否则固定用k=1/6。这个值在全调制度范围内都不会把调制波峰值推出合理区间,省心又安全。

3.2 数字实现:用STM32实现SPWM+三次谐波注入

接下来给一套可以直接抄作业的实现思路。下面以STM32的高级定时器做三相PWM输出为例。

先确定几个参数:

  • 载波频率:10kHz
  • 三角载波幅值标幺化为1,对应定时器从0到ARR的三角波
  • 输出调制波标幺值范围:-1到1
  • PWM比较值CMP的计算:CMP = (调制波值 + 1) / 2 × ARR

核心代码长这样:

#include "math.h" #define THIRD_HARMONIC_RATIO (1.0f / 6.0f) float calcModulationWave(float theta, float M) { float fundamental = sinf(theta); float third = sinf(3.0f * theta); float modWave = M * (fundamental + THIRD_HARMONIC_RATIO * third); return modWave; } // 在PWM更新中断中调用 void PWM_UpdateISR(float theta, float M, uint16_t ARR) { float modWave = calcModulationWave(theta, M); // 限幅,防止意外过调制 if (modWave > 1.0f) modWave = 1.0f; if (modWave < -1.0f) modWave = -1.0f; // 映射到定时器比较值 uint16_t cmp = (uint16_t)((modWave + 1.0f) * 0.5f * (float)ARR); // 边界保护,避免极窄脉冲 if (cmp < 2) cmp = 2; if (cmp > ARR - 2) cmp = ARR - 2; // 写三个比较寄存器 TIM_CaptureCompare1Set(&htim, cmp); TIM_CaptureCompare2Set(&htim, cmp); TIM_CaptureCompare3Set(&htim, cmp); }

如果平台没有浮点运算单元,建议把sin表预计算成定点表,用Q15格式存储。角度可以用一个递增的累加器实现,每载波周期增加一个角度步进。注意三倍角公式:sin3θ = 3sinθ - 4sin³θ,所以只用存一张sin表,再查表后用三倍角公式算三次谐波,能省不少内存。

// 定点化示例,sinLut[4096] 为Q15格式的sin表 int32_t idx = (uint32_t)(theta * 4096.0f / (2 * M_PI)) & 4095; int32_t sinVal = sinLut[idx]; int32_t sin3Val = 3 * sinVal - ((4 * sinVal * sinVal) >> 15) * sinVal / 32768;

这个定点化方案我用在低成本单片机上跑过,载波8kHz,三相全开,CPU占用依然可以接受。比例系数要用Q15格式的1/6,也就是5461左右,别写成浮点。

3.3 电压利用率实测:从330V到381V

用一台2.2kW异步电机做实验,母线电压540V,设定输出频率50Hz。先用纯SPWM,M=1,用功率分析仪测线电压有效值,得到的结果和理论计算一致,约330V。电机空载电流偏大,带载后转速往下掉。

然后改为三次谐波注入,k=1/6,M逐渐从1提高到1.1547。注意这里M要慢慢加,同时在电流环或V/F曲线里同步调整电压给定。最终线电压有效值稳定在约381V,刚好覆盖380V额定电压。这个提升比例就是1.1547倍。

对比数据整理如下:

调制方式相电压基波峰值(标幺到Vdc)线电压有效值@Vdc=540V带380V电机能力
纯SPWM0.5 Vdc330.7V不足,电压缺口约15%
SPWM+1/6三次谐波0.577 Vdc381.8V刚好满足
SVPWM0.577 Vdc381.8V刚好满足
方波/过调制0.637 Vdc421.6V满足,但谐波大

可以看到,SPWM加三次谐波注入后的电压利用率,和SVPWM是完全一致的。如果你的系统原来用的是纯SPWM,只需要改十几行代码,就能白拿15%的电压余量,这是非常划算的一个改动。

3.4 单相系统别乱用:三次谐波注入的适用范围

必须提醒一句:三次谐波注入在三相三线系统里有效,因为三次谐波在三相之间是零序关系,线电压里不会出现。但如果你是单相逆变器或者三相四线系统,情况就完全不同。

单相系统里只有一相,调制波里注入的三次谐波会直接反映到输出电压上,负载上会出现大量三次谐波电流,纯纯的波形污染。三相四线系统如果有中线,三次谐波电流会从中线溜回直流侧,造成中线过流。所以,这个技巧只适合三相三线对称负载。

还有一种情况是电机中性点被引出使用,比如某些特殊电机或测试台架,这时候三次谐波也会形成回路。遇到这种非标准接法,别直接套k=1/6,先确认系统拓扑再说。

4. 调试实录:常见问题与排查技巧

4.1 注入三次谐波后,输出相电压不是正弦,别慌

第一次在马鞍波模式下用示波器看输出相电压波形时,很多人会怀疑自己代码写错了。相电压波形里明显带着一个凹坑,看起来像失真,但线电压波形是干净的正弦调制出来的PWM序列。这是正常的。

判断标准只有一个:线电压的基波分量是否符合预期。我习惯直接用功率分析仪看线电压的THD和基波有效值,而不是用肉眼判断波形形状。如果线电压有效值接近理论值,且电流波形正弦度良好,说明调制波整形是成功的。

有一个实操小技巧:在V/F开环调试时,给定M=1.0,分别测纯SPWM和注入三次谐波后的线电压。前者约330V,后者约381V。两者一对比,就能确认注入代码生效了,同时也能验证你计算出来的理论母线电压值是否准确。

4.2 波形削顶:先查M,再查k,最后查死区

如果调试时发现电流波形出现平台状畸变,大概率是进入了过调制区域。排查顺序是这样的。

第一步查M。M是不是超过了1.1547?很多人写代码时直接把M的上限设成了1.0,以为这就是最大输出,实际上注入之后M可以推到1.1547。反过来,如果M的上限没放开,你永远吃不到三次谐波注入的红利。

第二步查k。k有没有被无意中改成固定常数而不是相对比例?我见过一个项目,开发人员图省事把三次谐波直接设成固定幅值0.3,结果低调制度时波形严重畸变,峰值超出载波范围,电流噪声特别大。正确做法是随M缩放。

第三步查死区。如果M和k都正常,但电流波形在过零点附近有毛刺,多半是死区补偿没做好。三次谐波注入后,电流过零点附近调制波比较平缓,占空比变化率低,死区造成的电压误差更容易暴露,此时需要做死区补偿或者电流极性判断补偿。

4.3 三次谐波对电机噪声和效率的影响

有朋友问,注入三次谐波会不会让电机噪声变大?电机的电磁噪声主要由气隙磁场中的谐波分量和开关频率附近的高频分量决定。三次谐波作为零序分量,在三相三线系统中不产生旋转磁场中的有效分量,所以对基波转矩没有直接贡献,也不会制造额外的低频转矩脉动。

实际带载测试下来,三次谐波注入后电流波形更接近理想正弦,因为调制比推高了,PWM的等效分辨率更高。有些工况下电机噪声反而会下降。但如果你的PWM载波比较低,比如300Hz载波带50Hz输出,同步调制切换点的电流毛刺会变得明显,这时候需要做同步调制和相位对齐,而不是怀疑三次谐波注入本身。

效率方面,三次谐波注入不改变开关次数,损耗主要增加在控制器的计算量上。真正影响效率的是调制波峰值降低后,输出电压的提升让你可以在更低母线电压下工作,系统整体损耗下降。在电池供电的逆变器里,这个特性可以折算成实实在在的续航提升。

4.4 一组可复现的参数参考

这里给一组我在电机驱动平台上验证过的参数,方便你做仿真或者实验对照。

  • 直流母线电压:540V
  • 载波频率:10kHz
  • 基波频率:50Hz
  • 调制方式:SPWM + 1/6三次谐波注入
  • 开关器件:IGBT,死区时间3μs
  • 电机参数:2.2kW,380V,50Hz,额定电流5A

仿真观察点:

  • 调制波峰值:理论值0.866,仿真值0.8661
  • 线电压基波有效值:理论值381.8V,仿真/实测381V左右
  • 相电流THD:满载时小于5%
  • 母线电压利用率:1.0

如果调试阶段不方便用功率分析仪,可以用两个电压探头测线电压,再用示波器的数学运算功能做FFT,看50Hz分量的幅值,换算成有效值后和理论值对比。

4.5 最后说一个我踩过的坑

做三次谐波注入时,最容易忽略的是同步调制的相位问题。刚开始我直接在开环V/F的代码里加了三次谐波注入,载波频率固定10kHz,电机运行到30Hz以下时,电流波形还正常。结果升到40Hz以上,电流开始波动,噪声变大。查了半天,发现是提前角度没做补偿。

原因在于,调制波在普通SPWM下是纯正弦,相位延迟对输出影响不大。但注入三次谐波后,调制波包含3倍频分量,同样的相位延迟作用下,三次谐波的相位偏差是基波的3倍。载波比降低到一定程度,这个相位误差就会显著影响合成电压矢量。解决办法是提高同步载波比,或者做载波相位实时补偿。调试时一定要在低速和高速两个区间都验证波形,不能只盯着50Hz一个点。

还有一个细节:限幅函数别乱加。有些代码里为了安全,把调制波直接限幅到±1,这本身没问题。但如果你在M<1.1547时就让限幅动作,等于人为把电压利用率又压回去了。正确做法是先算好边界,限幅只作为最后的保护,正常工作时不应该触发。调试的时候可以加一个计数器,一旦限幅动作就记录下来,看看是不是常态触发。

从纯SPWM切到三次谐波注入,整个过程就是一个从330V到381V的故事。这个改动不复杂,代码层面十几行,但背后的数学逻辑值得每个做电力电子的人吃透。等你想明白1/6这个数是怎么来的,再看SVPWM、看空间矢量合成,很多原来觉得抽象的东西都会串起来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询