第2章 PWM调制原理:SPWM与SVPWM

各位工程师朋友,今天我们来聊聊逆变器控制的核心——PWM调制。说实话,我刚入行那会儿,觉得PWM不就是开关管一通一断嘛,有啥好研究的?直到第一次做三相逆变器,电机嗡嗡响得像要起飞,我才意识到——调制方式选不对,硬件再好也白费。

这一章,我带你吃透两种最主流的调制方式:SPWM和SVPWM。我会把数学推导掰开揉碎了讲,再配上我踩过的坑,保证你学完就能用。

2.1 为什么需要PWM调制?

逆变器的本质,是把直流电变成交流电。但开关管只能输出高电平(母线电压)或低电平(0),怎么模拟出正弦波?

答案就是:用高频开关,让脉冲宽度按正弦规律变化。这就是PWM(脉宽调制)的核心思想。

你想想看,一个正弦波可以看成无数个窄脉冲的叠加。只要开关频率够高(通常10kHz以上),滤波后就能得到光滑的正弦波。嗯,这里要注意:频率越高,波形越漂亮,但开关损耗也越大。这是个trade-off。

2.2 SPWM——正弦脉宽调制

2.2.1 基本原理

SPWM是最直观的方法。说白了,就是拿一个正弦波(调制波)和三角波(载波)做比较。

  • 正弦波 > 三角波:上管导通,输出高电平
  • 正弦波 < 三角波:下管导通,输出低电平

这样输出的脉冲宽度,就跟着正弦波走了。我在项目中遇到过,有人直接用单片机查表生成正弦波,结果发现输出波形不对称。为什么?因为三角波的频率和正弦波的频率没对齐,产生了拍频干扰。

关键公式:

调制比 m = Vm / Vtri

其中 Vm 是正弦波幅值,Vtri 是三角波幅值。m 必须在 0~1 之间,否则会过调制。

2.2.2 数学推导

假设正弦波为:

Vref(t) = Vm * sin(ωt)

三角波频率为 fc,周期为 Tc。在一个载波周期内,脉冲宽度 τ 满足:

τ / Tc = Vref(t) / Vtri

所以输出平均电压:

Vout_avg = Vdc * (τ / Tc) = Vdc * m * sin(ωt)

看到了吗?输出平均值就是正弦波!这就是SPWM的数学本质——面积等效原理。

我的经验:SPWM实现简单,但直流电压利用率低。最大输出相电压只有 Vdc/2。如果你做低压逆变器,这点很要命。

2.3 SVPWM——空间矢量脉宽调制

2.3.1 从电机控制说起

SVPWM最早是用在电机控制里的。我刚开始学的时候,觉得这玩意儿太抽象了,什么空间矢量、扇区判断,头都大了。后来做了一台伺服驱动器,才真正理解它的妙处。

简单说,SVPWM不是单独控制每一相,而是把三相电压看成一个整体——一个旋转的空间矢量。

2.3.2 基本电压矢量

三相逆变器有6个开关管,上下管互补导通。所以一共有 2^3 = 8 种开关状态:

状态 Sa Sb Sc 电压矢量
V0 0 0 0 零矢量
V1 1 0 0 Vdc * (2/3) * e^(j0)
V2 1 1 0 Vdc * (2/3) * e^(jπ/3)
V3 0 1 0 Vdc * (2/3) * e^(j2π/3)
V4 0 1 1 Vdc * (2/3) * e^(jπ)
V5 0 0 1 Vdc * (2/3) * e^(j4π/3)
V6 1 0 1 Vdc * (2/3) * e^(j5π/3)
V7 1 1 1 零矢量

这6个非零矢量把平面分成6个扇区,每个扇区60度。零矢量在圆心。

2.3.3 合成任意矢量

假设我们要合成一个目标矢量 Vref,它落在某个扇区。我们可以用相邻的两个基本矢量来合成:

