4. 七段式SVPWM:七段式开关序列生成、死区时间插入与影响
七段式SVPWM,说白了就是让逆变器的六个开关管,在一个PWM周期里按特定顺序动作七次。为什么是七段?因为它在传统五段式的基础上,把零矢量拆成了两半,分别放在周期的头和尾。这样做的好处很明显——谐波更小,波形更干净。
我刚开始做电机驱动那会儿,总觉得七段式太啰嗦,五段式效率多高啊。后来发现,在要求低噪声、低转矩脉动的场合,七段式几乎是绕不开的选择。你想想看,多花一点开关损耗,换来更平滑的电流波形,这笔账其实很划算。
4.1 七段式开关序列的生成逻辑
七段式SVPWM的核心,就是把每个扇区内的电压矢量作用时间,拆成对称的七段。我习惯用「先中间、后两边」来记这个规律——零矢量在中间,两个非零矢量在两边对称分布。
具体来说,假设我们在第I扇区,目标矢量由U₄(100)和U₆(110)合成。那么七段序列就是:
U₀(000) → U₄(100) → U₆(110) → U₇(111) → U₆(110) → U₄(100) → U₀(000)
你看,零矢量U₀和U₇各出现一次,但U₇在中间,U₀在两边。两个非零矢量U₄和U₆各出现两次,对称分布。这样每个PWM周期内,开关管只切换一次状态,避免了不必要的开关动作。
每个扇区的序列都不一样,我整理了一张表,方便你对照:
| 扇区 | 七段开关序列(从左到右) |
|---|---|
| I (0°~60°) | 000 → 100 → 110 → 111 → 110 → 100 → 000 |
| II (60°~120°) | 000 → 010 → 110 → 111 → 110 → 010 → 000 |
| III (120°~180°) | 000 → 010 → 011 → 111 → 011 → 010 → 000 |
| IV (180°~240°) | 000 → 001 → 011 → 111 → 011 → 001 → 000 |
| V (240°~300°) | 000 → 001 → 101 → 111 → 101 → 001 → 000 |
| VI (300°~360°) | 000 → 100 → 101 → 111 → 101 → 100 → 000 |
嗯,这里要注意:每个扇区的序列,其实都是把该扇区对应的两个非零矢量,按照「先小后大」的顺序排列。比如第I扇区,U₄(100)的十进制是4,U₆(110)是6,所以先4后6。这个规律在所有扇区都成立。
4.2 死区时间:为什么必须插?
死区时间,是逆变器里绕不开的话题。你想想看,同一桥臂的上下两个开关管,如果同时导通,那就直接短路了。所以必须让一个关断后,等一小会儿,再让另一个导通。这个等待时间,就是死区时间。
我见过不少新手,觉得死区时间越小越好,恨不得设成0。结果一上电,IGBT直接炸了。嗯,那场面……不说了。
死区时间的典型值,一般在几百纳秒到几微秒之间。具体取多少,取决于开关管的关断延迟和开通延迟。我一般这样估算:
T_dead = T_off_max - T_on_min + 安全裕量
其中T_off_max是开关管的最大关断延迟,T_on_min是最小开通延迟。安全裕量我习惯加20%~30%,别卡得太死。
插入死区的方式,我画了一张流程图,帮你理清逻辑:
实际实现时,我一般用定时器的比较匹配中断来插入死区。比如STM32的TIM高级定时器,自带死区插入功能,配置一下就行。如果是纯软件实现,那就得在PWM输出前,手动调整上升沿和下降沿的位置。
4.3 死区时间对波形的影响
死区时间虽然保护了开关管,但它也会带来副作用。最直接的影响就是——输出电压波形失真。为什么会这样?
你想想看,死区时间内,上下管都关断了。这时候电流往哪儿流?只能通过续流二极管。如果电流方向是流出桥臂,那下管的续流二极管会导通,把输出电压拉到负母线。如果电流方向是流入桥臂,那上管的续流二极管会导通,把输出电压拉到正母线。
说白了,死区时间让实际输出电压偏离了理想值。这个偏离量,就是死区误差电压。我整理了一下死区对波形的主要影响:
| 影响类型 | 具体表现 | 严重程度 |
|---|---|---|
| 基波电压损失 | 输出电压幅值降低,电机转速偏慢 | 中等 |
| 低次谐波增加 | 5次、7次谐波明显增大,电流波形畸变 | 严重 |
| 转矩脉动 | 电机在低速时抖动,噪音变大 | 严重 |
| 零电流钳位 | 电流过零时出现平台,波形不平滑 | 中等 |
我在做伺服驱动器的时候,就遇到过这个问题。低速运行时,电机嗡嗡响,电流波形像锯齿一样。查了半天,发现是死区时间设得太大了,而且没有做死区补偿。后来加了补偿算法,波形才恢复正常。
4.4 死区补偿的几种思路
既然死区时间会带来波形失真,那我们就得想办法补偿。常见的补偿方法有几种,我简单说一下:
- 电压前馈补偿: 根据电流方向,在调制波上叠加一个补偿电压。电流为正时加正补偿,为负时加负补偿。这个方法简单,但需要准确的电流方向检测。
- 脉冲宽度补偿: 直接调整PWM脉冲的宽度,把死区吃掉的时间补回来。这个方法精度高,但实现起来稍微复杂一些。
- 自适应补偿: 根据电流大小和方向,动态调整补偿量。这个方法效果最好,但计算量也最大。
我个人比较推荐电压前馈补偿,因为它实现简单,效果也够用。不过要注意,电流过零的时候,方向检测容易出错,这时候需要加一个滞环,避免补偿方向来回跳变。
嗯,七段式SVPWM的内容就这些。死区时间虽然烦人,但只要掌握了补偿方法,波形质量还是能保证的。下次你调试电机驱动的时候,如果发现电流波形不对劲,先检查一下死区时间设置和补偿逻辑,大概率能解决问题。