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°):
- 找到相邻的两个矢量:V1(0°)和 V2(60°)
- 计算 V1 和 V2 各自需要作用的时间 T1 和 T2
- 剩下的时间用零矢量 V0 或 V7 填充
- 一个 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 知识体系总览
下面这张图,把这一章的核心逻辑串起来了:
从逆变器拓扑出发,到 8 个基本矢量,再到坐标变换、扇区判断、时间计算,最后生成 PWM 波形——这就是 SVPWM 的完整链路。每一步都有它的物理意义,不是凭空造出来的公式。
1.7 为什么非要用 SVPWM?
总结一下,SVPWM 相比传统 SPWM 的优势:
| 对比项 | SPWM | SVPWM |
|---|---|---|
| 电压利用率 | 86.6% | 100% |
| 电流谐波 | 较高 | 较低 |
| 转矩脉动 | 明显 | 平滑 |
| 数字化实现 | 简单 | 稍复杂但成熟 |
| 母线电压要求 | 更高 | 更低 |
说白了,同样的硬件,用 SVPWM 能压榨出更多性能。我在做伺服驱动器的时候,母线电压只有 310V,客户要求电机跑到 4000rpm。用 SPWM 根本做不到,换成 SVPWM 之后,不仅跑到了,还留了 5% 的余量。
这就是 SVPWM 存在的意义——用有限的硬件资源,实现最优的性能输出。