☰
单极性SPWM与双极性SPWM对比:逆变器波形质量与效率的取舍
2026/9/28 1:52:29 网站建设 项目流程

做逆变器这几年,最常被同行和刚入门的朋友问到的一个问题:同样一块全桥板子,为什么有人调出来的正弦波干净得像信号发生器,有人一上电就炸管,波形乱得跟锯齿一样?我把话放这儿,八成问题都出在SPWM的调制方式上。今天就把单极性SPWM这个方案从头到尾拆开讲一遍,顺带把双极性SPWM拉出来做一次硬碰硬的对比。这篇文章面向正在搞逆变器、UPS、光伏微逆、或者想在STM32上输出SPWM的工程师和爱好者,看完你不仅能自己设计滤波参数、写波形生成逻辑,还能在炸管之后快速定位问题。

全文不玩虚的,直接从原理讲到参数计算,再到仿真、上板子实测,最后是问题排查。单极性和双极性的优劣不会只甩结论,我会把为什么单极性纹波更小、为什么双极性动态响应更好这些底层原因也讲清楚。

1. 动手之前,先把概念捋清楚

1.1 SPWM到底是什么

SPWM,全称Sinusoidal PWM,正弦脉宽调制。它的核心思路是用一串宽度按正弦规律变化的脉冲,去等效一个正弦波。你看示波器上那些密密麻麻的矩形波,觉得跟正弦不沾边,但把时间尺度拉大,经过低通滤波器之后,脉冲的平均值就构成了一条正弦曲线。

类比一下:你用手指在沙地上划一条线,不可能一次划出完美的直线,只能一点一点地挪,挪得越密、每段长度越精确,最终划出来的线就越直。SPWM干的就是这件事,只不过它划出来的是正弦。

判断SPWM好坏的标准有两个:一是脉冲宽度序列能不能精确复现正弦的瞬时值,二是实现这个序列的成本(开关损耗、谐波含量、控制复杂度)高不高。单极性和双极性的区别,本质上是对这两个标准的不同取舍。

1.2 逆变器输出为什么非要SPWM

有人会问:直接用一个方波逆变不行吗?方波逆变器结构简单、成本低,但方波含有大量低次谐波,根本不能满足大多数负载的供电要求。尤其是电机负载,方波里的谐波会造成额外的发热和噪音,还能让电机转矩脉动大得吓人。

SPWM的本质是让逆变器在开关频率上做“高速开合”,从而把谐波推到高频段。高频谐波用一个小电感就能滤掉,而低频段只留下我们想要的50Hz基波。这就是为什么SPWM成为逆变器的主流调制方案。简单说,SPWM是用开关频率换波形质量,用控制复杂度换滤波成本。

1.3 单极性、双极性,差在一个“电平”

双极性SPWM每时每刻都在正负两个电平之间来回跳变,输出电压波形只有+Udc和-Udc两种状态,永远没有零电平。单极性SPWM则多了一个零电平状态,输出电压可以在+Udc、0、-Udc三种状态之间切换。

这正是“单极性”名字的来历:在一个开关周期内,输出电压只在0到+Udc之间切换(正半周),或在0到-Udc之间切换(负半周),极性只有一种,而不是在正负之间来回翻转。别看只是多了一个零电平,这一个状态让滤波电感上的电流纹波、开关管的损耗、以及EMI特性都发生了质的变化,后面我会用实测数据说明。

2. SPWM波形怎么来:调制原理与参数计算

2.1 自然采样法、规则采样法与不对称规则采样法

SPWM的经典生成方式是“调制波与载波比较”:一个高频三角波(载波)和一个低频正弦波(调制波)送进比较器,三角波高于正弦波时输出高电平,低于时输出低电平。交点的位置决定了脉冲宽度。这个方案叫自然采样法,模拟电路时代很常用,缺点是交点的方程是超越方程,用单片机很难实时求解。

