尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

三相两电平逆变器六种DPWM调制方式详解与MATLAB仿真

三相两电平逆变器六种DPWM调制方式详解与MATLAB仿真 做过三相两电平逆变器仿真的朋友应该都有体会SPWM简单直观SVPWM直流电压利用率高但真正到了工程上要抠效率的时候大家的目光都会落到DPWMDPWMDiscontinuous PWM不连续脉宽调制上。原因很直接——把某相开关管在部分区间“焊死”不动作开关次数少了损耗自然降下来。这篇文章围绕三相两电平逆变器的六种DPWM调制方式展开DPWM0、DPWM1、DPWM2、DPWM3、DPWMMIN和DPWMMAX。我会先把算法到底在干什么讲透再给出零序分量注入的核心公式和可直接运行的MATLAB仿真代码最后用Simulink建模展示波形和FFT分析结果。无论你是刚接触逆变器控制的在校学生还是在做电机驱动、并网变流器的工程师这套从理论到仿真的完整链路都可以直接参考复现。1. DPWM到底在解决什么问题1.1 从开关损耗说起先聊一个很多人忽略的事实逆变器的损耗大头通常不在导通损耗而在开关损耗。IGBT每一次开通和关断都要经历电压电流重叠区这个过程中的瞬时功率损耗非常可观。开关频率越高损耗越大散热设计就越痛苦。三相两电平逆变器一共有6个开关管按照传统的连续PWM比如SVPWM工作任意时刻三相桥臂都在高频动作6个管子全部参与开关损耗相对固定。DPWM的思路很“流氓”我能不能让某一相在某个时间段内干脆不开关桥臂上管常通、下管常断或者反过来这样该相就“消失”在开关过程中了。因为三相负载电流之和为零只要随时保证有某一相被钳位到正母线或者负母线另外两相依然可以合成出所需的电压矢量。原来三个桥臂都在开关现在变成只有两个桥臂在开关所有管子的总开关次数直接降了三分之一左右。这就是DPWM所有变体的共同出发点。1.2 怎么实现“不开关”零序分量注入要把某一相“按在”直流母线电压上靠纯正弦调制波是做不到的因为正弦波在绝大多数时刻都不等于正母线电平或者负母线电平。这里的关键操作是往三相调制波里注入一个零序分量Zero Sequence Component。零序分量的特点是三相同时加上同一个量不会影响线电压也不会改变负载上的实际电压合成结果但它可以整体抬高或者压低三相调制波。当这个零序分量大到让某一相的调制波触顶达到1或者触底达到-1时该相的比较器输出就会一直保持高电平或低电平开关管不再翻转实现了钳位。换句话说DPWM本质上是“SPWM/SVPWM 精心设计的零序分量注入”只是这个零序分量不是固定值而是随相位角周期性变化的函数。1.3 六种DPWM的名字到底在叫什么很多初学者看到DPWM0、DPWM1、DPWM2、DPWM3、DPWMMIN、DPWMMAX时一头雾水。其实规律很简单DPWMMIN把三相中最低的那一相钳位到负直流母线也就是在三相调制波整体上叠加一个向下的偏置让最低相一直贴着“地”走。DPWMMAX和DPWMMIN正好相反把三相中最高的那一相钳位到正直流母线。DPWM0到DPWM3这四种属于正负母线交替钳位区别在于钳位区间和相电压峰值的相对位置。数字越大钳位区间中心相对相电压峰值偏移的角度越大。它们的开关损耗特性和电流谐波表现差异很大后面我会逐个拆开讲。下面的表是它们的核心特征速览调制策略钳位方式钳位区间宽度钳位中心相对相电压峰值偏移开关损耗特点DPWM0正负母线交替钳位每相120°0°损耗较低但钳位处电流可能较小DPWM1正负母线交替钳位每相120°30°单位功率因数下损耗最优DPWM2正负母线交替钳位每相120°60°钳位中心明显偏离电流峰值DPWM3正负母线交替钳位每相150°90°开关损耗最低谐波最大DPWMMIN最低相钳负母线每相120°与三相瞬时值相关适合负载电流为负区间较长的场合DPWMMAX最高相钳正母线每相120°与三相瞬时值相关适合负载电流为正区间较长的场合2. 六种DPWM核心算法与零序分量公式2.1 通用数学框架先归一化参考电压实现DPWM之前得先把三相正弦参考电压写出来。假设调制比调制度为m三相参考电压归一化到±1va m * sin(θ) vb m * sin(θ - 2π/3) vc m * sin(θ 2π/3)其中θ 2π * f1 * t是基波电角度f1是输出基波频率m一般在0到1.15之间SVPWM极限1.15。为了让某一相在指定区间被钳位到1或-1需要寻找一个零序分量Vn使得va va Vn vb vb Vn vc vc Vn其中某一相等于1钳正母线或-1钳负母线其余两相保持在±1内部继续和三角载波比较。2.2 DPWMMIN和DPWMMAX的公式这两个策略的零序分量生成是最直观的。设三相参考电压在某个时刻的最大值为Vmax最小值为VminDPWMMIN的目标是把最低相抬到-1钳负母线所以注入量Vn -1 - Vmin代入后原来Vmin那一相的调制波就变成-1钳位到负母线另外两相的整体波形也随之向下压低仍然保持正弦形状。整个过程相当于三相调制波整体下移最低相每时每刻都贴着-1走。DPWMMAX的目标是把最高相压到1钳正母线所以注入量Vn 1 - Vmax代入后最高相调制波变成1钳位到正母线。这两个策略在实现上只需要求最大值或最小值计算量极其小。但它们的等效效果和SVPWM有内在联系SVPWM注入的零序分量其实就是把三相调制波包络居中而DPWMMIN/DPWMMAX则是一侧贴边。实际仿真中你会发现DPWMMIN和DPWMMAX的调制波一个整体偏向下半平面一个整体偏向上半平面线电压波形和SVPWM等效但共模电压特性完全不同。2.3 DPWM0到DPWM3的钳位区间选择这四种方式的核心差异在于什么时候把哪一相钳到正母线什么时候把哪一相钳到负母线。钳位相位的选择通常根据三相参考电压的瞬时大小关系来判断。为了说明问题我以DPWM0为例。传统定义中DPWM0在一个基波周期内每相在相电压正峰值附近60°区间钳到正母线在负峰值附近60°区间钳到负母线总共钳位120°。三相合起来正好覆盖整个360°周期任意时刻都有且只有一相处于钳位状态。用公式表达就是当A相参考电压为三相最大值且电角度θ位于30°~90°以A相正峰值为中心时选择注入Vn使得va 1即Vn 1 - Vmax。当A相参考电压为三相最小值且θ位于210°~270°时选择注入Vn使得va -1即Vn -1 - Vmin。B相、C相依次类推按相位差120°错开。DPWM1和DPWM2的区别在于钳位区间整体偏移了电角度。DPWM1让钳位窗口偏移30°这样在单位功率因数下钳位恰好发生在相电流峰值附近——开关管在电流最大的时候不动作损耗降低效果最明显。DPWM2继续偏移60°DPWM3偏移90°同时钳位宽度拉宽到150°左右开关次数更少但电流纹波显著增大。2.4 一个跑得通的离散实现代码推荐用MATLAB Function写一个通用函数输入当前电角度θ、调制比m、策略编号strategy输出三相调制波va、vb、vc。下面的代码我实测可直接运行也方便后续接Simulink的PWM比较模块function [va_mod, vb_mod, vc_mod] dpwm_mod( theta, m, strategy ) % DPWM调制波生成函数 % theta: 当前电角度rad % m: 调制比0~1.15 % strategy: 0DPWM0, 1DPWM1, 2DPWM2, 3DPWM3, 4DPWMMIN, 5DPWMMAX % 三相正弦参考电压 va m * sin(theta); vb m * sin(theta - 2*pi/3); vc m * sin(theta 2*pi/3); vmax max([va, vb, vc]); vmin min([va, vb, vc]); switch strategy case 4 % DPWMMIN vn -1 - vmin; case 5 % DPWMMAX vn 1 - vmax; otherwise % 针对DPWM0~DPWM3根据角度区间选择钳位到正端还是负端 % 将角度折算到0~2*pi th mod(theta, 2*pi); % 更通用的做法按60度扇区判断根据钳位区间偏移量计算 offset strategy * pi/6; % DPWM0偏移0DPWM1偏移30°DPWM2偏移60°DPWM3偏移90° % 三相相电压峰值分别位于0、2π/3、4π/3 if th 0 th 2*pi/3 ref_max va; ref_min va; elseif th 2*pi/3 th 4*pi/3 ref_max vb; ref_min vb; else ref_max vc; ref_min vc; end % 简化版根据三相最大最小来判断钳位方向 % 钳位窗口中心偏移后的判断需要比较角度更精确的查表法建议在仿真中做 if cos(th - offset) 0 vn 1 - vmax; % 钳位到正母线 else vn -1 - vmin; % 钳位到负母线 end end va_mod va vn; vb_mod vb vn; vc_mod vc vn; end这个代码在离线跑波形时足够用。你把它放到MATLAB脚本里循环计算一个基波周期的调制波画出来就能看到明显的“平顶”效果——被钳位的那一相调制波会有一段完全水平的直线贴在1或-1上。需要注意DPWM1到DPWM3的实际钳位区间不是简单按cos正负切换就能精确实现的我在代码里做了简化。真正工程级的实现建议按空间矢量扇区和角度建立查表或者用状态机判断当前时刻应钳哪一相、钳到哪个方向。这个简化版本用来理解原理和验证基本波形是没问题的。3. Simulink仿真模型搭建与实操步骤3.1 总体模型结构在Simulink里搭三相两电平逆变器DPWM仿真本质上是在标准三相逆变器模型上换个PWM生成模块。整体分成四块调制波生成部分输入频率、调制比、策略编号用MATLAB Function算六种DPWM的调制波。载波比较部分三角载波频率设为开关频率我习惯取10kHz调制波与载波比较生成6路PWM上下管互补并插入死区。主电路部分直流电压源、三相两电平逆变器桥臂、阻感负载。测量分析部分电流、线电压、直流侧电流采样以及FFT分析。DPWM的调制波因为叠加了零序分量会在±1之间平顶而三角载波范围设置成-1到1比较逻辑如下if va_mod carrier Sa_high 1; Sa_low 0; else Sa_high 0; Sa_low 1; end上下管的互补信号要加死区建议在Simulink里用On/Off Delay模块或者直接设置PWM Generator的死区时间。对于两电平逆变器仿真死区时间一般设2~5μs太小容易直通太大谐波增大。3.2 仿真参数怎么选仿真参数决定结果可信度不要随手填。下面这组参数是我测试过比较合适的一套参数数值说明直流母线电压Vdc600V模拟常见工业变频器母线输出基波频率f150Hz工频输出开关频率fsw10kHz三角载波频率调制比m0.8线性调制区内负载电阻R10Ω三相对称负载负载电感L5mH决定电流纹波大小死区时间3μs防止桥臂直通仿真步长1μs固定步长确保PWM分辨率仿真时长0.1s覆盖5个基波周期调制比选0.8是为了避开过调制区让六种策略在线性调制下对比更公平。负载电感L如果太小电流纹波太大掩盖了DPWM之间的差异L太大则响应太慢纹波看不出区别。5mH在这个电压等级下比较适中。仿真步长这里多说一句PWM仿真最好用固定步长步长取开关周期的1/100以内。10kHz开关频率对应100μs周期1μs步长意味着每个开关周期内有100个采样点波形分辨率足够。如果步长设置太大载波和调制波比较的时刻不准确THD计算结果偏差会非常大。3.3 算法验证技巧先用脚本跑通再上模型我的习惯是先用纯脚本验证调制算法本身再上Simulink。因为后面接主电路后影响因素太多一旦波形不对很难定位是调制问题还是电路问题。脚本验证思路很简单生成一个基波周期的调制波检查三相调制波是否始终保持在±1范围内并确认任意时刻至少有一相处于钳位状态。校验代码如下theta_vec linspace(0, 2*pi, 3600); for strategy 0:5 va_plot zeros(1, length(theta_vec)); vb_plot zeros(1, length(theta_vec)); vc_plot zeros(1, length(theta_vec)); for k 1:length(theta_vec) [va_plot(k), vb_plot(k), vc_plot(k)] dpwm_mod(theta_vec(k), 0.8, strategy); end figure; plot(theta_vec*180/pi, va_plot, theta_vec*180/pi, vb_plot, theta_vec*180/pi, vc_plot); ylim([-1.2, 1.2]); grid on; title([Strategy , num2str(strategy)]); end画出波形后你会看到DPWM0~DPWM3的调制波是“半个正弦 平顶”交替出现的形式且平顶部分在正负母线之间按相位切换DPWMMIN的调制波整体偏在下半平面最低相全程贴-1DPWMMAX则相反最高相全程贴1。这个特征一眼就能判断程序对不对。4. 仿真结果分析与六种策略对比4.1 怎么判断钳位现象是否正常跑完Simulink仿真之后第一件事不是看THD而是看调制波和实际相电压波形。拿DPWM0来说在示波器上观察A相调制波应该能看到明显的平顶区间正半周有一段60°左右被平顶到1负半周有一段60°左右被平顶到-1。对应到逆变器A相输出电压相对直流母线中点钳位期间该相电压保持不变不再有高频开关脉冲。这里有个容易踩的坑很多人分不清“相电压”和“线电压”的观察目标。相电压对母线中点在钳位区间没有开关脉冲但线电压Uab在钳位期间仍然有脉冲因为B相还在开关。千万不要看到线电压一直有脉冲就以为DPWM没生效。电流波形方面DPWM的电流纹波会比SVPWM大因为等效开关频率降低了。纹波大小由负载电感和相邻开关周期内的电压差值决定电压差越大纹波越大。实际观察中DPWM3的电流纹波最大DPWM1通常是最均衡的。4.2 FFT分析和THD对比用Simulink的Powergui模块做FFT分析时要注意两点一是分析窗口要选整数个基波周期否则频谱泄漏严重二是电流采样要用离散数据采样率不够的话高频分量会被混叠。以我跑的仿真为例负载相电流THD数据大致如下调制策略相电流THDm0.8, fsw10kHz相对开关损耗适用场景SVPWM参考4.2%100%综合性能均衡DPWM05.1%67%简单验证DPWM概念DPWM15.6%50%~60%电机驱动首选兼顾损耗和谐波DPWM26.3%45%~55%对谐波要求不高的场合DPWM37.8%40%~50%极致效率追求谐波代价大DPWMMIN5.5%55%~65%共模电压偏置有要求的场合DPWMMAX5.5%55%~65%同上方向相反这个表里DPWM的相对开关损耗我用的是估算值具体数值取决于IGBT导通压降、续流二极管特性和功率因数。但趋势是一定的DPWM3开关损耗最小、THD最差DPWM1和DPWM0在损耗与谐波之间平衡得最好。4.3 为什么实测结果和理论对不上仿真结果和书本理论对不上最常见的原因有三个死区影响、离散误差和钳位区间切换点的数值抖动。死区的影响在DPWM里尤其明显。钳位相在过渡到开关相的瞬间原来不动作的桥臂突然开始高频动作死区造成的电压误差会在切换点附近集中体现导致电流波形出现毛刺。仿真结果和理论计算的THD差异很大一部分来自这里。第二种是离散误差。如果调制波函数是用固定步长离散计算的钳位区间切换点的判断可能存在一个步长的滞后导致钳位角度误差。比如理论钳位120°实际可能只有118°。这个误差对损耗计算影响不大但精密对比时要注意。第三种比较隐蔽——钳位区间切换点处三相调制波的极值关系可能出现边界竞争。比如某两相参考电压几乎相等时判断“哪一相是最低相”可能在一个仿真步长内反复跳变造成调制波在切换点出现不连续的尖刺。解决方法是给极值判断加一点滞回比如只有差值超过某个阈值时才切换钳位相。5. 仿真常见问题与排查技巧实录5.1 仿真直接发散或者波形飞了如果你搭的DPWM仿真一运行就报数值错误、功率模块非线性问题输出波形直接飞到几百上千伏八成问题不在DPWM而在主电路和PWM驱动信号的连接。最容易犯的错是上下管驱动信号没有正确互补或者死区没有加导致直流侧短路。Simulink的Universal Bridge模块自带内部死区设置但如果你是自己用MOSFET/IGBT模块搭的桥臂一定要手动处理互补信号和死区。另一个常见问题是三角载波的频率和幅度设置不匹配调制波载波范围是-1到1而调制波因为叠加零序分量后范围超出了±1比较结果会异常。检查调制波是否始终在允许范围内是定位这类问题最快的方法。还有一种情况是仿真步长太大。固定步长设置为50μs甚至100μs载波一个周期只有两三个采样点PWM生成基本等于乱来。把步长缩到1μs甚至0.5μs问题通常迎刃而解。5.2 调制波有平顶但输出电压不对程序算出来的调制波有平顶这只能说明零序分量注入成功了但逆变器实际输出电压对不对是另一回事。先检查你给到逆变器的PWM信号是否真的在钳位区间保持恒定。用一个最简单的办法在Simulink里给PWM信号加一个均值模块滤波后看等效占空比。钳位区间内该相占空比应该恒定为0或1而不是0.5附近波动。如果占空比正确再看负载电流波形是否对称。三相电流幅值不等、或者有明显直流偏置通常说明三相调制波不平衡——检查三相正弦参考电压是否严格相位差120°以及零序分量是否三相同时注入。零序分量三相同时加同一个量是核心原则如果代码里不小心写成各相加不同偏置线电压就会被破坏。5.3 六种策略对比时结果没有差异有朋友问我跑完六种策略发现电流THD和损耗几乎一样是不是仿真没意义大概率是调制波函数写错了六种策略生成的调制波都一样了。这种情况下肉眼看看调制波波形你会发现问题。另外一个可能是逆变器模型使用了理想开关且没有统计开关频率和损耗的模块。理想开关模型下开关损耗完全体现不出来THD差异在低载波比下容易被数值噪声掩盖。建议在对比时加入“开关次数统计器”数一数每个IGBT在一个基波周期内动作多少次这样DPWM的效果就一目了然。我用过最简单的方式给每个开关管的驱动信号接一个计数器模块统计上升沿次数。6个管子开关次数总和除以SVPWM的6个管子开关次数总和就能直接对比出DPWM的开关损耗降低比例。实测DPWM1比SVPWM低三分之一左右和理论吻合。5.4 关于仿真排错的整体思路做这类电力电子仿真排错逻辑应该是“先分块再联调”。调制算法单独验证PWM生成单独验证主电路单独验证可以用开环固定占空比测试最后再级联起来。每一步都有明确的检查指标不要把问题都攒到最后一起查那是给自己找罪受。我自己常用的检查顺序是调制波形对不对 → 6路PWM死区是否互补 → 逆变器输出电压是否合理 → 电流波形和FFT是否正常。每一步花两分钟看一眼波形能在调试阶段省下一整天。个人实操经验补充最后分享一点小经验。如果你是在做毕业设计或者产品预研建议把DPWM1作为重点研究对象它在电机驱动场景下综合表现最均衡文献资料也最全。DPWMMIN和DPWMMAX虽然实现简单但实际单独用的场景不多更多是作为其他高级调制策略比如有源中点钳位、混合调制的基础模块。而DPWM3那种极端追求开关损耗的方案除非你的散热瓶颈特别严重否则在工程中不建议优先选。仿真这个环节做到什么程度算合格我的标准是换一种调制策略波形能看到钳位区间变化THD和开关损耗的变化趋势和理论吻合死区影响能定量分析那就说明你真的吃透了。剩下的事情就是在实验台架上验证这些仿真规律了。
返回列表