1. SVPWM 基础:从三相逆变器拓扑到电压空间矢量的概念

做伺服驱动的人,早晚都要跟 SVPWM 打交道。我刚开始接触这玩意儿的时候,心里就一个想法:不就是个调制算法嘛,能用就行。直到有一次在项目里遇到了电流谐波大、电机发热严重的问题,才老老实实回来啃 SVPWM 的原理。

说白了,SVPWM 不是凭空冒出来的。它解决的是三相逆变器怎么高效、平滑地驱动电机的问题。你想想看,逆变器只能输出几个固定的电压状态,但电机需要的是连续旋转的磁场——这中间的鸿沟,就是 SVPWM 要填的。

1.1 三相逆变器的基本拓扑

先看最基础的东西。一个典型的三相电压源逆变器,长这样:

直流母线(DC Bus)
    │
    ├── Q1 ──┤ A 相输出
    │        │
    ├── Q3 ──┤ B 相输出
    │        │
    └── Q5 ──┤ C 相输出

每个桥臂上下两个开关管,互补导通。
上管导通 → 输出接 +Vdc
下管导通 → 输出接 GND

六个开关管,分成三组。每组两个管子,一个在上,一个在下。我习惯叫它们 Q1/Q2、Q3/Q4、Q5/Q6。同一组里,上管和下管绝对不能同时导通——这个我在实验室里亲眼见过一次,炸管的声音特别脆,嗯,从那以后我再也没犯过这个错。

⚠️ 死区时间不是摆设
上下管切换时,必须插入死区时间。我曾经为了省那几百纳秒,结果管子温升直接飙了 20°C。别省,真的别省。

1.2 八个基本电压矢量

每个桥臂只有两种状态:上管通(记作 1)或下管通(记作 0)。三个桥臂组合起来,一共 2³ = 8 种状态。

状态 A相 B相 C相 电压矢量
0 0 0 0 V0(零矢量)
1 1 0 0 V1
2 1 1 0 V2
3 0 1 0 V3
4 0 1 1 V4
5 0 0 1 V5
6 1 0 1 V6
7 1 1 1 V7(零矢量)

这里面有 6 个非零矢量和 2 个零矢量。6 个非零矢量把平面分成了 6 个扇区,每个扇区 60°。零矢量嘛,就是让电机两端短路,不产生有效电压。

💡 关键理解
这 8 个状态就是逆变器能输出的全部"家底"。SVPWM 要做的,就是靠这 8 个离散状态,拼出任意方向和任意大小的电压矢量。

1.3 为什么需要电压空间矢量?

你可能会问:直接用 SPWM(正弦脉宽调制)不行吗?

行,但不够好。SPWM 调出来的电压,利用率只有直流母线的 86.6% 左右。什么意思?你母线电压 300V,实际能用的交流电压峰值才 260V。剩下的 40V 去哪了?浪费了。

SVPWM 不一样。它把电压利用率直接拉到了 100%。同样的母线电压,SVPWM 能输出更高的电压给电机。这意味着什么?转速更高,扭矩更大。

我在一个伺服项目里做过对比:同样的电机、同样的负载,SPWM 跑到 3000rpm 就上不去了,换成 SVPWM 直接干到 3600rpm。客户当场就说"这个方案好"。

1.4 从三相静止到两相旋转

SVPWM 的核心思想,是把三相电压转换到两相静止坐标系(αβ)里处理。为什么要这么干?

  • 三相系统有冗余,三个量其实只有两个自由度
  • 两相坐标系里,电压矢量可以直观地画出来
  • 控制起来更简单,不用跟三个相位较劲

转换公式其实不复杂:

Vα = Va - Vb/2 - Vc/2
Vβ = (√3/2) * (Vb - Vc)

算完之后,每个非零矢量在 αβ 平面上的位置就固定了。V1 在 0°,V2 在 60°,V3 在 120°……以此类推,正好把圆分成 6 份。

1.5 SVPWM 的核心逻辑

现在问题来了:我们想要一个任意方向的电压矢量 Vref,但手里只有 8 个固定的矢量。怎么办?

答案是:用相邻的两个非零矢量,加上零矢量,通过时间加权来合成。

举个例子,如果 Vref 落在扇区 I(0°~60°):

  1. 找到相邻的两个矢量:V1(0°)和 V2(60°)
  2. 计算 V1 和 V2 各自需要作用的时间 T1 和 T2
  3. 剩下的时间用零矢量 V0 或 V7 填充
  4. 一个 PWM 周期内,按顺序输出这三个状态

时间怎么算?其实就是解一个矢量合成方程:

Vref * Ts = V1 * T1 + V2 * T2 + V0 * T0

其中 Ts 是 PWM 周期,T0 = Ts - T1 - T2

解出来:

T1 = √3 * |Vref| * Ts * sin(60° - θ) / Vdc
T2 = √3 * |Vref| * Ts * sin(θ) / Vdc
T0 = Ts - T1 - T2

看着有点复杂?其实代码里就几行乘法和除法。我当年第一次在 DSP 上跑通这个算法的时候,盯着示波器上的正弦电流看了半天——那种感觉,嗯,挺爽的。

🔧 工程小技巧
实际实现时,T1 和 T2 的计算可以用查表法加速。把 sin(θ) 和 sin(60°-θ) 提前算好存起来,运行时直接查。我在一个 100kHz 的 PWM 频率下试过,查表比实时计算快了将近 30%。

1.6 知识体系总览

下面这张图,把这一章的核心逻辑串起来了:

SVPWM 知识体系总览 三相逆变器拓扑 8 个基本电压矢量(6 非零 + 2 零) 三相 → 两相静止坐标系(αβ) 扇区判断 & 作用时间计算 PWM 波形生成 & 输出 核心优势 • 电压利用率 100% • 电流谐波更小 • 转矩脉动更低 • 适合数字化实现

从逆变器拓扑出发,到 8 个基本矢量,再到坐标变换、扇区判断、时间计算,最后生成 PWM 波形——这就是 SVPWM 的完整链路。每一步都有它的物理意义,不是凭空造出来的公式。

1.7 为什么非要用 SVPWM?

总结一下,SVPWM 相比传统 SPWM 的优势:

对比项 SPWM SVPWM
电压利用率 86.6% 100%
电流谐波 较高 较低
转矩脉动 明显 平滑
数字化实现 简单 稍复杂但成熟
母线电压要求 更高 更低

说白了,同样的硬件,用 SVPWM 能压榨出更多性能。我在做伺服驱动器的时候,母线电压只有 310V,客户要求电机跑到 4000rpm。用 SPWM 根本做不到,换成 SVPWM 之后,不仅跑到了,还留了 5% 的余量。

这就是 SVPWM 存在的意义——用有限的硬件资源,实现最优的性能输出。