Vref * Ts = Vx * Tx + Vy * Ty + V0 * T0

其中 Ts 是开关周期,Tx、Ty 是两个相邻矢量的作用时间,T0 是零矢量的作用时间。

以扇区I为例(V1和V2之间):

Tx = Ts * m * sin(π/3 - θ)
Ty = Ts * m * sin(θ)
T0 = Ts - Tx - Ty

这里 θ 是 Vref 在扇区内的角度,m 是调制比。

SVPWM的最大优势:直流电压利用率比SPWM高15.47%。最大输出相电压可达 Vdc/√3,相当于线电压 Vdc。

2.3.4 七段式与五段式

实际实现时,我们还要考虑开关次数。我建议初学者先用七段式:

以扇区I为例,开关序列:
V0(000) → V1(100) → V2(110) → V7(111) → V2(110) → V1(100) → V0(000)

这样每次只切换一个开关管,开关损耗最小。五段式虽然能减少开关次数,但谐波会大一些。

我曾经踩过的坑:做SVPWM时,死区时间没处理好。结果在零矢量切换时,上下管直通,炸了一个IGBT模块。记住:任何开关状态切换,都要插入死区时间!

2.4 SPWM vs SVPWM 对比

对比项 SPWM SVPWM
直流电压利用率 较低(0.5 * Vdc) 较高(0.577 * Vdc)
谐波特性 谐波集中在载波频率附近 谐波分布更优,THD更低
实现复杂度 简单,查表即可 需要扇区判断和三角函数计算
适用场景 单相逆变器、对成本敏感 三相电机驱动、高性能逆变器

我个人习惯:做单相逆变器用SPWM,省事;做三相电机驱动,必须上SVPWM。你想想看,同样的母线电压,SVPWM能多输出15%的电压,这优势太明显了。

2.5 代码实现要点

最后,我分享一个SVPWM的伪代码框架,你拿去就能用:

// 输入:Valpha, Vbeta(静止坐标系下的电压)
// 输出:Ta, Tb, Tc(三相占空比)

// 1. 计算扇区
V1 = Vbeta
V2 = sqrt(3)/2 * Valpha - 0.5 * Vbeta
V3 = -sqrt(3)/2 * Valpha - 0.5 * Vbeta

if (V1 > 0) sector = 1 else sector = 4
if (V2 > 0) sector |= 2
if (V3 > 0) sector |= 4

// 2. 计算X, Y, Z
X = sqrt(3) * Vbeta / Vdc * Ts
Y = (sqrt(3)/2 * Vbeta + 1.5 * Valpha) / Vdc * Ts
Z = (sqrt(3)/2 * Vbeta - 1.5 * Valpha) / Vdc * Ts

// 3. 根据扇区查表得到Tx, Ty
switch(sector) {
    case 1: Tx = Z; Ty = Y; break;
    case 2: Tx = Y; Ty = -X; break;
    case 3: Tx = -Z; Ty = X; break;
    case 4: Tx = -X; Ty = Z; break;
    case 5: Tx = X; Ty = -Y; break;
    case 6: Tx = -Y; Ty = -Z; break;
}

// 4. 计算三相占空比
T1 = (Ts - Tx - Ty) / 4
T2 = T1 + Tx / 2
T3 = T2 + Ty / 2

// 5. 根据扇区分配
switch(sector) {
    case 1: Ta = T2; Tb = T1; Tc = T3; break;
    case 2: Ta = T1; Tb = T3; Tc = T2; break;
    // ... 其他扇区类似
}

调试建议:先用示波器看单相的PWM波形,确认占空比变化规律。然后再看三相之间的相位差。我当年就是先调好一相,再调三相,省了不少时间。

好了,这一章的内容就到这儿。SPWM和SVPWM是逆变器控制的基石,你吃透了它们,后面的闭环控制、弱磁控制才能玩得转。下一章我们讲电流环设计,到时候我会教你如何把SVPWM和PI控制器结合起来。