ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

SVPWM与零序电压注入:如何把母线电压利用率从86.6%提到100%

SVPWM与零序电压注入:如何把母线电压利用率从86.6%提到100% 做逆变器和电机驱动这块的兄弟十有八九会被同一个问题卡过SVPWM的调制波明明长得像马鞍为什么反而比老老实实的正弦SPWM多输出15%的电压教材上只说是“注入了零序电压”但零序电压怎么注入、注进去为什么不影响线电压、跟SVPWM到底是不是一回事讲清楚的没几个。这篇文章我把这三件事一次讲透母线电压利用率那个86.6%是怎么算死的零序电压注入为什么能把它推到100%以及SVPWM本质上就是“最优零序注入加载波比较”这一套东西。看完你可以直接照着思路改代码也顺便避开我在调试里踩过的一些坑。1. 母线电压利用率86.6%这道坎它到底卡在哪1.1 三相桥臂的物理能力其实不止0.866先把一个很多人搞反了的点摆正三相全桥逆变器本身能输出的最大线电压不是0.866倍母线电压而是1.0倍母线电压。原因很简单。逆变器六个开关管一共八种开关组合其中六个非零矢量对应的桥臂状态比如A相上管导通、B相下管导通此时AB之间的线电压直接就是Udc。也就是说从拓扑能力看母线电压完全能转化成幅值为Udc的线电压。那SPWM为什么只用到0.866Udc就顶死了问题出在调制策略上。SPWM的思路是每一相单独用一个正弦调制波和三角载波比较输出一个斩波后的相电压让它在一个开关周期内的平均值跟随正弦。正弦波峰值最多只能到Udc/2再大就会削波因为三角载波的上下限就是±Udc/2。一旦不削波每相相电压的基波峰值就是Udc/2。三相相差120度线电压等于两相相电压之差幅值要乘√3于是线电压峰值 √3 × Udc/2 ≈ 0.866Udc这0.866不是硬件天花板是“既要相电压正弦、又用正弦调制波”这两个条件共同压出来的天花板。换句话说SPWM为了追求每一相电压波形好看牺牲了线电压的上限。1.2 多出来的13.4%到底值多少用最常见的场景算一笔账。三相380V交流电机整流后直流母线电压一般是540V左右。SPWM在线性区能输出的最大线电压有效值0.866 × 540 / √2 ≈ 330V。380V的电机压根喂不饱。SVPWM能把线电压峰值推到540V有效值540 / √2 ≈ 382V刚好越过380V额定线电压。这一来一回差的就是“能不能用标准整流母线直接驱动额定380V电机”的分界线。新能源车主驱上也一样。电池母线400VSVPWM等效把电压利用率提升了15.5%相当于白拿了60V母线电压。别小看这60V电机高速弱磁区里转矩和功率能不能保住往往就差这么一口气。有人会说SPWM过调制不也能超过0.866吗能但代价是输出波形里出现成片的低次谐波电流畸变、噪声、发热一起上来。SVPWM妙就妙在线性区内就直接做到1.0Udc波形还干干净净。2. 零序电压注入的原理把三相波形整体搬家线电压假装没看见2.1 为什么零序分量能在线电压里“隐身”零序电压注入的第一性原理就一句话三相同时加上同一个量线电压不变。设三相原始调制波是va、vb、vc给三相同时加一个共模电压v0变成vav0、vbv0、vcv0。看线电压Uab‘ (va v0) − (vb v0) va − vb Uabv0在相减过程中严格抵消。所以说零序分量是“合法作弊”它不碰线电压却能改变三相调制波相对零轴的位置。这玩意儿可以类比成三个并联的电压表你把它们公共参考端一起抬高或压低三个读数同时变化但读数之间的差值一个都不会变。负载接在相与相之间关心的只是差值。2.2 关键操作怎么把调制波峰值从Um压到0.866Um现在的问题变成v0取什么值能让三相调制波的峰值利用率最高不加零序时三相各自是幅值Um的正弦每相峰值得留足Um的摆动空间所以Um只能到Udc/2。加了v0之后每相变成vav0。v0是三个相同时平移的量不会改变max−min但可以改变“整个波形离零轴的平均距离”。直观想一下如果某一瞬间三相整体偏高快要顶到正载波上限那就把v0往负的方向调一点整体往下搬如果三相整体偏低就往上搬。最合理的搬法是让当前时刻三相里的最大值和最小值关于零轴对称这样“离零轴最远的那一相”到顶的概率最小。数学上就是v0 −(vmax vmin) / 2其中vmax是当前时刻三相调制波的最大值vmin是最小值。这个策略业内叫min-max注入法也叫中点钳位法。三相正弦波形里max和min之间的瞬时差不是固定值但最大值是能算出来的。在θ0度、60度这类边界位置三相值分别是0、±0.866Um瞬时差达到√3Um≈1.732Um。经min-max注入后三相调制波的最大绝对值被压缩为(max − min) / 2 ≤ √3Um / 2 ≈ 0.866Um也就是说原本每相需要Um的摆动空间现在只需要0.866Um。那Um就可以放大放大到0.866Um等于Udc/2为止Um(max) (Udc/2) / 0.866 Udc/√3 ≈ 0.577Udc此时线电压峰值 √3 × Udc/√3 Udc母线电压利用率100%。这段推导值得多看两遍。以前调变频器参数时我对“注入零序能提压”的理解停留在“别人都这么说”直到自己把max和min的瞬时差算了一遍才真正明白零序注入不是变魔术只是把三相波形整体搬来搬去让峰值出现的时间错位被利用起来。2.3 三次谐波注入一个几乎一样效果的老办法如果不想要实时算max和min还有更古典的方案直接往三相调制波里注入固定比例的三次谐波。v0 (Um / 6) × sin(3θ)为什么是1/6因为在这个比例下叠加后的波形峰值恰好被压到约0.866Um和min-max注入的效果非常接近。工程里很多老式变频器和模拟电路实现的逆变器就是靠这个固定公式拿电压利用率的。三次谐波注入和min-max注入的差别在于前者是固定的解析式后者是随三相波形实时变化的分段函数。两者产生的调制波都是马鞍形形状高度接近但在不同扇区内的瞬时值不完全相等导致THD和共模特性有细微差别。对绝大多数应用来说这两者的输出外特性几乎等价选哪个取决于实现方便程度。3. SVPWM其实就是零序注入不是亲戚是同一套打法3.1 从空间矢量合成到“正弦加零序”的等价推导很多教程把SVPWM讲成“利用相邻基本电压矢量合成参考电压矢量”听起来和SPWM完全是两条路线。但如果你把SVPWM每个开关周期的平均电压算出来再反推它对应的调制波会得到一个很朴素的结果。SVPWM算法分为三步判断扇区、算相邻矢量作用时间、按七段式排开关序列。其中相邻两个非零矢量的作用时间可以写成T1 √3 × Ts × Vm / Udc × sin(π/3 − θ)T2 √3 × Ts × Vm / Udc × sinθT0 Ts − T1 − T2这里的Vm是参考相电压基波幅值θ是参考矢量在当前扇区内的角度Ts是载波周期。把这组时间折算成三相桥臂的占空比再展开成“调制波对三角载波比较”的形式你会得到一个关键等式va_mod va v0vb_mod vb v0vc_mod vc v0其中v0就是上一章那个−(vmaxvmin)/2。也就是说SVPWM在线电压层面和“正弦调制波加min-max零序注入再加三角载波比较”完全等价。我最早看到这个结论是在TI的代码注释里svgen模块里明晃晃写着vmax、vmin、offset这几个变量。当时挺意外原来DSP里的SVPWM展开到最后就是算一个公共偏移量往三相调制波上加。这个等价格局想明白之后扇区判断、矢量时间这些概念就都变得很立体了不再是死记硬背的查表流程。3.2 扇区判断和七段式在零序视角下很自然扇区判断的本质其实就是判断当前时刻三相里谁最大、谁最小。比如第一扇区va正在往上升vc正在往下降vb一直是负得最多的那个于是max大多在va和vc之间交接min基本锁定vb。min-max注入的表达式在六个扇区里来回切换这才拼出了分段光滑的马鞍形调制波。七段式则是实现层面的选择一个载波周期内开关序列按“零矢量1—基本矢量1—基本矢量2—零矢量2—基本矢量2—基本矢量1—零矢量1”的顺序排列首尾对称。这样做的好处是相邻两个矢量切换时只有一个开关管动作开关损耗和小幅脉动都控制得比较好。有了这个视角再看“svpwm扇区”和“七段式”这两个搜索热词就不会觉得抽象了——扇区是min-max注入的自然分段七段式是空间矢量理论对开关序列的优化安排。3.3 马鞍波到底怎么来的现在可以正面回答“为什么SVPWM是马鞍形波”了。原始三相调制波是正弦加入v0之后在原本波峰附近v0是负的把峰往下压在原本波谷附近v0是正的把谷往上抬。一压一抬正弦波顶部被压扁、底部被填平整体轮廓看起来就像马鞍的侧面。具体到第一扇区θ0度时三相值是0、±0.866Umv0恰好为0θ30度时三相值是0.5Um、−Um、0.5Umv0算出来是0.25Um把中间那相抬上去、把最低那相也抬离谷底θ60度时v0又回到0。一个扇区内v0走了一个先升后降的弧线调制波自然呈现中间饱满、两头收拢的马鞍形状。有一点必须强调你在示波器上看到的马鞍形是调制波对母线中点的波形。线电压仍然是接近正弦的因为零序在相减时抵消了。初学最容易犯的错就是看到马鞍波就以为输出相电压也长这样然后拿着马鞍波去套线电压谐波分析怎么套都对不上。4. 七段式、五段式与DPWM零序注入的工程代价怎么选4.1 七段式谐波好但开关次数固定工程中默认的SVPWM实现大多是七段式。每个载波周期三相桥臂一共动作6次两个零矢量都用上序列完全对称。这种安排让输出电压谐波分布集中在开关频率及其倍数附近低频段比较干净电流THD表现好。代价是两个零矢量各出现一次开关动作次数是固定的。对功率不大的场合无所谓对大功率IGBT、IGBT模块或SiC器件来说开关损耗就是热设计的重要变量每多一次开关动作都是要花钱散热的。4.2 五段式/DPWM用谐波换损耗五段式是SVPWM的变体基本思想是每个扇区把某一相钳位到正母线或负母线这一相在整个扇区内不动作开关次数从每周6次降到4次。IGBT的开关损耗能明显下降散热器都可以小一号。代价同样明显电流THD上升尤其在低调制比工况下电流波形会变毛共模电压更大机械噪声也更容易出来。光伏逆变器、车载电驱这类对效率极度敏感的场合五段式非常香精密电源、并网逆变器这类对谐波指标卡得严的场合还是七段式稳。4.3 共模电压零序注入的暗面前面说零序“合法作弊”但它不是没有代价。零序分量加在三相上桥臂输出对地的共模电压会被整体抬高。这个共模电压通过电机内部的寄生电容形成轴承电流时间长了会在轴承滚道上打出麻点也就是常说的电蚀。同时它还会增大对地漏电流和系统EMI。SPWM因为不注入零序共模相对最小SVPWM和三次谐波注入其次五段式DPWM钳位期间共模瞬时值更大。做电机驱动尤其变频器带长电缆或安装在金属机壳里这个问题不能忽视。对策通常有在输出侧加共模电抗器、电机端加接地电刷、调制策略在轻载时动态切换成SPWM。5. 从代码到示波器我的实现笔记与踩坑记录5.1 不想碰扇区表用min-max注入一步到位工程里想快速实现SVPWM不一定要写扇区判断和矢量时间表。既然SVPWM等价于“正弦加min-max零序”那直接写成这样就行// 输入三相相电压参考值 va/vb/vc幅值不超过 Udc/sqrt(3) float vmax fmax(va, fmax(vb, vc)); float vmin fmin(va, fmin(vb, vc)); float v0 -(vmax vmin) * 0.5f; // 输出三相调制波直接与三角载波比较生成PWM float ta va v0; float tb vb v0; float tc vc v0;这段代码不关心扇区编号不维护矢量映射表只要va/vb/vc是相位差120度的三相正弦参考输出效果和经典SVPWM一致。实际项目里我用过这种写法省下的代码量和调试时间非常可观而且天然回避了扇区边界查表错位的问题。如果坚持走扇区判断路线也完全可以原理上殊途同归。但要注意不同文献的扇区编号规则不统一矢量映射表稍不留神就写错一条查错的时候相当折磨。5.2 死区、最小脉宽和扇区边界的三个坑第一个坑是死区。SVPWM和SPWM一样上下桥臂必须加死区时间。死区会让输出电压产生误差低调制比时尤其明显表现为电流波形畸变、转矩脉动。解决思路是死区补偿最常见的是根据电流方向做电压误差补偿具体实现方式各家略有差异但原理都是把死区吃掉的那部分电压还回去。第二个坑是最小脉宽。IGBT这类开关器件有最小导通时间限制一般1到2微秒。调制比接近1时某些相的脉宽可能低于这个值直接削掉会导致输出电压面积丢失电流波形出现毛刺。规范做法是做窄脉冲补偿也就是把丢失的脉冲面积折算到相邻扇区的矢量作用时间里而不是简单截断。第三个坑是扇区边界抖动。min-max注入的v0在扇区切换瞬间可能出现跳变载波比较时容易在边界处产生多余脉冲。我在一个项目里遇到调制波在扇区交界处出现尖刺查了半天发现是浮点计算顺序引起的微小抖动。解决办法是确保一个载波周期内使用同一组vmax和vmin不要中途更新必要时加一点点滞回。5.3 各种需求怎么选调制方式平时选型我一般按下面这个表来先看需求再选策略而不是一上来就默认SVPWM调制策略线性区线电压峰值电流THD开关损耗共模电压实现复杂度SPWM0.866Udc低中等较低低三次谐波注入1.0Udc低中等中等低SVPWM七段式1.0Udc低中等偏高中等高SVPWM五段式/DPWM1.0Udc略高低高高普通电机驱动母线电压不紧张用SVPWM七段式就好谐波和噪声最容易达标。散热吃紧、效率优先的车载或光伏场合五段式DPWM更有优势。对THD和共模都敏感的高端并网逆变器或精密电源SPWM加适当提高母线电压也是合理选择不用盲目追SVPWM。顺手分享一个调试时的小技巧不要只看相电流波形。把示波器三通道接在三相调制波上确认它们在每个60度区间呈现马鞍状母线电流毛刺正常再往下调参数。我见过有人扇区映射表配错相电流看起来还挺正弦但调制波形状完全不对母线电容发热明显。这问题靠看电流根本看不出来。先把零序注入和SVPWM的关系理清再回头调试很多怪现象自然就有了解释的角度。
返回列表