数字控制时代,主流做法是规则采样法。规则采样法在每个载波周期的固定时刻采样正弦波的值,用这个采样值在一个周期内保持不变,近似求出脉冲宽度。对称规则采样法只在三角波顶点采样一次,不对称规则采样法在顶点和底点各采样一次。不对称规则采样的精度高于对称规则采样,谐波更小,是目前DSP和STM32实现的主流方式。

实际工程里,你会发现“规则采样”和“自然采样”在调制比不高时差别很小,但在调制比接近1时,自然采样法的脉冲宽度失真明显,会出现过调制。这也是为什么很多成熟逆变器方案宁愿用一个很大的正弦表,用不对称规则采样来避免脉冲宽度计算误差。

2.2 载波频率、调制比、死区,三个参数怎么定

载波频率是SPWM系统里最重要的参数之一。载波越高,谐波越容易被滤除,但开关损耗也会线性上升。对MOSFET,10kHz到20kHz是甜点区,既能避开人耳听觉范围,又不会让管子热得离谱。IGBT一般只能跑到10kHz左右,再高开关损耗就盖不住了。

调制比m定义为正弦调制波峰值与三角载波峰值之比,也叫调制度。m最大只能到1,超过1就进入过调制区,输出电压基波幅值不再线性增大,但谐波会急剧增加。工程上一般留10%的余量,长期运行调制比控制在0.85到0.95之间。

死区是同一桥臂上下管为了防止直通而强制插入的延迟时间。死区太短,管子关断来不及,上下管直通炸模块;死区太长,输出电压畸变变大,还会损失基波幅值。对常见的IGBT,死区取1到3微秒,对MOSFET,取200到500纳秒比较靠谱。STM32的定时器可以直接配置死区时间,硬件上会自动插入。

2.3 电压利用率86.6%这个数是怎么来的

很多文章提到SPWM的电压利用率最高只有86.6%,很多人一头雾水。这里要澄清一下:这个86.6%指的是三相SPWM逆变器的线电压利用率,不是单相全桥的结论。

推导过程并不复杂。设直流母线电压为Udc,三相逆变器的每一相输出相对于母线中点来说,最高只能到±Udc/2。当调制比m=1时,相电压基波幅值最大为:

  • 相电压基波幅值:Up = Udc / 2

线电压是两相电压之差,幅值等于相电压幅值的根号3倍:

  • 线电压基波幅值:Ul = Udc / 2 × √3 ≈ 0.866 × Udc

所以线电压基波峰值最多是直流母线电压的86.6%。如果不用SPWM而改用方波,电压利用率能到100%以上,但谐波爆炸,得不偿失。如果想既保留SPWM的谐波特性又提高电压利用率,可以注入三次谐波,或者用SVPWM空间矢量调制,能把利用率提到100%。

单相全桥逆变器没有这个限制。全桥输出的是两个桥臂之间的电压差,正半周时可以在+Udc和0之间切换,负半周在0和-Udc之间切换。调制比m=1时,输出基波幅值可以达到Udc,电压利用率是100%。

3. 主电路拓扑与滤波参数设计:别急着写代码

3.1 单极性SPWM为什么必须用全桥

半桥逆变器输出端相对于母线中点最多只有±Udc/2,而且没有零电平状态可选,做不了真正意义上的单极性输出。所以要做单极性SPWM,必须用全桥拓扑,四个开关管组成H桥。

全桥的四个管子分成两组:左桥臂(Q1/Q2)和右桥臂(Q3/Q4)。正半周时,Q4保持导通,Q1和Q2高频互补动作,输出端在+Udc和0之间切换;负半周时,Q3保持导通,Q1和Q2继续高频互补,输出端在0和-Udc之间切换。这样每个开关周期内,输出电压只在一个极性和零之间摆动,这就是单极性。

这种结构的妙处在于,高频动作的只有一只桥臂的两个管子,另外一只桥臂的两个管子只做50Hz低频换向,开关损耗直接降了将近一半。而且输出电压的跳变幅度是Udc,而双极性SPWM的跳变幅度是2Udc,电感电流纹波也会显著减小。

3.2 LC滤波参数怎么算

