3. SVPWM 矢量作用时间计算:基本电压矢量、伏秒平衡原理、作用时间公式推导

这一节,咱们来啃 SVPWM 里最核心的硬骨头——矢量作用时间怎么算。

说实话,我刚接触 SVPWM 那会儿,看到一堆公式和矢量图,头都大了。后来在调试一个伺服驱动器时,电机低速抖得像筛糠一样,我才意识到:作用时间算不准,什么高级算法都是白搭。

今天我就把这块掰开了讲。你跟着我的思路走,保证能搞明白。

3.1 基本电压矢量:SVPWM 的“积木块”

先说说基本电压矢量是什么。

SVPWM 的核心思想,就是用 8 个固定的开关状态,去合成任意方向、任意大小的电压矢量。这 8 个状态里,有 6 个是非零矢量,2 个是零矢量。

6 个非零矢量(V1~V6): 幅值都是 2/3·Vdc,方向互差 60°,把整个平面分成 6 个扇区。

2 个零矢量(V0、V7): 幅值为 0,就是三个上桥全通或全断。

我习惯把这 6 个非零矢量想象成“积木块”。你要合成一个目标矢量,就在它所在的扇区里,用相邻的两个“积木块”去拼。说白了,就是线性组合。

基本矢量 开关状态 (A,B,C) 幅值 角度
V0 (0,0,0) 0 —
V1 (1,0,0) 2/3·Vdc 0°
V2 (1,1,0) 2/3·Vdc 60°
V3 (0,1,0) 2/3·Vdc 120°
V4 (0,1,1) 2/3·Vdc 180°
V5 (0,0,1) 2/3·Vdc 240°
V6 (1,0,1) 2/3·Vdc 300°
V7 (1,1,1) 0 —

嗯,这里要注意:零矢量虽然幅值为 0,但它在调节作用时间时非常关键。没有它,你没法平滑地控制电压大小。

3.2 伏秒平衡原理:SVPWM 的“天平”

接下来是伏秒平衡。这个词听起来高大上,其实道理很简单。

你想想看,在一个 PWM 周期 Ts 里,我们想让电机绕组上得到的平均电压等于目标矢量 Uref。那怎么实现呢?

就是用基本矢量分别作用一段时间,让它们的“电压 × 时间”加起来,等于目标矢量的“电压 × 时间”。

伏秒平衡公式:

Uref × Ts = Vx × Tx + Vy × Ty + V0 × T0

其中 Tx、Ty 是两个相邻非零矢量的作用时间,T0 是零矢量作用时间。

并且:Tx + Ty + T0 = Ts

说白了,这就是一个“天平”。左边放目标矢量的伏秒积,右边放基本矢量的伏秒积。两边相等,就平衡了。

我在项目中遇到过一个问题:有人把伏秒平衡理解成简单的面积相等,忽略了矢量方向。结果算出来的时间完全不对,电机根本转不起来。记住,这是矢量合成,不是标量相加。

3.3 作用时间公式推导:一步步来

好,现在咱们来推导公式。我以第一扇区为例,其他扇区同理。

假设目标矢量 Uref 落在第一扇区,相邻的两个基本矢量是 V1(0°)和 V2(60°)。

第一步,把 Uref 分解到 V1 和 V2 的方向上:

Uref × cos(θ) = (Tx/Ts) × |V1| + (Ty/Ts) × |V2| × cos(60°)
Uref × sin(θ) = (Ty/Ts) × |V2| × sin(60°)

第二步,代入 |V1| = |V2| = 2/3·Vdc,cos(60°) = 1/2,sin(60°) = √3/2:

Uref × cos(θ) = (Tx/Ts) × (2/3·Vdc) + (Ty/Ts) × (2/3·Vdc) × 1/2
Uref × sin(θ) = (Ty/Ts) × (2/3·Vdc) × √3/2

第三步,解这个方程组,得到 Tx 和 Ty:

Tx = (√3 × Ts × Uref / Vdc) × sin(60° - θ)
Ty = (√3 × Ts × Uref / Vdc) × sin(θ)

第四步,零矢量时间 T0 = Ts - Tx - Ty。

注意: 当 Tx + Ty > Ts 时,说明目标矢量超出了 SVPWM 的线性调制范围(即过调制)。这时候需要对 Tx 和 Ty 进行等比例缩小处理,否则波形会失真。

我曾经在调试高速段时忽略了这一点,结果电流波形出现严重削顶,电机噪音大得吓人。后来加了过调制处理,问题才解决。

其他扇区的公式,只是角度偏移的问题。你只要把 θ 换成相对于该扇区起始矢量的角度,公式结构完全一样。

3.4 知识体系总览

下面这张图,把整个计算流程串起来了。你一看就明白。

SVPWM 矢量作用时间计算流程 SVPWM 矢量作用时间计算流程 输入:Uref, θ, Ts, Vdc 扇区判断 确定相邻基本矢量 Vx, Vy 列伏秒平衡方程 计算 Tx, Ty 过调制判断与处理 关键点 • 每个扇区公式结构相同 • 角度 θ 相对于扇区起始边 • Tx+Ty+T0 = Ts 恒成立 避坑提示 • 过调制时需等比例缩放 • 零矢量分配影响谐波 • 浮点运算注意精度

3.5 实际应用中的几点提醒

公式推导完了,但纸上得来终觉浅。我再说几个实际调试中容易踩的坑。

  • 浮点精度问题: 在单片机里算 sin 和 cos,如果直接用浮点库,速度会很慢。我建议提前建好正弦表,查表计算,能省不少 CPU 时间。
  • 扇区边界处理: 当 θ 正好在扇区边界上时,比如 0° 或 60°,sin(0°) = 0,会导致某个矢量的作用时间为 0。这是正常的,代码里要处理好边界情况,别除零。
  • 零矢量分配策略: T0 可以全部分给 V0,也可以全部分给 V7,或者两者各分一半。不同的分配方式会影响开关损耗和谐波含量。我一般用七段式 SVPWM,把 T0 均分给 V0 和 V7,谐波性能最好。

我的个人习惯: 在代码里,我会把 Tx、Ty 的计算结果先放大 1000 倍,用整数运算,最后再归一化。这样既避免了浮点运算的慢速,又保证了精度。你试试看,效果不错。

好了,这一节的内容就到这儿。你只要把基本矢量、伏秒平衡、公式推导这三块吃透,SVPWM 的核心就算拿下了。后面咱们再聊怎么把这些时间值转换成实际的 PWM 占空比。