误区二:SVPWM只适用于三相平衡系统——单相/两相系统的SVPWM变体与适配

这个误区,说实话,我见过太多工程师踩进去了。刚入行那会儿,我也以为SVPWM是三相电机的专属,单相、两相系统根本用不上。直到有一次,我接手一个两相步进电机的项目,客户要求低噪声、低转矩脉动——传统的方波驱动根本满足不了。我硬着头皮把SVPWM的思想移植过去,结果效果出奇的好。

今天我就把这段经验拆开来讲。说白了,SVPWM的核心不是“三相”,而是“空间电压矢量的合成”。你只要有两个以上的桥臂,就能用这个思路。

为什么会有这个误区?

原因很简单。教科书上讲的SVPWM,几乎都是拿三相逆变器举例。六个开关管、三个桥臂、八个基本矢量——这些概念太深入人心了。大家潜意识里就觉得:SVPWM = 三相。

但你想过没有?SVPWM的本质是什么?是在一个平面坐标系里,用相邻的基本电压矢量去合成目标矢量。只要你的系统能产生至少两个非共线的电压矢量,就能用这个原理。

核心观点:SVPWM是一种矢量合成方法,不是三相逆变器的专利。单相全桥、两相三桥臂、甚至多相系统,都可以找到对应的SVPWM变体。

单相系统的SVPWM变体

单相系统听起来简单,但它的电压矢量其实只有一个维度——正和负。那怎么合成空间矢量呢?

嗯,这里有个技巧。单相全桥逆变器有两个桥臂,可以输出三种电平:+Vdc、0、-Vdc。如果你把输出电压看作一个一维空间里的矢量,那SVPWM的思路就是:用相邻的“基本矢量”去逼近目标电压。

我个人的习惯是,把单相SVPWM看作一种“改进型PWM”。它比传统的单极性SPWM多了一个好处——可以在一个开关周期内插入零矢量,从而降低电流纹波。

对比项 单极性SPWM 单相SVPWM变体
电压利用率 0.707 × Vdc 0.785 × Vdc(提升约11%)
谐波特性 含较多低次谐波 谐波集中在开关频率附近
实现复杂度 低 中等(需查表或实时计算)
适用场景 对成本敏感的低端应用 对噪声和纹波有要求的场合

我的经验:单相SVPWM的零矢量分配是关键。我曾经在一个伺服驱动器项目里,把零矢量全部集中在开关周期中间,结果电流纹波反而变大了。后来改成对称分配,纹波直接降了30%。

两相系统的SVPWM适配

两相系统,最常见的就是两相步进电机。它有两个绕组,相位差90度。传统的驱动方式是方波或微步进,但转矩脉动始终是个痛点。

两相SVPWM的思路,其实比三相更直观。你把两个绕组的电流看作一个二维平面上的矢量——一个绕组是α轴,另一个是β轴。这样,目标电流矢量就是一个旋转的圆。

两相系统通常有两种拓扑:

  • 两相三桥臂:三个桥臂驱动两个绕组,其中一个桥臂共用。这种拓扑的矢量分布不对称,需要特殊处理。
  • 两相四桥臂:每个绕组独立使用一个全桥。这种拓扑的矢量分布对称,实现起来更简单。

我个人更推荐四桥臂方案。虽然多了一个桥臂,但控制自由度更高,而且可以直接复用三相SVPWM的查表逻辑——只需要把三相的120度换成两相的90度。

注意:两相SVPWM的扇区划分和三相不同。三相是6个扇区,每个60度;两相是4个扇区,每个90度。如果你直接套用三相的扇区判断逻辑,会出大问题。我曾经在这个坑里浪费了两天时间。

两相SVPWM的扇区划分与矢量合成

两相系统的基本矢量,取决于你的拓扑。以四桥臂为例,每个绕组可以输出+Vdc、0、-Vdc,组合起来就是9种状态。但其中有些状态是冗余的,真正有效的非零矢量是4个,加上零矢量,一共5个基本矢量。