逆变器输出端必须加低通滤波器,把SPWM的高频分量滤掉。最常见的是一阶LC滤波器,电感和电容串联到负载前面。设计原则有两条:谐振频率要远高于基波50Hz,至少10倍以上;同时要远低于开关频率,一般取开关频率的1/10到1/5。

举个例子,开关频率20kHz,谐振频率取2kHz左右比较合适。计算公式:

f0 = 1 / (2π√(LC))

假设取L=3mH,C=2.2uF,算一下谐振频率:

f0 = 1 / (2π√(3×10⁻³ × 2.2×10⁻⁶)) ≈ 1960Hz

这个频率对50Hz基波几乎零衰减,对20kHz纹波有约20dB以上的衰减,效果就很好。如果输出功率大、负载电流大,可以适当减小电感、增大电容,但电容太大会让空载电流变大,逆变器空载损耗增加。这是一个典型的取舍,没有绝对最优,只有适不适合你的工况。

3.3 母线电容和开关管耐压怎么选

直流母线电容主要有两个作用:一是给高频脉冲电流提供低阻抗通路,二是抑制直流输入电压的波动。容量太小,母线电压带载后会剧烈跌落,输出波形会塌陷。一般按每千瓦输出功率配1000到2000uF电解电容,再并联一个0.1到1uF的CBB高频电容,用来吸收开关尖峰。

开关管的耐压按1.5到2倍母线电压选。母线电压400V的时候,管子耐压最少650V,保险起见选800V以上的MOSFET或者600V的IGBT。压降裕量不够的话,关断瞬间的尖峰电压很容易击穿管子,这是炸管的一个重要原因。

4. 从仿真到上板,完整走一遍单极性SPWM实现

4.1 先拿仿真验证思路

不建议一上来就焊板子。先用Matlab/Simulink或者PLECS搭一个全桥逆变模型,把单极性SPWM的控制逻辑跑通了再动硬件。仿真里重点看三件事:输出波形是否正常、电感电流纹波是否符合预期、死区效果是否正确。任何逻辑错误,在仿真里暴露出来要比在硬件上炸管成本低得多。

仿真模型搭建也不复杂:直流源400V接到全桥,桥臂中点接LC滤波器和电阻负载。载波用三角波发生器,频率20kHz。调制波用50Hz正弦波,幅度按调制比m=0.9设置。四个开关管的驱动信号用比较器计算出来。重点在于把Q1/Q2的互补驱动做对,还要加入死区时间,否则仿真里也会看到直通大电流。

4.2 STM32生成SPWM的工程细节

硬件方案里,我习惯用STM32的定时器PWM模式。核心思路是:定时器以中心对齐模式工作,自动重载值ARR决定了载波频率,比较寄存器CCR决定每个周期的脉冲宽度。CCR的值由一个预先生成的正弦表决定,更新定时器触发时从表中取出下一个值写入CCR。

载波频率计算公式为:

fs = fclk / (ARR + 1) / 2

假设定时器时钟84MHz,希望得到20kHz载波:

ARR = 84×10⁶ / (2×20×10³) - 1 = 2099

CCR的计算需要做归一化。中心对齐模式下,当CCR=ARR时输出占空比接近100%,当CCR=0时占空比接近0%。要输出一个调制比m的正弦波,正弦表第i个点的CCR可以这样算:

CCR[i] = (uint16_t)((ARR + 1) × (0.5 - 0.5 × m × sin(2πi/N)))

其中N是一个工频周期内的采样点数。N取多少呢?如果载波20kHz,工频50Hz,一个周期有400个载波周期,所以N=400刚好一一对应。取大了,比如1024,载波周期和数据更新率就对不上,要么放弃部分点,要么提高载波频率,实际工程中要提前算好这个匹配关系。

4.3 单极性调制的核心:右桥臂换向逻辑

单极性SPWM在代码层面的关键点,不是高频桥臂怎么发PWM,而是低频桥臂什么时候换向。换向点必须和调制波过零点对齐。正半周时让Q4常通,负半周时让Q3常通,如果换向点不准,输出电压在过零附近会出现畸变,也就是常说的过零失真。

