开头
我入行电力电子这几年,被问得最多的仿真问题不是各种复杂的闭环控制,反而是最基础的SPWM建模。尤其是“单极性倍频调制”这个词,很多新手一听就觉得高深,实际上原理并不复杂,难的是在Simulink里把它正确搭出来,再让输出波形、谐波指标、滤波参数都能对得上。这篇文章我就把自己调试SPWM单极性倍频全桥逆变器仿真模型的经验完整梳理一遍,从原理推导到Simulink模块搭建,再到谐波分析和参数优化,最后把新手最容易踩的坑也列出来。适合刚接触电力电子仿真、或者正在做全桥逆变器课题的读者,看完可以直接照着搭一个能用的模型。
1. 先把原理掰开揉碎:SPWM、单极性倍频和86.6%到底怎么来的
仿真卡壳,九成是因为原理没吃透。尤其是SPWM这种调制方式,你完全不理解它的波形生成逻辑,参数设错了都不知道问题出在哪。所以这一节我不讲虚的,就把最核心的几个概念说透。
1.1 SPWM的本质:面积等效不是随便说说的
SPWM全称是正弦脉宽调制,核心思路很简单:用一系列宽度按正弦规律变化的脉冲,去等效替代一个正弦波。这就是电力电子里常说的“面积等效原理”,即冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。
具体到实现上,就是用一条低频正弦波作为调制波,一条高频三角波作为载波,两者送入比较器。正弦波瞬时值大于三角波时输出高电平,小于时输出低电平。由于三角波在每个周期内线性上升再线性下降,正弦波幅值越高,在一个载波周期内高于三角波的时间就越长,输出的高电平脉冲就越宽。这样,输出的脉冲宽度自然就跟着正弦波的幅值走了。
仿真时很多人喜欢直接拖一个现成的PWM Generator模块,但我不建议新手这么做。自己先搭一遍比较器电路,你对整个调制过程的理解会深很多。后面我讲模型搭建时也会用最原始的比较器方案。
1.2 单极性和双极性:全桥输出的三电平优势
全桥逆变器有四个开关管,调制方式可以分成双极性和单极性两大类。
双极性调制下,四个管子按对角线成组导通,A组(左上和右下)导通时输出电压为+Ud,B组(右上和左下)导通时输出电压为-Ud。输出电压始终在正负两个电平之间跳变,只有两个电平。
单极性调制则不同,它在输出电压正半周时只输出+Ud和0,负半周只输出-Ud和0。输出电压有三种电平。有意思的是,虽然单极性输出的脉冲少了负电平,但开关管的实际开关频率并没有降低,依然等于载波频率。真正把频率“翻倍”的,是单极性倍频调制。
这里有一个容易混淆的概念:单极性调制的“单极性”指的是输出电压只有单极性脉冲,而不是开关管驱动信号单极性。四个开关管依然要高频动作,该死区的问题一点都不会少。
1.3 倍频是怎么实现的:反相载波让等效频率翻倍
单极性倍频调制的核心操作,是让同一个正弦调制波同时与两路相位相差180度的三角载波进行比较,得到两路SPWM信号,分别驱动全桥的两个桥臂。
两个桥臂的输出电压UA和UB分别都是带正负电平的高频脉冲,但把两者相减得到的全桥输出电压UAB,脉冲重复频率就变成了载波频率的两倍。这就是“倍频”说法的来源。等效开关频率从fc变成了2fc,但每个开关管的动作频率依然是fc。
这里的关键点在于:开关管的开关损耗和开关频率成正比,所以倍频调制没有额外增加损耗,却把输出脉冲的谐波最低频率从fc附近搬到了2fc附近。滤波电感需要抑制的高频分量频率翻了一倍,同样的滤波要求下,电感可以做小一号,体积和成本都能降下来。这是倍频调制在工程上最大的价值。
1.4 86.6%线电压利用率的完整推导
关于线电压利用率只有86.6%这个数字,很多教材直接给结论,新手往往一头雾水。其实这个数值对应的是三相系统,而且特指线电压基波峰值与直流母线电压的比值。
推导是这样的。设直流母线电压为Ud,三角载波峰值为Ud/2,调制比M定义为正弦调制波峰值与载波峰值的比值。当M=1时,正弦波峰值正好等于Ud/2,此时每相输出的相电压基波峰值最大,等于Ud/2。
线电压是两相电压之差,三相系统里线电压幅值等于相电压幅值的根号3倍,所以线电压基波峰值是:
$$U_{线,peak} = \sqrt{3} \times \frac{U_d}{2} \approx 0.866 U_d$$
这就是86.6%的来历。它说的是三相SPWM逆变器在线电压这个维度上,直流电压利用率最高只能做到86.6%。你可能会问,方波逆变器能做到多少?方波逆变器线电压有效值是0.816Ud,折算下来基波成分比SPWM还要高,但方波的谐波含量太大,所以在需要低谐波的场合宁可牺牲一点电压利用率也要用SPWM。
如果是三相电机驱动项目,想进一步提高电压利用率,就要用SVPWM,它能让线电压基波峰值做到和Ud相等,相当于利用率100%。但如果你是做单相全桥逆变器,SPWM单极性倍频调制下输出电压基波峰值最大就是Ud,这里不要跟三相的86.6%搞混了。
2. Simulink模型搭建:手把手搭一个完整的倍频SPWM全桥逆变器
原理清楚之后,就进入实操环节。下面的搭建流程全部基于Simulink基础模块,不依赖额外的第三方库,版本在R2018b以后基本都能跑通。我会把每个关键模块的参数设置一项一项列清楚。
2.1 模型总体架构与仿真参数规划
在动手搭模型之前,先把系统的参数定下来。我这里以一个典型的单相全桥逆变器为例,参数如下:
| 参数 | 数值 | 说明 |
|---|---|---|
| 直流母线电压Ud | 400V | 常见的光伏或储能母线电压 |
| 输出频率f0 | 50Hz | 工频交流输出 |
| 载波频率fc | 9950Hz | 载波比N=199,取奇数保证波形对称 |
| 调制比M | 0.85 | 留出一定调节裕量 |
| 负载电阻R | 10Ω | 阻性负载,便于观察波形 |
| 滤波电感L | 2mH | 抑制高频纹波 |
| 滤波电容C | 10μF | 与电感构成LC低通滤波 |
这里载波频率我特意没选10kHz整数,是因为载波比N=fc/f0最好取奇数。N=200(10kHz/50Hz)是偶数,输出波形正负半周会出现不对称,谐波分析时会看到不该有的偶次谐波。9950Hz对应的N=199是奇数,这个细节很多教程不讲,但实际FFT分析时区别很明显。
仿真步长方面,我建议先用固定步长,步长设置为1e-6秒,也就是1微秒。载波周期约100微秒,一个载波周期内有100个采样点,足够保证脉冲边沿的精度。等模型验证没问题了,再尝试用变步长提高速度。
2.2 载波和调制波信号源:反相三角波的关键设置
倍频SPWM需要两路反相的三角载波。最简单的办法是先用一个Repeating Sequence模块生成三角波,再用一个Gain模块取负号得到反相载波。
Repeating Sequence模块参数设置:
- Time values:输入
[0 1/(2*fc) 1/fc],也就是半个周期和整个周期的时间点 - Output values:输入
[1 -1 1],让三角波从1线性下降到-1,再线性回到1
因为Simulink的Repeating Sequence支持用变量表达式,我一般直接在参数框里写:
[0 1/(2*9950) 1/9950] [1 -1 1]第一路载波Uc1生成后,复制一个Gain模块,Gain值设为-1,就得到反相载波Uc2。这里要注意:两路载波必须是严格反相,相位差180度,幅值和频率完全一致。用取负号的方式比单独再生成一路三角波更可靠,因为不会出现频率或幅值不一致的问题。
调制波用Sine Wave模块:
- Amplitude:0.85(即调制比M)
- Bias:0
- Frequency (rad/sec):2pi50
- Phase:0
有的教程会在调制波里加一个很小的直流偏置,用来消除输出变压器饱和问题,但那是后话,咱们先不加。
2.3 PWM比较逻辑与驱动信号处理
载波和调制波准备好之后,用两个Relational Operator模块做比较。我的习惯是正弦波大于等于载波时输出1:
- 第一路:sin >= Uc1,输出SPWM_A
- 第二路:sin >= Uc2,输出SPWM_B
SPWM_A和SPWM_B就是两个桥臂的驱动信号。全桥每个桥臂有两个开关管,上下管需要互补导通,所以还需要用Logical Operator(NOT)对每路信号取反一次,得到四路驱动信号:
- 桥臂1上管:SPWM_A
- 桥臂1下管:NOT(SPWM_A)
- 桥臂2上管:SPWM_B
- 桥臂2下管:NOT(SPWM_B)
这里涉及一个关键连接关系:全桥输出电压UAB = UA - UB。当SPWM_A为高、SPWM_B为低时,输出+Ud;当SPWM_A为低、SPWM_B为高时,输出-Ud;当两者相同时,输出0。由于SPWM_A和SPWM_B分别由反相载波调制产生,它们的高电平时刻会错开半个载波周期,所以输出电压的脉冲频率自然就变成了载波频率的两倍。
如果你直接用Universal Bridge模块,它每个桥臂的驱动端口是一个2维向量,上管信号放第一个元素,下管信号放第二个元素。可以用Mux把SPWM_A和它的取反信号拼成一个1x2向量。这里我建议新手先用四个独立的IGBT加二极管搭建主电路,虽然模块多一点,但每个管子的驱动关系看得清楚,后面调死区也方便。
2.4 全桥主电路与负载建模
主电路我推荐用Simscape Electrical Specialized Power Systems库里的IGBT模块自己搭全桥,而不是直接用Universal Bridge封装。原因是Universal Bridge虽然简单,但新手一旦驱动信号接错,排查起来很费劲。
搭建步骤如下:
- 直流电源用DC Voltage Source,400V
- 四个IGBT(带反并联二极管)按全桥拓扑连接,左侧两个管构成桥臂1,右侧两个管构成桥臂2
- 桥臂1中点标记为UA,桥臂2中点标记为UB
- UB通过滤波电感和滤波电容连接到UA,构成LC滤波
- 负载电阻接在滤波电容两端
这里要特别提醒:全桥的输出接法不是把负载直接接在一个桥臂中点和直流负极之间,而是接在两个桥臂中点之间。很多新手第一次搭全桥时会把负载接到直流负极,结果得到的是半桥波形,倍频效果完全出不来。
测量环节加上两个电压测量模块和一个电流测量模块,分别测负载电压和负载电流。测量信号接入Scope之前,建议先经过一个Mean或RMS模块查看有效值,方便和理论值对比。调制比0.85、直流母线400V时,理论输出基波有效值约0.85乘以0.707再乘以400,约240V左右,仿真出来如果偏差太大,就要回查连接关系了。
3. 仿真调试、谐波分析与参数优化
模型能跑起来只是第一步,真正考验水平的是调试和优化。一个能用的逆变器仿真,不仅要波形好看,还要谐波指标、滤波参数、运行速度都说得过去。这一节讲我怎么分析仿真结果,以及参数优化的几个关键方向。
3.1 从波形到数据:FFT分析怎么看效果
仿真跑完第一步先看时域波形。正常情况下负载电压经过LC滤波后应该是一条接近正弦的50Hz波形,幅值贴近理论值;而桥臂中点之间的原始PWM波UAB应该是在正负400V之间跳变的等幅脉冲串,脉冲宽度呈现正弦变化规律,且脉冲频率明显高于单个开关管的动作频率。
如果UAB的脉冲频率看起来和开关管驱动频率一样,没有翻倍,说明两路载波的相位差没有设置好,或者两路SPWM信号错误地驱动了同一个桥臂。这是倍频SPWM最容易犯的错误,排查时直接看UA和UB两路信号的Scope波形,应该存在半个载波周期的错位。
波形对了之后,打开Powergui模块,进入FFT Analysis工具进行谐波分析。操作步骤是:双击Powergui,选择FFT Analysis,在Structure下拉框里选择电压测量信号,设置基波频率50Hz,最大频率显示到20kHz或更高,FFT窗口选择周期数建议设为10个周波以上,滚动条拖到最后一次仿真结束时刻,然后点击Display。
分析结果重点看三个指标:
- 基波幅值:应该在0.85乘以400约340V峰值附近
- THD总谐波畸变率:滤波后应在5%以内,我们这组参数实测通常在2%到3%之间
- 谐波分布:应该是谐波能量集中在2fc附近即19.9kHz左右,1kHz以下低频谐波很小
如果发现能量没有集中在2fc附近,而是集中在fc附近,说明倍频没生效。如果低频段出现大量谐波,大概率是载波比选了偶数或者波形本身不对称。
3.2 调制比M和载波比N的选择逻辑
调制比M是正弦调制波峰值和三角载波峰值的比值。M一般在0到1之间,M越大输出电压越高,但谐波也会略微上升。M超过1之后进入过调制区,输出电压不再线性增长,低次谐波会显著增大,所以工程上一般把最大调制比限制在0.9左右,留一点裕量。
载波比N=fc/f0的选择则要在波形质量和开关损耗之间平衡。N越大,谐波频率越高,滤波越容易,但开关损耗也越大。同时N的选取还有一些潜规则:
| 载波比特性 | 选择建议 | 原因 |
|---|---|---|
| 整数性 | 必须是整数 | 保证输出波形周期稳定,避免次谐波 |
| 奇偶性 | 优先取奇数 | 输出波形正负半周对称,消除偶次谐波 |
| 三相场合 | 最好取3的倍数 | 消除三相间的线电压谐波干扰 |
如果只是做单相全桥仿真,记得把载波比取成奇数,比如199、201这些值。很多仿真教程直接用10kHz配50Hz,N=200是偶数,虽然波形肉眼看不出来问题,但FFT分析里会出现本可以避免的偶次谐波,给后续写报告和做实验对比带来不必要的麻烦。
3.3 滤波参数设计:LC截止频率的计算与调试
LC滤波器的设计目标是保留50Hz基波,同时把2fc附近的高频谐波衰减掉。核心参数是截止频率:
$$f_c = \frac{1}{2\pi\sqrt{LC}}$$
我用的L=2mH、C=10μF,算下来:
$$f_c = \frac{1}{2\pi\sqrt{2\times10^{-3} \times 10\times10^{-6}}} \approx 1125Hz$$
这个截止频率约是基波频率的22倍,是等效开关频率20kHz的5.6%,高频谐波会被衰减大约两个数量级,效果已经很不错。如果想进一步压低THD,可以把截止频率调低一些,但要注意截止频率太低会影响系统动态响应,也就是负载突变时输出电压恢复时间变长。
电感纹波电流的估算也很有用。对于单极性倍频调制,电感电流纹波峰值近似为:
$$\Delta I_{max} = \frac{U_d}{4 \times L \times f_{sw_eff}}$$
代入参数,Ud=400V,L=2mH,fsw=20kHz:
$$\Delta I_{max} = \frac{400}{4 \times 2\times10^{-3} \times 20000} = 2.5A$$
也就是说,10Ω负载时平均电流40A,纹波电流峰值约2.5A,占比约6%,这个水平在仿真里完全没问题。如果你发现纹波电流偏大,优先加大电感,电容对电流纹波帮助不大。
3.4 求解器与步长设置的经验值
电力电子仿真有一个让很多人都头疼的问题:仿真速度奇慢或者干脆不收敛。这跟求解器选择关系很大。
我常用的做法是:主电路用Specialized Power Systems库时,把Powergui设为离散模式,采样时间设1e-6秒,求解器选离散固定步长。离散模式最大的好处是仿真速度快,而且不会出现连续变步长求解器在开关时刻反复迭代导致的收敛问题。
如果必须用连续模式,求解器优先选ode23tb或ode15s,这两个都是针对刚性系统设计的,对电力电子这种包含快速开关动作的系统更友好。最大步长建议设置为载波周期的二十分之一,也就是5微秒左右,否则容易漏掉脉冲边沿,导致输出波形失真。
还有一个小技巧:在调试阶段,可以把载波频率暂时降低到1kHz,把滤波电容加大,这样仿真速度会快很多,方便快速检查逻辑有没有问题。逻辑确认无误后再改回真实参数跑最终结果,能省不少时间。
4. 常见问题与排查技巧实录
这一节记录我实际调试中遇到过的典型问题,以及对应的排查思路。很多问题自己折腾很久才发现原因,希望你能绕开这些坑。
4.1 新手最容易翻车的四个坑
第一个坑是输出波形只有正半周或者只有负半周。出现这种情况,多半是负载接错位置了,把负载接到了桥臂中点和直流负极之间,而不是两个桥臂中点之间。全桥输出必须跨接两个桥臂,这是最基本的拓扑常识,但初学者确实容易错。
第二个坑是FFT分析里看到大量偶次谐波。前面提到的载波比N=200就是典型原因。解决办法是把载波频率改成整数的奇数倍,比如9950Hz。改动之后偶次谐波会明显消失,波形对称度也更好。
第三个坑是仿真速度慢到无法接受。除了把Powergui改成离散模式之外,还可以检查一下是不是误用了变步长求解器配很小的相对误差。仿真精度够用就好,相对误差设1e-3足够了,没有必要设到1e-6。
第四个坑是输出电压有效值过低。如果波形形状正确但幅值明显偏小,回查调制比M的设置,再看一下正弦波和三角波的比较方向是不是反了。比较方向反了会输出相反的脉冲序列,看起来像SPWM但实际等效调制比变成了1-M,输出幅值自然低。
4.2 问题速查表
| 问题现象 | 可能原因 | 排查与解决 |
|---|---|---|
| 输出电压无倍频效果 | 两路载波反相关系不对 | 检查第二个载波是否严格取负,用Scope对比载波相位 |
| 输出波形正负不对称 | 载波比为偶数 | 载波频率改为50Hz的奇数倍,如9950Hz |
| 输出波形呈马鞍形 | 调制比M超过1进入过调制 | 降低M至0.9以下 |
| 谐波集中在fc附近而非2fc | 驱动信号未按倍频逻辑分配 | 确认SPWM_A和SPWM_B分别驱动不同桥臂 |
| 仿真不收敛 | 变步长求解器不合适 | 切换到ode23tb,或改用Powergui离散模式 |
| 输出直流分量过大 | 调制波含有直流偏置 | 检查Sine Wave的Bias参数是否为零 |
4.3 死区、双闭环和进一步拓展方向
关于死区,仿真初期可以先不设置,因为理想驱动信号直接驱动IGBT不会出现直通。但做硬件实验之前一定要考虑死区。死区会带来输出电压损失和低次谐波,尤其是在调制比高的时候更明显,这也是为什么实际项目的调制比很少超过0.85。在Simulink里模拟死区可以用Transport Delay配合逻辑运算实现,但逻辑稍微复杂,等基础波形跑明白再尝试更稳妥。
模型验证没问题后,还可以往上扩展。把这套倍频SPWM全桥逆变器作为功率级,加入电压外环和电流内环的双闭环控制,就变成了一个完整的逆变器并网或离网系统。还可以把阻性负载换成LC滤波器加非线性负载,观察谐波性能在不同负载条件下的表现。更进阶的方向是把调制策略从SPWM换成SVPWM,对比两者在相同直流母线电压下的输出电压差异,这个对比实验做完,你对电压利用率这个概念就会有切身体会了。
我个人在实际调试中最大的体会是:Simulink模型不怕慢,就怕错;模块摆放可以乱,但信号流向必须心里有数。建议每次都先把UA、UB、UAB三路波形放在同一个Scope里对比着看,倍频是否生效一眼就能判断。等这套全桥模型跑通了,后面再做三相逆变器、电机控制、并网变流器,你会发现底层的SPWM思路都是相通的,只不过桥臂数量变多、调制策略更复杂而已。