3. 空间电压矢量合成原理

好,咱们进入SVPWM最核心的部分——电压矢量合成。说白了,就是怎么用六个固定的开关状态,拼出任意方向、任意大小的电压矢量。这背后的理论基础,就是伏秒平衡原理。

3.1 伏秒平衡原理

这个概念其实特别直观。你想想看,一个开关周期里,我让不同的电压矢量作用不同的时间,最终的效果就等价于一个平均电压矢量。这就是伏秒平衡。

核心公式:

Uref · Ts = Ux · Tx + Uy · Ty + U0 · T0

其中:

  • Uref —— 参考电压矢量(你想要的那个)
  • Ts —— 开关周期
  • Ux、Uy —— 两个相邻的非零矢量
  • Tx、Ty —— 对应的作用时间
  • U0 —— 零矢量(U000或U111)
  • T0 —— 零矢量作用时间

我在项目里调试电机噪音时,就遇到过一个问题:伏秒平衡算得没错,但实际波形就是不对。后来发现是死区时间没考虑进去,导致实际作用时间比理论值少了那么一点点。嗯,这个后面会专门讲。

伏秒平衡的物理意义很简单:电压乘以时间等于伏秒积。只要总的伏秒积相等,效果就一样。这就像你买东西,10块钱一斤买3斤,和5块钱一斤买6斤,总价都是30块,一个道理。

3.2 参考电压矢量的合成

现在问题来了:我们怎么用六个固定的基本矢量,去合成任意一个参考矢量Uref?

我习惯分三步走:

  1. 判断扇区 —— 先看Uref落在哪个60°扇区里
  2. 选择矢量 —— 用该扇区边界的两个非零矢量
  3. 计算时间 —— 根据伏秒平衡算出Tx、Ty、T0

举个例子,假设Uref落在第I扇区(0°~60°),那就用U1(100)和U2(110)来合成。作用时间怎么算?

时间计算公式(第I扇区):

T1 = √3 · Ts · |Uref| · sin(60° - θ) / Udc
T2 = √3 · Ts · |Uref| · sin(θ) / Udc
T0 = Ts - T1 - T2

θ是Uref与扇区起始边的夹角。

其他扇区也是类似的,只是角度偏移一下。你想想看,本质上就是正弦定理在矢量三角形里的应用。

我记得第一次手算这个的时候,还犯了个低级错误——把Udc当成了相电压峰值。其实这里的Udc是直流母线电压,千万别搞混了。

3.3 扇区判断方法

扇区判断是SVPWM的第一步,也是最容易出错的一步。我见过不少新手,上来就查表,结果扇区判断错了,整个波形都乱了。

常用的判断方法有两种:

方法 原理 优点 缺点
角度法 根据Uref的相角θ直接判断 直观,容易理解 需要计算反正切,运算量大
分量法 根据Uα、Uβ的符号和比值判断 计算简单,适合单片机 需要记忆判断规则

实际工程中,我几乎只用分量法。为什么?因为单片机算反正切太慢了,尤其是低成本的MCU。分量法只需要几次比较和加减法,效率高得多。

分量法的判断规则是这样的:

// 定义三个中间变量
Ua = Uβ
Ub = -0.5 · Uβ + √3/2 · Uα
Uc = -0.5 · Uβ - √3/2 · Uα

// 扇区号计算
N = sign(Ua) + 2 · sign(Ub) + 4 · sign(Uc)

// 查表得到扇区
switch(N) {
    case 1: sector = II; break;
    case 2: sector = VI; break;
    case 3: sector = I;  break;
    case 4: sector = IV; break;
    case 5: sector = III; break;
    case 6: sector = V;  break;
}

注意:这里的sign()函数只返回1或0,不是-1。Uα、Uβ是经过Clark变换后的分量。我曾经在项目里把Uα和Uβ搞反了,结果电机转起来一顿一顿的,查了半天才发现。

为了让你更直观地理解整个合成过程,我画了张图:

SVPWM空间电压矢量合成原理 空间电压矢量合成原理 U₁(100) U₂(110) U₃(010) U₄(011) U₅(001) U₆(101) O Uref θ I II III IV V VI 合成步骤: 1. 判断Uref所在扇区 2. 选择相邻两个基本矢量 3. 计算作用时间T₁、T₂ 4. 剩余时间分配给零矢量 伏秒平衡: Uref·Ts = U₁·T₁ + U₂·T₂ + U₀·T₀ T₀ = Ts - T₁ - T₂

从图上可以看得很清楚:Uref落在第I扇区,它由U1和U2合成。说白了,就是平行四边形法则在矢量空间里的应用。

3.4 工程实现中的几个坑

最后,我分享几个实际项目中踩过的坑:

  • 过调制问题:当|Uref|超过六边形内切圆半径时,T1+T2会大于Ts。这时候必须做等比例缩小处理,否则波形会畸变。
  • 扇区边界处理:当Uref正好落在扇区边界上时,判断结果可能抖动。我习惯加一个小的滞环,比如±0.5°的死区。
  • 浮点运算精度:单片机做浮点运算时,sin(0°)可能不是精确的0。建议用查表法或者Cordic算法,别直接调math.h里的sin函数。

我的经验:扇区判断用分量法,时间计算用定点数。把√3和1/√3这些系数预先算好存成Q15格式,能省不少CPU时间。我在一个STM32F103的项目里,用这种方法把SVPWM的计算时间从30μs降到了8μs。

好了,伏秒平衡的原理、参考矢量的合成方法、扇区判断的技巧,这些就是SVPWM调制的核心。理解了这些,后面的七段式和五段式发波就水到渠成了。