1. SVPWM基础原理:从三相逆变器拓扑到电压空间矢量
各位同学好,我是老张。做电机控制这些年,我见过太多人在PWM调制上栽跟头。今天咱们聊聊SVPWM,这个在DSP上跑得飞快的算法。
说实话,我刚入行时也觉得SPWM挺好用。直到有一次做伺服驱动器,电流谐波大得离谱,电机嗡嗡响。后来换成SVPWM,问题一下解决了。嗯,从那以后我就再也没用过SPWM。
1.1 三相逆变器拓扑——先看硬件长啥样
先看硬件。三相逆变器说白了就是六个开关管,搭成三个桥臂。每个桥臂上下两个管子,互补导通。
核心结构:
- 三个桥臂:A相、B相、C相
- 每个桥臂两个开关:上管和下管
- 上下管不能同时导通——会短路,我吃过这个亏
你想想看,每个桥臂只有两种状态:上管导通(记作1)或下管导通(记作0)。三个桥臂组合起来,一共2³=8种状态。
这8种状态里,有6个是非零电压矢量,2个是零矢量(全上管通或全下管通)。这就是SVPWM的物理基础。
1.2 电压空间矢量——为什么是六个方向?
咱们把三相电压放到复平面上。A相在0°方向,B相在120°,C相在240°。每个开关状态对应一个合成电压矢量。
我习惯用这个公式来理解:
V = (2/3) * (Va + Vb * e^(j*120°) + Vc * e^(j*240°))
代入8种开关状态,你会得到6个非零矢量,它们把平面分成6个扇区。每个扇区60°,正好一个正六边形。
个人经验:我在调试时发现,很多新手搞不清扇区编号。其实你记住:扇区1在0°~60°,扇区2在60°~120°,依此类推。顺时针还是逆时针?看你的电机转向定义。
1.3 为什么SVPWM比SPWM更高效?
这个问题我问过很多面试者。答案其实很直接——直流母线电压利用率。
SPWM是正弦波和三角波比较,输出的是正弦脉宽。它的最大相电压幅值只有母线电压的一半。说白了,你用了100V的母线,电机只能得到50V的相电压。
SVPWM不一样。它直接合成旋转电压矢量,最大相电压幅值可以达到母线电压的0.577倍。算下来,电压利用率提高了约15.5%。
| 调制方式 | 最大相电压幅值 | 电压利用率 |
|---|---|---|
| SPWM | Vdc/2 | 0.5 |
| SVPWM | Vdc/√3 | 0.577 |
为什么会这样?因为SVPWM在零矢量里插入了冗余状态,让合成矢量可以超出正弦波的范围。你想想看,同样的母线电压,SVPWM能让电机跑得更快,这就是效率优势。
避坑指南:我曾经在项目里直接拿SPWM的代码改SVPWM,结果电机转起来抖得厉害。后来发现是扇区判断的边界条件没处理好。记住,扇区边界上的矢量切换要加死区,不然开关管会炸。
1.4 核心逻辑:从目标电压到开关时序
SVPWM的流程其实就三步:
- 判断扇区——根据目标电压矢量的角度,确定它在哪个60°扇区
- 计算作用时间——用相邻两个非零矢量和零矢量,合成目标矢量
- 生成PWM波——把作用时间转换成开关管的导通时序
我画了一张流程图,帮你理清思路:
你看,整个流程很清晰。在DSP上实现时,我建议用查表法做扇区判断,比实时计算快得多。
1.5 伏秒平衡——SVPWM的数学灵魂
SVPWM的核心思想是伏秒平衡。什么意思?就是在一个PWM周期内,用相邻两个非零矢量和零矢量,合成出你想要的任意电压矢量。
公式长这样:
T1 = Ts * Vref * sin(60° - θ) / (Vdc * sin(60°))
T2 = Ts * Vref * sin(θ) / (Vdc * sin(60°))
T0 = Ts - T1 - T2
其中Ts是PWM周期,Vref是目标电压幅值,θ是扇区内的角度偏移。
我的习惯:实际工程中,我会把sin值预先算好存成表格。DSP算三角函数太慢了,查表加线性插值,精度够用,速度翻倍。
1.6 零矢量的妙用
零矢量有两个:V0(000)和V7(111)。它们的作用时间可以自由分配。
我常用的七段式SVPWM,就是把零矢量拆成两半,分别放在周期开头和结尾。这样开关次数均匀,谐波小。
五段式呢?只用一个零矢量,开关次数少,但谐波大一些。怎么选?看你的应用场景。做伺服驱动我选七段式,做风机水泵我选五段式。
曾经踩过的坑:有一次我为了省DSP算力,用了五段式。结果电机在低速时噪声特别大。后来发现是零矢量分配不合理,导致电流纹波变大。换成七段式,问题解决。
1.7 小结
这一章咱们把SVPWM的底牌翻了个遍。从三相逆变器的8种开关状态,到6个扇区的电压矢量,再到伏秒平衡的数学原理。核心就一句话:SVPWM通过合成旋转电压矢量,把直流母线电压用到了极致。
下一章,咱们会深入DSP的硬件资源,看看怎么用PWM模块和ADC配合,把SVPWM跑得又快又稳。