4. T-Type三电平SVPWM算法实现

T-Type三电平逆变器每相输出可接P、O、N三种电平,三相组合后共有27个开关状态。若把每个状态映射到α-β平面,会得到19个不同位置的电压矢量:6个长矢量(幅值2Udc/3)、6个中矢量(幅值√3Udc/3)、6个短矢量(幅值Udc/3,每个位置对应P型与N型两个冗余状态)以及1个零矢量(含PPP、OOO、NNN三个冗余状态)。SVPWM的任务,就是在每个开关周期内用这些离散矢量去逼近任意参考矢量Vref,并保证中点电位可控、开关次数尽量少。

一、大扇区与小区间的判断

三电平空间矢量图可先按60°划分为6个大扇区(Sector I~VI),每个大扇区再细分为4个小三角形(A、B、C、D)。判断流程分两步:先由Vref的相角θ确定大扇区,再由幅值与相角共同确定小三角形。

设参考矢量在α-β平面的分量为Vα、Vβ,定义三个辅助量:

V_a = V_β
V_b = (√3·V_α − V_β) / 2
V_c = (−√3·V_α − V_β) / 2

令 A = (V_a > 0) ? 1 : 0,B = (V_b > 0) ? 1 : 0,C = (V_c > 0) ? 1 : 0,则大扇区号 N = A + 2B + 4C,再按 N 与扇区的对应表(N=3→I,1→II,5→III,4→IV,6→V,2→VI)得到大扇区。这一步与两电平SVPWM完全一致,计算量小,适合在中断中实时执行。

小三角形判断需要引入边界条件。以第I大扇区为例,三条关键边界为:

  • 短矢量边界:Vβ = √3·Vα/3 附近,用于区分A区与B区;
  • 中矢量边界:Vβ = −√3·Vα + √3·Udc/3,用于区分B区与D区;
  • 长矢量边界:Vβ = √3·Udc/3,用于区分C区与D区。

实际工程中常用“先判大扇区、再旋转到第I扇区统一判断”的做法:把Vref旋转−(N−1)·60°后,所有小三角形判断都只需一套公式,避免为6个扇区各写一段代码。判断结果用变量region=1~4表示A~D,供后续查表使用。

T-Type三电平SVPWM:扇区判断 → 作用时间 → 七段/五段序列 第I大扇区小三角形划分 α β A B C D O V1(短) V2(中) V3(长) V_ref 算法流程与序列设计 ① 采样 Vα、Vβ 计算 V_a、V_b、V_c ② 大扇区 N N = A + 2B + 4C ③ 旋转到第I扇区 θ' = θ − (N−1)·60° ④ 小三角形 region A / B / C / D ⑤ 查表得三矢量 V1、V2、V0 及作用时间 T1 = Ts·|V_ref|·sin(60°−θ') / (√3/3·Udc) 等 ⑥ 七段式:V0-V1-V2-V0-V2-V1-V0 五段式:V1-V2-V0-V2-V1(省去零矢量两端) ⑦ 中点电位平衡:短矢量冗余状态选择 P型/N型按中点电流方向交替分配

二、矢量作用时间的计算

确定小三角形后,参考矢量由该三角形的三个顶点矢量合成。以第I大扇区A区为例,三个矢量为V0(零矢量)、V1(短矢量,如POO/OON)、V2(中矢量,如PON)。根据伏秒平衡:

T1 = Ts · (√3·|V_ref| / Udc) · sin(60° − θ')
T2 = Ts · (√3·|V_ref| / Udc) · sin(θ')
T0 = Ts − T1 − T2

其中θ'为旋转到第I扇区后的相角,Ts为开关周期。若T1+T2 > Ts,说明参考矢量已超出线性调制区,需按比例缩放T1、T2并令T0=0,进入过调制处理。B区、C区、D区的公式结构相同,只是所用顶点矢量不同,工程上通常把6个大扇区×4个小三角形共24组矢量与时间系数做成常量表,运行时只做乘加运算。

需要特别注意的是,短矢量存在P型与N型两个冗余状态,它们对中点电流的作用方向相反。例如POO使中点电流流出,OON使中点电流流入。因此T1时间内如何分配P型与N型,直接决定中点电位偏移方向。常用做法是引入中点电压反馈:当上电容电压偏高时,多分配使中点电流流入的状态;反之则多分配流出状态。

三、七段式与五段式序列设计

七段式序列在一个开关周期内对称排列,以第I扇区A区为例:

POO → PON → OON → OOO → OON → PON → POO
 T1/2   T2/2   T0/4   T0/2   T0/4   T2/2   T1/2

其特点是:每相开关在一个周期内只动作一次,谐波性能好,中点电流在一个周期内自然抵消,但每个周期有6次开关动作。五段式则去掉两端的零矢量段,只保留中间零矢量:

POO → PON → OOO → PON → POO
 T1/2   T2/2   T0/2   T2/2   T1/2

五段式每周期只有4次开关动作,开关损耗降低约1/3,但谐波含量略高,且中点电流的抵消效果变差。工程上常根据载波频率与负载电流大小折中:高频轻载时用五段式降低损耗,低频重载或对中点电位敏感时用七段式。

七段式与五段式的选择不是绝对的。若中点电位控制要求高,可在七段式基础上对短矢量冗余状态做动态分配;若开关损耗是主要矛盾,五段式配合中点电压前馈补偿也能取得较好效果。

四、一个可执行的教学示例

设Udc=600V,开关频率fs=10kHz(Ts=100μs),参考矢量幅值|Vref|=200V,相角θ=20°。先判断大扇区:θ=20°落在第I扇区(0°~60°)。旋转后θ'=20°。代入A区公式:

T1 = 100μs × (√3×200/600) × sin(40°) ≈ 100 × 0.5774 × 0.6428 ≈ 37.1μs
T2 = 100μs × (√3×200/600) × sin(20°) ≈ 100 × 0.5774 × 0.3420 ≈ 19.7μs
T0 = 100 − 37.1 − 19.7 = 43.2μs

七段式各段时长为:T1/2=18.55μs,T2/2=9.85μs,T0/4=10.8μs,T0/2=21.6μs。将这些值写入比较寄存器,即可生成三相PWM。验证时可用示波器观察线电压波形:应为三电平阶梯波,台阶幅值为Udc/2=300V;同时用万用表或差分探头监测上下电容电压,若中点偏移超过5%Udc,说明冗余状态分配需要调整。

过调制区(T1+T2 > Ts)不能直接截断,否则输出电压矢量方向会畸变。正确做法是按T1' = T1·Ts/(T1+T2)、T2' = T2·Ts/(T1+T2)等比缩放,保持矢量方向不变,仅幅值受限。

整个算法的实时性关键在于:扇区判断与查表必须在每个PWM中断内完成,通常要求在一个开关周期内计算完毕。若采用定点DSP,可把sin表、扇区表、矢量表全部放入ROM,中断中只做乘加与查表,单次计算时间可控制在2~3μs以内,满足10kHz以上开关频率的实时要求。