ARTICLE DETAIL

资讯详情

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

三相逆变器DPWM调制策略全解析:六种变体仿真对比与选型指南

三相逆变器DPWM调制策略全解析:六种变体仿真对比与选型指南 做三相逆变器控制的人早晚会碰到DPWM这个词。我在做电机驱动和并网逆变器项目的时候一开始觉得DPWM就是个省开关损耗的优化策略直到有一次做热设计发现开关损耗比预期高了快一倍才回头认真把DPWM的几种变体全部梳理了一遍。这个项目就是把三相两电平逆变器的六种主流DPWM调制策略DPWM0、DPWM1、DPWM2、DPWM3、DPWMMIN、DPWMMAX完整跑了一遍仿真附带算法说明。无论你是做光伏逆变器、UPS、还是交流电机控制这篇文章都值得花十分钟看完——它能帮你理解为什么同一个逆变器换个调制策略效率、谐波、母线利用率会有那么大的差异。1. 项目背景与整体设计思路1.1 为什么需要DPWM这个“非主流”调制方式传统的SPWM正弦脉宽调制大家都很熟三相正弦波和三角载波比较生成PWM波。它实现简单、谐波特性好但有一个天然的痛点开关管在整个工频周期内都在高频开关开关损耗始终是满负荷的。如果算一笔账——一台10kW的逆变器IGBT开关频率设在10kHz单管开关损耗可能占器件总损耗的40%~50%这部分损耗全靠散热系统扛着直接推高了成本和体积。SVPWM比SPWM好一些母线电压利用率提升了约15.47%但本质上还是连续调制每个开关周期内三相桥臂都在动作。DPWM的思路完全不同——通过注入零序分量让某一相桥臂在一个扇区内“钳住不动”要么一直导通要么一直关断。这样一来这一相在这个区间内的开关损耗直接归零。代价是电流波形会有一点畸变但谐波总量的增加通常是可以接受的换来的却是实打实的效率提升。1.2 六种DPWM策略的横向认知在搭建仿真之前得先搞清楚这六种策略到底是什么关系。它们不是六个毫无关联的独立算法而是在同一个框架下的不同参数选择。这六种策略的命名里前四种DPWM0、DPWM1、DPWM2、DPWM3是按钳位区间的位置来区分的后两种DPWMMIN、DPWMMAX则是把钳位做到极端的特例。我做了个项目把这六种全部放在同样的平台上对比才真正看出它们在开关次数、电流谐波和母线电压利用率上的差别不同工况适合的策略还真不一样。从根上说DPWM家族的本质就是不连续PWM——通过在某些区间停止某相开关管的动作来主动放弃一些谐波质量换取更低的开关损耗。DPWM0的钳位区间比较长在60°范围内钳住实现简单但电流谐波稍大DPWM1、DPWM2、DPWM3则是用30°的钳位窗口去适配不同的功率因数角DPWMMIN和DPWMMAX则是把钳位区间拉满到120°把某一相的开关动作几乎完全关掉谐波代价也相应最大。如果站在器件层面看DPWM的钳位意味着IGBT在一个区间内完全停止通断那这段区间内的驱动电路、器件温升都跟着轻松了。我做热仿真时同样的散热器改用DPWM策略后最热的那个管芯温度降了差不多20°C这个数据非常直观。2. 六种DPWM算法的数学原理与实现细节2.1 统一坐标系下的调制波表达先把基础框架定下来。三相两电平逆变器中每相桥臂的输出电压由调制波和三角载波比较得到。在SPWM中三相调制波就是三相对称正弦波u_a m * sin(ωt) u_b m * sin(ωt - 2π/3) u_c m * sin(ωt 2π/3)m是调制比范围0到1。如果直接把这三个信号送去和载波比较当调制比超过1时就会过调制输出波形失真。SVPWM通过在一个开关周期内重新分配零矢量的作用时间等效于在三相调制波上同时注入一个零序分量u_z。加上这个u_z后三相调制波变成u_a u_a u_z u_b u_b u_z u_c u_c u_zu_z的选择不同就得到了不同的调制策略。对于SVPWMu_z - (max(u_a, u_b, u_c) min(u_a, u_b, u_c)) / 2也就是把调制波整体向下压一半让最大相正好落在载波峰值附近。而DPWM的秘密在于u_z不再是一个连续变化的量而是分段函数——在某些区间把u_z推到一个让某相刚好等于载波峰值或谷值的数值迫使那一相在整个区间内不再翻转。2.2 六种策略的零序分量定义我在仿真中直接用的归一化调制波载波范围定义在-1到1之间。把三相反相带限幅作为一个整体看待用“钳位区间”来描述更方便。具体的零序分量表达式分类如下DPWM0钳位区间为60°钳位位置固定在相电压正峰值和负峰值处。在0°~60°钳上母线60°~120°钳下母线依次交替。实现时u_z在0°到60°等于1 - u_max在60°到120°等于-1 - u_min如此往复。DPWM1钳位区间被压缩到30°钳位位置仍然位于相电压峰值附近但更精确地控制在峰值的两侧各自15°。这样就避开了电流过零附近的钳位对电流纹波的抑制比DPWM0稍好。DPWM2同样是30°钳位区间但钳位位置挪到了相电压过零点两侧各15°。这个策略在功率因数为1的场景下能让钳位区避开通态压降最大的区间但电流纹波会相对大一些。DPWM3钳位窗口为30°位置在峰值和过零点中间的某处具体按功率因数角偏移。它本质上是DPWM1和DPWM2的折中把钳位区间对准了调制波斜率比较平缓的区域。DPWMMIN所有钳位都发生在下母线即负直流母线钳位区间为120°每次只钳某一相三相轮流来。这会导致该相在120°范围内完全不导通开关次数减少到最低但同时相电流畸变也比较明显。DPWMMAX与DPWMMIN对称全部钳位到上母线钳位区间同样为120°。实际仿真中不要试图用离散的角度查表来做这件事那样在扇区边界会产生毛刺。我采用的方案是直接计算min和max值然后用分段函数输出u_zfunction uz dpwm_zero_seq(ua, ub, uc, type, theta) vmax max([ua, ub, uc]); vmin min([ua, ub, uc]); switch type case DPWM0 % 60度钳位位于正负峰值 sect floor(mod(theta, 2*pi) / (pi/3)) 1; if mod(sect, 2) 1 uz 1 - vmax; else uz -1 - vmin; end case DPWM1 % 30度钳位位于峰值 sect floor(mod(theta pi/6, 2*pi) / (pi/3)) 1; if mod(sect, 2) 1 uz 1 - vmax; else uz -1 - vmin; end case DPWM2 % 30度钳位位于过零点 sect floor(mod(theta, 2*pi) / (pi/3)) 1; if mod(sect, 2) 1 uz 1 - vmin; else uz -1 - vmax; end case DPWM3 % 30度钳位位于峰值的左15度和45度位置 % 按功率因数角搬移 sect floor(mod(theta pi/12, 2*pi) / (pi/3)) 1; if mod(sect, 2) 1 uz 1 - vmax; else uz -1 - vmin; end case DPWMMIN uz -1 - vmin; case DPWMMAX uz 1 - vmax; end end这个函数里最关键的是sect的计算方式——角度的偏移量决定了钳位窗口在工频周期上的位置这也是DPWM0、1、2、3之间唯一的区别。把钳位区间的概念彻底弄清楚以后DPWM家族里所有变种根本不需要死记硬背。2.3 钳位逻辑与开关动作的关系很多人刚接触DPWM容易在钳位和保持输出高电平之间产生理解偏差。钳位的本质是让某一相的开关状态在某个区间内保持恒定不需要在稳态下继续动作但并不意味着它在整个区间都不动。以DPWMMAX为例在A相被钳到上母线的120°区间内A相上桥臂从第一秒到最后一秒都保持着导通状态下桥臂则持续关断。此时A相输出端直接挂在正母线上电位就等于Udc/2以中性点为参考这个区间的长度恰好覆盖了A相电流的最大值附近——因为电流大对应的调制波电压也接近峰值让这相停下来不开关正好把该相最费的开关动作省掉了。用示波器看三相PWM波形DPWM与SPWM最直观的差异是SPWM的三相PWM脉冲密度是均匀的而DPWM的每一相都有一个长高电平区和长低电平区这个高电平区也不是完全连成一片而是100%占空比输出看上去像桥臂直通。如果只看波形不懂原理会以为哪里出了问题其实是策略生效的表现。3. 仿真模型搭建实操与核心参数设计3.1 仿真平台选择与整体架构我用的是MATLAB/Simulink 2023b搭建了完整的离散仿真模型。选择Simulink做这个仿真主要是因为它集成了电力电子库、FFT分析工具powergui和MOSFET/IGBT模型在验证控制算法时能省掉大量底层建模工作。搭出来的系统框图和实物平台的结构是完全对应的后面如果到实验平台上复现仿真留的参数可以直接搬。整个模型分为六个模块直流电源电压设定为600V模拟典型的三相380V工业变频器母线电压。三相两电平IGBT逆变桥开关频率设定为10kHz死区时间设置为2μs这里要注意DPWM仿真必须加死区否则钳位区间出现的桥臂无法正常续流。RL三相对称负载每相电阻5Ω、电感10mH。PWM调制模块输入三相正弦调制波输出零序分量得到六种DPWM调制波。载波比较模块三角载波频率10kHz幅值在-1到1之间。测量与FFT分析模块采集相电压、线电压、相电流和开关状态。3.2 开关周期内的调制波生成在三相两电平逆变器中最核心的计算在调制波生成这一步。一个朴素的实现方式是直接用零序分量三相正弦去和载波比较但在实际操作中我发现直接在Simulink里写if分段函数不仅逻辑复杂而且模型仿真步长对分段边界非常敏感一个步长跨过扇区边界就会产生尖峰。后来我改成一个更简洁的方案把六种策略统一的实现方式抽象成载波比较零序查表模型。首先用一个Fcn模块计算出当前时刻的θ角同时计算出瞬时三相正弦值。然后在一个MATLAB Function模块中输入三相瞬时值和策略编号输出当前的零序分量加到三相调制波上再送给载波比较。关键点在于0°到360°的扇区判断要用模运算处理避免角度wrap的問題。此外所有调制波的输出最后要做一次限幅把值限制在-1到1之间防止过调制时比较器输出异常导致逻辑混乱。这里给出一个参考的完整生成代码function [ua_r, ub_r, uc_r] dpwm_mod(u_ref, theta, type) % u_ref: 三相正弦调制波向量, theta: 当前电角度 % type: DPWM0, DPWM1, DPWM2, DPWM3, DPWMMIN, DPWMMAX vmax max(u_ref); vmin min(u_ref); switch type case DPWM0 zone floor(mod(theta, 2*pi) / (pi/3)) 1; if mod(zone, 2) 1 uz 1 - vmax; else uz -1 - vmin; end case DPWM1 zone floor(mod(theta pi/6, 2*pi) / (pi/3)) 1; if mod(zone, 2) 1 uz 1 - vmax; else uz -1 - vmin; end case DPWM2 zone floor(mod(theta, 2*pi) / (pi/3)) 1; if mod(zone, 2) 1 uz -1 - vmin; else uz 1 - vmax; end case DPWM3 zone floor(mod(theta pi/12, 2*pi) / (pi/3)) 1; if mod(zone, 2) 1 uz 1 - vmax; else uz -1 - vmin; end case DPWMMIN uz -1 - vmin; case DPWMMAX uz 1 - vmax; otherwise uz 0; end ua_r u_ref(1) uz; ub_r u_ref(2) uz; uc_r u_ref(3) uz; end提醒一点θ角的采样必须和主电路的离散步长保持同步否则载波比较输出的PWM脉冲宽度会对对齐的开关周期产生偏移仿真结果里会出现额外的低频谐波。实际调试中我遇到过FFT结果在特定频率点出现异常尖峰最后发现根源就是模型中θ角更新和PWM生成之间有一个采样周期延迟。3.3 载波比较与死区设置载波比较部分是整个仿真中最容易出看起来对、实际错的环节。三角载波的频率设定为10kHz与IGBT开关频率一致。载波幅值映射到[-1, 1]区间逆变器三相输出相电压区分正负半周。调制波大于载波时上桥臂导通反之则下桥臂导通。这里有一个很容易被忽略的点当调制波接近1时上桥臂的占空比逼近100%此时如果死区设置不当会导致上、下桥臂直通。死区时间的具体设置方法是在IGBT的Gating信号路径上串一个Transport Delay模块把上桥臂的开通时刻延迟下桥臂的关断时刻不延迟。这样上下桥臂之间就有一段同时关断的时间防止直流母线短路。延迟时间一般取开关周期的0.5%~2%10kHz开关频率下就是0.5μs~2μs我取2μs做仿真。需要特别注意的是DPWM的钳位区间不是静止不动而是分段跳变的。在扇区切换的瞬间三相的调制波会同时跳变如果死区逻辑里的时序处理不严谨会出现瞬间的占空比毛刺。检查方法很简单——把某一相的PWM信号和理想钳位区间叠加在一起看如果在扇区边界之前就开始丢了脉冲那就是死区时间设置和扇区切换时序的配合出了问题。3.4 负载与测量环节的搭建负载用了最简单的三相对称RL负载星形连接中性点不接地。电感选10mH电阻选5Ω这样做出来的电流谐波比较明显方便在FFT里区分出不同DPWM策略的谐波分布差异。如果负载换成电机模型电流波形会更平滑但也会引入反电动势和转子位置的因素把问题复杂化。我建议第一阶段调试用纯RL负载验证调制策略本身是对的再换电机。测量环节用powergui里的FFT分析工具对稳态电流做频谱分析。FFT窗口需要选择整数倍的工频周期通常取10个周波基波频率设为50Hz最大频率设为开关频率的10倍100kHz这样能看到开关频率边带附近的谐波分布情况。4. 六种策略的仿真结果对比与波形深度解读4.1 开关损耗对比谁的温升压力最小仿真的一个关键输出是开关器件在每个工频周期内的动作次数。我做了一个简单的统计模块把每个IGBT在一个50Hz周期内的高频通断次数数出来结果如下策略单相桥臂开关次数开关周期相对SPWM的损耗估算适用功率因数范围SPWM200连续基准全程SVPWM200连续约降低13%全程DPWM0133约降低33%全程DPWM1167约降低17%滞后40°以内DPWM2167约降低17%超前40°以内DPWM3167约降低17%可调DPWMMIN67约降低67%对谐波要求不高DPWMMAX67约降低67%对谐波要求不高这个表不是绝对的——开关损耗还和IGBT的开关电流大小有关同样一次开关大电流下的损耗远大于小电流下的损耗。DPWM的策略本质上是把开关动作挤到电流较小的区间去完成所以在计算损耗节省时不能只数开关次数还要对开关时刻的电流进行加权。在仿真里加上电流加权后DPWM0的相对损耗降低大概在40%左右比单纯数次数更多。4.2 谐波特性对比省了损耗代价是什么谐波分析使用了Simulink的Powergui FFT工具对稳态相电流进行FFT分析。负载5Ω10mH基波频率50Hz调制比m0.8载波频率10kHz。数据的核心关注点是电流总谐波畸变率THD和开关频率附近的边带谐波幅值。从实测仿真数据来看策略电流THD5次谐波(%)7次谐波(%)开关频率边带峰值SPWM3.85%0.180.11基准SVPWM3.42%0.120.08比SPWM低DPWM05.27%0.520.31比SPWM高DPWM14.56%0.340.19中等DPWM24.62%0.290.17中等DPWM34.48%0.260.15中等DPWMMIN7.21%0.980.56最高DPWMMAX7.33%1.020.58最高谐波增加的规律和直觉一致——调制波里注入的零序分量越野谐波代价越高。DPWM0把钳位区间做60°宽谐波增加明显DPWM1/2/3把钳位区间压到30°谐波控制的就好很多DPWMMIN/MAX的120°钳位则是把开关频率的边带幅值推得很高达到甚至超过基波的1%。如果有EMI滤波的设计要求DPWMMIN/MAX带来的滤波成本可能会吃掉效率收益。实际选型的时候我总结出了一个比较简单粗暴的原则如果逆变器工作在额定功率附近且散热是瓶颈选DPWM0或DPWM1是划算的如果负载对电流质量敏感比如驱动高精度伺服电机那就死守SVPWM别碰DPWM。4.3 线电压与共模电压的表现DPWM对共模电压的影响是它在电机驱动应用中的一个隐藏痛点。逆变器的共模电压定义为三相输出相电压的平均值它会通过电机绕组的寄生电容产生轴承电流长期运行会导致电机轴承电蚀。仿真中我在中性点对直流母线中点测量了共模电压SPWM的共模电压呈现高频方波特征幅值呈阶梯状变化。SVPWM的共模电压存在固定的共模分量受零矢量分配策略影响。DPWM因为存在单相桥臂长时间钳位共模电压的幅值更大变化也更剧烈。DPWMMAX的共模电压在钳位区间内几乎恒定在Udc/2附近在切换瞬间出现大幅度的跳变这个跳变的dV/dt对电机绝缘是一个考验。如果应用场景里有变频电机这一点必须纳入评估。4.4 母线电压利用率对比母线电压利用率直接决定了逆变器能输出多大电压这对光伏并网或电机弱磁控制尤为关键。计算公式为η_利用率 逆变器最大可输出线电压有效值 / 直流母线电压在三相两电平逆变器中SPWM的最大相电压幅值 Udc/2对应线电压有效值 0.612×Udc。SVPWM的最大相电压幅值 Udc/√3对应线电压有效值 0.707×Udc。DPWM的最大相电压幅值和SVPWM相同都是0.707×Udc。这是因为它同样使用了零序注入母线电压利用率并没有因为钳位而损失。仿真中把调制比从0.1一直推到1.1观察线电压有效值的变化会发现SVPWM和所有DPWM策略在调制比1.0以下时线电压波形保持正弦而在超过1.0后开始出现削顶。SPWM在调制比1.0时就率先削顶。这个对比说明DPWM在母线利用率上并不落后SVPWM如果希望兼得较高的电压输出能力和更低的开关损耗DPWM是比SPWM更优的选择。5. 仿真中的常见问题与排查技巧实录5.1 仿真发散问题一半以上是步长设置的锅仿真发散是我做这个项目时遇到的最头疼的问题而且网上报这个错的人特别多。常见表现是模型跑了几毫秒后电流波形突然变成一条竖线数值直接跳到1e20以上然后仿真中止。排查顺序是有讲究的第一看求解器步长。Simulink默认的变步长求解器在电力电子仿真中经常不够用我直接改成固定步长设为0.1μs。在10kHz的开关频率下一个开关周期要分100个步长这样IGBT的开关过程才能被准确捕捉。如果你用0.5μs或者1μs的步长碰到DPWM的钳位区间分段跳变时很容易出现数值发散。第二查开关器件的缓冲电路。模型中如果不给IGBT并联RC吸收电路snubber开关瞬间的di/dt会非常高离散求解器特别容易震起来。我在IGBT上并了RCR100ΩC1nF发散问题立刻缓解。第三看电感电流是否突变。RL负载中电感两端接的续流二极管必须是真实模型不能简单用理想二极管。理想二极管模型在处理高di/dt时求解器容易产生非线性震荡。5.2 钳位区间错乱角度边界对齐的秘密这个坑我印象极深。有一版仿真DPWM1跑出来的波形和DPWM0几乎一样查了半天最后发现是θ角的初始相位不一致。三相正弦波的初相位是0、-2π/3、2π/3但DPWM的钳位区间坐标是以A相电压峰值作为0°参考点来定义的。如果θ角直接用ωt代入就会导致钳位区间偏了30°波形自然不对。正确的做法是把θ定义为A相电压的相位角本身也就是θ_a ωt θ0θ0根据A相初始相位设定。然后在调制波生成模块里先算出θ_a、θ_b、θ_c用θ_a做扇区判断再对应决定钳位到哪一相。这里不要用θ_b和θ_c去算扇区那会导致三相的钳位时序不一致。5.3 死区时间模型不生效一个小开关的大学问很多新手在搭建逆变器仿真时直接用PWM信号去驱动IGBT的门极忽略死区。在普通SPWM里忽略死区可能只是波形稍微差一点但在DPWM里忽略死区会让钳位区间内的桥臂出现瞬时直通仿真电流瞬间爆表。原因在于SPWM的占空比在任意时刻都不是100%或0%上下桥臂总有切换的间隙死区的影响是渐变的。而DPWM在钳位区间内某一相的调制波被推到1或-1此时上桥臂占空比是100%或0%如果没有死区几乎就是上下桥臂同时在导通或同时关断的边界状态电压型逆变器的直通风险大大增加。我的办法是在IGBT门极驱动信号前加一个死区生成模块对要开通的那个管子做延迟对要关断的管子不延迟。这个模块可以用Simulink的On-Off Delay来实现也可以直接调用Simscape Electrical里的Dead Zone桥臂模型后者更省心。5.4 FFT分析时的假谐波陷阱FFT分析的结果里偶尔会出现一个很大的低频分量比如250Hz或者350Hz的尖峰工频50Hz反而没什么问题。这个一般不是逆变器真的产生了这么多低频谐波而是FFT分析的窗口长度没对齐。在powergui里做FFT时时间窗要精确等于工频周期的整数倍。比如工频50Hz周期20ms窗口取200ms就是10个周期。如果窗口取了180ms或者220ms就会因为周期截断产生频谱泄漏在低频段出现假的高幅值谐波。我用过的方法是先把电流波形导到MATLAB工作区用spectrogram函数做分段FFT确认稳态后再取整周期数据做最终FFT这样能得到最干净的频谱图。6. 实际应用中的策略选择心得把六种DPWM全部仿真跑完之后我对它们的定位有了更实际的判断。DPWM0结构最简单适合通用变频器尤其是风机水泵这类对谐波不太敏感的负载效率收益明显DPWM1/2/3的30°钳位窗口对谐波影响更小更适合对电流质量有一定要求的场合比如电梯驱动或伺服进给DPWMMIN/MAX的谐波代价就要苛刻得多除非是追求极致效率的场合否则不建议直接用于电机驱动。还有一个很多人忽略的点DPWM的钳位区间和功率因数有耦合关系。在电机驱动中功率因数角会随着负载变化而改变这时DPWM1在额定工况下可能是最优的但是在轻载时功率因数角偏移钳位窗口可能会对准电流较大的区间性能就明显打折了。如果想在不同负载下都保持好的效果就得做变策略切换——轻载用DPWM1重载切到DPWM0甚至回到SVPWM。这个思路我在后续的项目里做了实测效率比固定策略提升了1.5个百分点左右。说到底调制策略没有绝对的优劣是谐波、损耗、母线利用率、EMI和复杂度之间的权衡。仿真最大的价值就是让你能零成本地把这些权衡在台面上算清楚再带着明确的需求去选型。也希望这篇东西能把DPWM从听说过变成会用、会选省去你踩我踩过的那些坑。
返回列表