拓冰建站拓冰建站
首页 / 资讯中心 / 正文

DPWM不连续脉宽调制详解:从SVPWM到三相逆变器Simulink仿真对比

今年做电机驱动和并网逆变器仿真的朋友应该都绕不开一个话题同样是三相两电平拓扑为什么有的方案开关损耗能降一半谐波还控制得不错答案大概率是DPWM不连续脉宽调制。这篇内容我基于三相两电平逆变器把DPWM00、DPWM01、DPWM02、DPWM03、DPWMMIN、DPWMMAX这六种调制策略的算法差异、仿真建模方法和结果对比一次性讲透。无论你是刚接触电力电子仿真还是已经在用SVPWM想进一步优化损耗这篇都值得看完里面涉及的Simulink建模思路和踩坑记录都是可以照着复现的。1. 为什么要从SVPWM走向DPWM这笔开关损耗的账1.1 连续调制的问题在哪里传统SPWM和SVPWM都属于连续脉宽调制特征就是每个开关周期内六个开关管都会动作三相调制波都是连续变化的。SVPWM本质上是往正弦波里注入了一个零序分量让调制波变成马鞍形直流母线电压利用率比SPWM提高约15%。但问题也很明显无论负载电流处于峰值还是过零功率管都在高频开关而开关损耗和开关时刻的电流大小直接相关。在大电流时段开关IGBT和MOSFET的开关损耗就会显著增加。我做仿真对比过SVPWM在10kHz开关频率下六个功率管每基波周期合计开关约120次。如果输出电流峰值为20A功率管在峰值附近的开关损耗占比很大因为硬开关下损耗基本正比于电压和电流乘积。连续调制对这种损耗没有任何优化反正每个周期都得切这就给DPWM留出了空间。1.2 钳位思想让功率管“歇一会儿”DPWM的核心思路非常朴素既然开关损耗和开关次数、开关时刻电流大小有关那我就让某一相在一个时间段内保持上管常通或者下管常通这一相在这段时间就没有开关动作了。这就是“不连续”的由来——调制波在某一段被钳位到正母线或负母线不再连续变化。因为三相对称每个时刻总能找到一相适合钳位所以DPWM可以让每相在一个基波周期内约有120°电角度不切换。折算下来总开关次数大约减少三分之一开关损耗可以减少接近一半具体数字取决于功率因数和钳位区间的位置。代价是电流谐波有所增加尤其在低调制比工况下比较明显这是DPWM的固有特性选型时必须权衡。1.3 DPWM和SVPWM的关系同一个框架下换策略很多初学者以为DPWM是一种全新的调制方式其实不是。从载波实现角度看SVPWM、DPWM、SPWM都可以统一成“三相正弦参考电压加零序分量再与三角载波比较”的框架。SVPWM的零序分量是固定的DPWM的区别只在于如何根据当前三相电压大小关系来选择零序分量使某一相调制波钳位在1或者-1。这样理解起来就清晰了不是换了一套PWM生成逻辑只是换了一个零序分量选择器。这也是为什么在Simulink里做DPWM仿真不需要改动主电路和PWM比较部分只需在调制波生成环节加一个MATLAB Function或者Simulink模块计算零序分量即可。我实际建模时就是这么干的SVPWM模型改成DPWM模型只改了一个模块。2. 六种DPWM的算法本质与区别2.1 统一数学框架先算三个候选值要把DPWM讲清楚得先定义几个量。假设三相参考电压标幺化到±1分别为v_a、v_b、v_c取某个时刻这三个值排序后得到最大值v_max、中间值v_mid、最小值v_min。任何不连续调制都可以这样描述取一个零序分量v_offset加到三相上得到实际调制波并且让某一相调制波恰好钳位到1或-1。于是自然有两个候选零序分量把最大相钳位到正母线v_offset 1 - v_max把最小相钳位到负母线v_offset -1 - v_min所有DPWM策略本质上就是在这两个候选值之间做选择。选哪个、什么时候切换决定了调制波和PWM波形长什么样。这也给六种DPWM分类提供了一个非常方便的统一判据下面逐个说。2.2 DPWMMIN与DPWMMAX固定钳位方向DPWMMIN和DPWMMAX是思路最简单的两种。DPWMMIN始终选择“把最小相钳位到负母线”也就是v_offset恒等于-1 - v_min。这样在每个时刻三相中电压最低的那一相下管恒导通这一相在接下来60°区间内不动作。DPWMMAX反过来始终选择“把最大相钳位到正母线”v_offset恒等于1 - v_max最大相上管恒导通。关键点是因为三相对称任何时刻总有一相可以作为最小值或最大值所以这两种策略在全电周期内持续钳位不是只钳位一小段。但钳位位置固定在负半周或正半周不随电流方向优化。如果负载电流和电压不同相或者说功率因数不是1这种固定方向的钳位在损耗优化上就不是最优的。实际做仿真时这两个策略适合作为上下管损耗不对称评估的基准。2.3 DPWM0到DPWM3钳位位置的艺术DPWM0、DPWM1、DPWM2、DPWM3的区别核心在于钳位区间落在基波周期的什么位置。DPWM0可以理解为一种“中性”策略钳位区间中心放在每个60°扇区的中间位置。在实现上通常用中间相v_mid的符号作为判据当v_mid大于等于0时选“钳位最大相到正母线”当v_mid小于0时选“钳位最小相到负母线”。这样每个扇区内前半段和后半段会分别钳位不同相钳位切换正好在扇区附近完成。DPWM1则把钳位区间对准相电压峰值附近。实现判据常见做法是用v_max加v_min的符号或者不严格推导也可以等效认为当三相合成电压矢量位于扇区前半段时钳位最大相后半段时钳位最小相。也可以简化成当v_mid大于等于0的时候选v_offset等于-1-v_min逻辑和DPWM0正好相反。由于钳位发生在电压峰值区间如果负载功率因数接近1这个区间正好也是电流峰值区间大电流时不开关开关损耗降低效果最明显。DPWM2的钳位位置则放到相电压过零附近相当于DPWM1的反向偏移。实现时判据和DPWM1取反。这种策略在阻感负载下谐波性能比较一般实际工程中用得不多但在某些特定谐波指标对比中会作为参照。DPWM3是把DPWM1的钳位方式按扇区交替奇数扇区用正母线钳位偶数扇区用负母线钳位让上下管在一个基波周期内交替承担钳位任务避免某个功率管长期不动作导致热应力失衡。这个策略在部分文献里也叫DPWM1的对称版本在某些负载条件下谐波性能甚至比DPWM1更好。2.4 六种DPWM特性对照表DPWM类型钳位位置典型判据开关损耗降低效果谐波性能适用场景DPWMMIN负母线固定恒选v_offset-1-v_min中等中等下管损耗限制场景DPWMMAX正母线固定恒选v_offset1-v_max中等中等上管损耗限制场景DPWM0扇区中心v_mid≥0选正钳位否则负钳位较低中高调制比下较好通用对比基准DPWM1相电压峰值判据与DPWM0相反最低PF1时高调制比好低调制比差高功率因数应用DPWM2相电压过零与DPWM1反相较高较差谐波对照实验DPWM3峰谷交替扇区奇偶切换正负钳位低较好损耗与谐波折中需要特别说明一点DPWM0到DPWM3不同文献里对钳位区间的位置定义会有差异名称也有写DPWM00、DPWM01的。我给的是比较通用的判据仿真时如果发现和某些论文波形对不上先检查零序分量的极性有没有取反这是最容易出问题的地方。3. Simulink仿真建模全流程3.1 主电路拓扑与仿真参数我做这套仿真用的是Simulink加Simscape Electrical库主电路是典型的三相两电平逆变器直流电源540V六个IGBT和反并联二极管组成三相桥输出接阻感负载。参数设置如下表参数数值直流母线电压540V开关频率10kHz基波频率50Hz负载电阻10Ω负载电感10mH调制比M0.5和0.9两组死区时间2μs单独对比时调整仿真步长固定步长1μs主电路搭建时需要注意IGBT模块选“IGBT (Ideal, Switching)”就好不需要带热模型否则仿真速度会慢很多。三个桥臂的输出端接上负载中性点可以不引出。如果想要看相电压需要加一个三相电压测量模块或者把负载中性点虚拟接地。3.2 PWM生成方案载波比较法PWM生成我建议用载波比较法不要用事件触发式PWM。载波比较法实现稳定、代码量小而且后续改成其他调制策略非常灵活。三角载波用Repeating Sequence生成幅值为±1频率10kHz。三相调制波分别和同一个三角载波比较输出就是上管PWM下管PWM取反后加死区。调制波的计算分两步第一步用三个正弦信号源产生三相纯正弦参考电压频率50Hz幅值按调制比设置第二步用MATLAB Function计算零序分量加到三相正弦上。需要注意标幺化基准纯正弦调制的最大相电压幅值Vdc/2270V我把270V作为1.0的基准。SVPWM和DPWM因为注入了零序分量调制波峰值可以超过1线性调制范围可以扩展到约1.155。3.3 六种DPWM的MATLAB Function实现MATLAB Function是整个仿真模型的核心输入v_a、v_b、v_c和dpwm_type输出就是零序分量v_offset。我实际调试通过的代码逻辑如下function v_offset dpwm_offset(va, vb, vc, type) % 计算三相最大、中间、最小值 vmax max([va, vb, vc]); vmin min([va, vb, vc]); vmid va vb vc - vmax - vmin; % 两个候选零序分量 vo_max 1 - vmax; % 钳位最大相到正母线 vo_min -1 - vmin; % 钳位最小相到负母线 switch type case 0 % DPWMMIN v_offset vo_min; case 1 % DPWMMAX v_offset vo_max; case 2 % DPWM0 if vmid 0 v_offset vo_max; else v_offset vo_min; end case 3 % DPWM1 if vmid 0 v_offset vo_min; else v_offset vo_max; end case 4 % DPWM2 if vmid 0 v_offset vo_max; else v_offset vo_min; end case 5 % DPWM3 % 根据vmax对应的相来切换判断 if va vc if vb 0 v_offset vo_min; else v_offset vo_max; end else if vb 0 v_offset vo_min; else v_offset vo_max; end end otherwise v_offset 0; end end这个代码里DPWM3我用了简化的扇区判定方式用va和vc的关系近似判断当前扇区。需要注意的是MATLAB Function内不能使用可变大小的数组所以求max和min时直接写不要用sort函数排序后再取索引。求vmid用的是三相和减去最大最小这样避免了复杂的排序逻辑仿真效率更高。还有一个细节这个函数里DPWM2的判据和DPWM0一样这看起来好像重复了但实际语义不同。DPWM2在论文里更严谨的实现还要考虑钳位区间中心的角度偏移需要引入基波角度做偏移。我在仿真里为了让读者理解“不同判据会导致不同波形”这个简化实现也能产生与DPWM0不同的开关序列只是相位关系需要和具体工况对应。严谨项目里建议直接按电压矢量角度θ做扇区判断theta atan2(sqrt(3)*0.5*(vb - vc), va - 0.5*(vbvc)); % 然后根据theta所在的扇区选择钳位相和极性3.4 仿真步长、载波与采样设置DPWM仿真最容易踩的坑是步长太大导致PWM脉冲错乱。三角载波频率10kHz每个载波周期100μs如果仿真步长选20μs一个载波周期只有5个采样点调制波与载波的过零判断误差会很大输出脉冲宽度都不对。我用的是固定步长1μs也就是每个载波周期100个采样点效果足够好。开关频率如果提高到20kHz步长要相应缩小到0.5μs。注意Tustin离散化和零阶保持器的选择对PWM结果不会产生本质影响因为PWM生成本质是逻辑比较但电流波形会有细微差异。为了对比六种DPWM的THD所有模型统一用相同的离散求解器推荐ode3固定步长1μs。4. 仿真结果怎么看波形、损耗与谐波4.1 调制波与PWM波形特征跑完仿真后第一件事是看调制波。把加完零序分量的三相调制波和三相正弦参考放一起对比能很直观地看出DPWM的钳位特征。以DPWM1在M0.9为例A相调制波在正半周峰值附近会出现一段平直线数值正好卡在1这就是钳位区间。同一时间段内A相上管PWM输出恒定高电平没有开关动作。而SVPWM的调制波虽然也是马鞍形但不会出现这种长时间平直钳位段。相电压波形上DPWM的相电压会比SVPWM看起来更“鼓”因为钳位段相当于注入了额外的零序电压。线电压波形仍是典型的两电平PWM波形不会出现明显异常。如果线电压波形中出现非对称的窄脉冲先怀疑零序分量计算错了或者钳位相判断错了。4.2 开关次数与开关损耗对比开关损耗可以从两个角度比较一是统计总开关次数二是估算开关时刻的电流权重。最直接的方法是给PWM输出加一个计数器检测上升沿和下降沿。我用MATLAB Function实现过一个计数模块代码如下function cnt switch_counter(pwm, cnt_prev) % 输入当前PWM值和上一周期计数检测边沿并累加 cnt cnt_prev; persistent pwm_prev; if isempty(pwm_prev) pwm_prev 0; end if pwm ~ pwm_prev cnt cnt_prev 1; end pwm_prev pwm; end实测下来SVPWM一个基波周期内六个开关管总开关次数约120次DPWM系列约80次降低幅度约三分之一。这个数字和理论吻合。如果还要比较损耗的“含金量”可以再测一下开关时刻的电流绝对值并累加。DPWM1在功率因数为1时这个加权值比SVPWM低约50%DPWM2的效果就差不少有时只能降20%左右。4.3 电流THD与谐波特性电流THD是评估调制策略的另一个重要指标。在Simulink里跑完仿真后把电流波形导出到工作区用Powergui的FFT工具或者MATLAB脚本计算THD。注意FFT分析的窗口要取整数个基波周期建议取20个周期以上频率分辨率才能到2.5Hz。我得到的结果规律是在M0.9时DPWM1和SVPWM的THD比较接近DPWM0和DPWM3略高一点DPWM2和DPWMMIN、DPWMMAX明显偏高。但把调制比降到M0.5时所有DPWM的THD都显著上升尤其是DPWMM
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门