这4个非零矢量,正好分布在四个象限的边界上。每个扇区90度,目标矢量落在哪个扇区,就用相邻的两个非零矢量去合成。

// 两相SVPWM扇区判断(简化版)
// ia_ref, ib_ref 为目标电流在α、β轴的分量
// 返回扇区编号 0~3

int getSector(float ia_ref, float ib_ref) {
    float angle = atan2(ib_ref, ia_ref) * 180.0f / PI;
    if (angle < 0) angle += 360.0f;
    
    if (angle < 90) return 0;   // 扇区0:0°~90°
    if (angle < 180) return 1;  // 扇区1:90°~180°
    if (angle < 270) return 2;  // 扇区2:180°~270°
    return 3;                    // 扇区3:270°~360°
}

这段代码看起来简单,但实际工程中要注意角度计算的精度。我建议用查表法代替atan2,能省不少CPU时间。

单相/两相SVPWM的通用适配框架

做了这么多年驱动,我总结了一套通用的适配思路。不管你是单相、两相还是三相,都可以按这个框架来:

  1. 确定基本矢量:列出所有可能的开关状态,剔除冗余,找出非零矢量。
  2. 划分扇区:根据非零矢量的空间分布,把平面分成若干扇区。
  3. 扇区判断:根据目标矢量的角度或分量,确定它落在哪个扇区。
  4. 矢量合成:用相邻的两个非零矢量和零矢量,按伏秒平衡原则合成目标矢量。
  5. 开关序列优化:调整零矢量的插入位置,最小化开关次数或电流纹波。

这个框架,说白了就是把三相SVPWM的“魂”抽出来,再根据你的系统重新“装回去”。

避坑指南:我曾经在一个两相步进电机项目里,直接复制了三相SVPWM的矢量作用时间计算公式,结果电机转起来一顿一顿的。后来才发现,两相系统的电压利用率公式和三相不一样——三相是√3/2,两相是1。这个系数差,直接导致转矩输出偏差。

SVG:单相/两相/三相SVPWM适配关系图

下面这张图,展示了我刚才讲的适配框架。你可以看到,三相、两相、单相虽然拓扑不同,但核心流程是一致的。

SVPWM适配框架:从三相到单相/两相 核心思想:空间电压矢量合成 三相系统(6扇区) 两相系统(4扇区) 单相系统(2扇区) 8个基本矢量(6非零+2零) 5个基本矢量(4非零+1零) 3个基本矢量(2非零+1零) 扇区判断:角度/分量 扇区判断:角度/分量 扇区判断:电压极性 伏秒平衡计算 伏秒平衡计算 伏秒平衡计算 七段式/五段式序列 四段式/三段式序列 两段式序列 说明:三相、两相、单相SVPWM的核心流程一致,仅在扇区数量、基本矢量个数和开关序列上存在差异

实际工程中的注意事项

最后,我分享几个实际工程中容易踩的坑:

  • 死区补偿:单相和两相系统的死区效应比三相更明显。因为桥臂少,死区时间占开关周期的比例更大。我建议在低速时做死区补偿,否则电流波形会明显畸变。
  • 电流采样时机:两相系统的电流采样窗口比三相更窄。尤其是使用单电阻采样时,要仔细计算采样点,避免采到开关噪声。
  • 过调制处理:单相和两相系统的过调制区域比三相小。一旦进入过调制,电压矢量的幅值和相位都会失真。我个人的习惯是,在过调制区域切换到方波模式,或者用查表法做预失真。

重要提醒:不要以为单相/两相SVPWM只是三相的“简化版”。它们的扇区划分、矢量作用时间、电压利用率都不一样。如果你直接套用三相的代码,大概率会出问题。我的建议是:从头推导一遍,哪怕花一天时间,也比后面调试三天强。