一个省事的方法是让低频桥臂的驱动信号也由定时器产生,占空比50%,频率50Hz,和正弦波过零同步。你可以用另一个定时器输出50Hz方波,在正弦表索引跳变到0的时候同步改变低频桥臂的输出电平。注意这里必须加软件滞回,否则电流方向接近零时电平抖动,容易产生毛刺。

另外提一句“单极性倍频”方案,它也属于单极性范畴,但四个管子全都在高频动作,只是左右两个桥臂的驱动相位错开,让输出电压在同一个开关周期内出现正负两个脉冲,等效输出纹波频率翻倍。它的优点是没有低频桥臂的过零换向问题,但开关损耗比经典单极性大。要求不高的场合可以直接用这个方案,省心不少。

这里我贴一段简化代码逻辑,展示高频桥臂和低频桥臂的基本配合:

// 伪代码,展示单极性SPWM的核心控制逻辑 volatile uint16_t sin_index = 0; void TIM1_UP_IRQHandler(void) { // 20kHz载波中断,更新高频桥臂比较值 TIM1->CCR1 = sin_table[sin_index]; // Q1 PWM TIM1->CCR2 = sin_table[sin_index]; // Q2 PWM,互补输出带死区 // 低频桥臂换向:50Hz,每次工频周期翻转 if (sin_index == 0) { HAL_GPIO_WritePin(Q4_GPIO_Port, Q4_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(Q3_GPIO_Port, Q3_Pin, GPIO_PIN_SET); } else if (sin_index == 200) { HAL_GPIO_WritePin(Q3_GPIO_Port, Q3_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(Q4_GPIO_Port, Q4_Pin, GPIO_PIN_SET); } sin_index++; if (sin_index >= 400) sin_index = 0; }

注意上面这段只是说明逻辑关系,实际工程里低频桥臂的换向建议用独立定时器或者比较器来做,千万别放在高优先级中断里用if判断,否则中断响应时间稍有抖动,过零失真就会立刻体现出来。

4.4 驱动电路设计要点

全桥高边的MOSFET或IGBT需要用自举驱动或者隔离驱动。自举驱动方案简单,成本低,但占空比接近1时自举电容充不上电,高边驱动会失效,所以在单极性SPWM高频桥臂占空比接近满调制的场合,要特别留意自举电容的容量,一般选0.1uF到1uF的CBB电容,并保证有足夠的刷新时间给自举电容充电。

如果输出功率大,或者调制比长期接近1,建议改用隔离驱动芯片,配隔离电源。别小看这一步,自举驱动在满载时波形畸变的概率远比你想的高。

5. 单极性与双极性逐项对线,谁更适合你的场景

5.1 输出电压纹波与谐波对比

双极性SPWM每个开关周期都在+Udc和-Udc之间翻转,输出电压跳变幅度是2Udc。同样条件下,电感电流纹波近似为:

ΔI = (Udc - |Vout|) × D × T / L

而单极性SPWM在一个开关周期内只在Udc和0之间跳,纹波公式不同,等效的纹波幅度大约是双极性的一半到三分之一。实际示波器上看,同样LC参数下,单极性输出的THD明显更低,滤波电感的发热也更小。

5.2 开关损耗与效率对比

双极性SPWM四个管子全部在载波频率下高频动作,每个管子的开关损耗都跑不掉。单极性SPWM只有一只桥臂高频开关,另一只桥臂的管子工作在50Hz,开关损耗几乎可以忽略。实测下来,同样功率等级,单极性方案整机效率能比双极性高2到3个百分点,这在逆变器里是很大的差距。

5.3 EMI和共模干扰对比

单极性SPWM的输出电压在0和Udc之间变化,共模电压的跳变幅度是Udc;双极性SPWM的输出在正负之间来回跳,共模电压跳变幅度接近2Udc。共模变化率dv/dt越大,通过寄生电容产生的漏电流就越大,EMI表现就越差。这就是为什么光伏逆变器和储能逆变器普遍倾向单极性方案,漏电流太大会直接触发系统的剩余电流保护。

5.4 动态响应和实现复杂度对比

