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%,别卡得太死。

插入死区的方式,我画了一张流程图,帮你理清逻辑:

死区时间插入流程 获取原始PWM信号(SVPWM输出) 检测上升沿和下降沿 判断是上管还是下管 上管 下管 上管:延迟关断 下管:延迟开通 输出带死区的PWM信号 注意:上管关断和下管开通之间必须插入死区,反之亦然

实际实现时,我一般用定时器的比较匹配中断来插入死区。比如STM32的TIM高级定时器,自带死区插入功能,配置一下就行。如果是纯软件实现,那就得在PWM输出前,手动调整上升沿和下降沿的位置。

4.3 死区时间对波形的影响

死区时间虽然保护了开关管,但它也会带来副作用。最直接的影响就是——输出电压波形失真。为什么会这样?

你想想看,死区时间内,上下管都关断了。这时候电流往哪儿流?只能通过续流二极管。如果电流方向是流出桥臂,那下管的续流二极管会导通,把输出电压拉到负母线。如果电流方向是流入桥臂,那上管的续流二极管会导通,把输出电压拉到正母线。

说白了,死区时间让实际输出电压偏离了理想值。这个偏离量,就是死区误差电压。我整理了一下死区对波形的主要影响:

影响类型 具体表现 严重程度
基波电压损失 输出电压幅值降低,电机转速偏慢 中等
低次谐波增加 5次、7次谐波明显增大,电流波形畸变 严重
转矩脉动 电机在低速时抖动,噪音变大 严重
零电流钳位 电流过零时出现平台,波形不平滑 中等

我在做伺服驱动器的时候,就遇到过这个问题。低速运行时,电机嗡嗡响,电流波形像锯齿一样。查了半天,发现是死区时间设得太大了,而且没有做死区补偿。后来加了补偿算法,波形才恢复正常。

注意: 死区时间不是越小越好,也不是越大越好。太小了容易炸管子,太大了波形失真严重。我建议你先看开关管的数据手册,找到关断延迟和开通延迟的典型值,然后在这个基础上加一个合理的裕量。一般取1~3微秒比较常见。

4.4 死区补偿的几种思路

既然死区时间会带来波形失真,那我们就得想办法补偿。常见的补偿方法有几种,我简单说一下:

  • 电压前馈补偿: 根据电流方向,在调制波上叠加一个补偿电压。电流为正时加正补偿,为负时加负补偿。这个方法简单,但需要准确的电流方向检测。
  • 脉冲宽度补偿: 直接调整PWM脉冲的宽度,把死区吃掉的时间补回来。这个方法精度高,但实现起来稍微复杂一些。
  • 自适应补偿: 根据电流大小和方向,动态调整补偿量。这个方法效果最好,但计算量也最大。

我个人比较推荐电压前馈补偿,因为它实现简单,效果也够用。不过要注意,电流过零的时候,方向检测容易出错,这时候需要加一个滞环,避免补偿方向来回跳变。

核心要点: 七段式SVPWM的开关序列生成,关键是查表和对称分配。死区时间插入,核心是「先关后开」。死区补偿,核心是「根据电流方向加补偿电压」。把这三点搞清楚了,七段式SVPWM这块就算拿下了。

嗯,七段式SVPWM的内容就这些。死区时间虽然烦人,但只要掌握了补偿方法,波形质量还是能保证的。下次你调试电机驱动的时候,如果发现电流波形不对劲,先检查一下死区时间设置和补偿逻辑,大概率能解决问题。