在动态响应方面,双极性反而占优。因为每个开关周期都有正负电平切换,电感电流可以快速上升和下降,电流环带宽可以做得很高。单极性在一个开关周期内只有单方向脉冲,动态响应略慢,需要更高的开关频率才能追平。另外单极性实现时还要处理过零换向逻辑,比双极性多一层麻烦。

5.5 怎么选

对比维度单极性SPWM双极性SPWM
输出电压纹波小大
谐波含量低高
开关损耗低高
EMI特性好差
动态响应中等快
实现复杂度较高低
适用场景光伏/储能/UPS并网电机驱动、动态要求高的场合

一句话总结:追求效率、波形质量和EMI表现,选单极性;追求简单可靠、动态响应和通用性,选双极性。没有绝对的好坏,只有匹配不匹配。

6. 常见问题与排查技巧实录

6.1 上电就炸保险?先查死区

这个坑我踩过不止一次。刚上电的时候,母线电容充电瞬间电流很大,如果死区配置不对,桥臂直通一下可能只烧驱动,不炸保险。但如果是死区完全没有生效,那看波形就不是毛刺而是直接短路的尖峰,电流会瞬间爆表。

排查方法很简单:用一个隔离示波器探头看同一桥臂上下管的栅源电压,放大时间轴,确认关断和导通之间有明显间隔。不要用普通示波器探头直接测高边栅极,共模电压会让你看到一堆假波形。

6.2 空载波形正常,一带载波形就拉胯

大概率是母线电容容量不够。空载时逆变器功率很小,母线电压稳定,波形自然好看。一带载,电容容量不足导致母线电压在每个工频周期内大幅度波动,输出波形就会跟着塌。解决方法是先把母线电容加大一档试试,同时用示波器监测母线电压是否稳定。

6.3 输出电压削顶,正弦波顶部变成平的

这是调制比m设置超过了1,进入过调制区,正弦波顶部被削平。把正弦表的调制比降到0.9,或者提高直流母线电压,问题自然消失。如果调制比已经低于1还是削顶,检查一下CCR计算公式里的偏移量是不是少了,中心对齐模式下的坐标原点不对,会整体偏移导致单侧削顶。

6.4 过零处波形畸变,有毛刺

单极性方案最常见的波形缺陷就出现在过零附近。原因前面提过,低频桥臂换向瞬间如果电流方向刚好处在零附近,高频驱动又在这个时刻动作,几个因素叠加就会产生一个窄尖峰。解决思路是给换向逻辑加滞回窗口,或者使用单极性倍频方案绕开这个工况。

6.5 驱动信号正常,输出还是带直流分量

怀疑是正弦表零点没对准,或者CCR的偏置计算错误。单极性SPWM要求正弦正半周和负半周的脉冲面积完全对称,如果代码里正弦表的平均值不是ARR的一半,输出就会带直流分量。这个直流分量在变压器的场合会直接导致磁偏饱和,发热严重。排错时用万用表测一下滤波电容两端的直流电压,正常情况下应该接近零。

6.6 常见问题速查表

现象最可能原因处理建议
上电烧保险/炸管死区没配好检查死区寄存器,示波器实测
空载正常、带载波形塌陷母线电容偏小加大电容容量
输出削顶调制比超过1调低M值或提高母线电压
过零毛刺换向逻辑抖动加滞回,或改用倍频方案
输出有直流分量正弦表偏置错误校正CCR偏置
电感噪声大载波频率低于20kHz提高载波频率或改进磁芯材质

我个人在实际调试中的体会是:单极性SPWM调试的难点不在算法理论,而在过零换向和死区配合这两个容易被忽视的细节。先把波形搞干净,再谈效率优化和功率提升。如果你第一次上手,建议按照“仿真验证逻辑 -> 低压小功率实测 -> 加高压大功率”的顺序推进,每一步都把数据记录下来,出了问题往回查,绝对比心血来潮直接怼高压要省时间。这个项目后续还可以加电流内环,把单极性SPWM和PI控制器结合起来,做成真正的并网逆变器,那又是另一个更深的坑了。

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

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

立即咨询