最近在调永磁同步电机(PMSM)驱动控制,仿真平台用的Simulink,我把SVPWM和DPWM两种调制策略各跑了一遍,对比电流谐波、转矩脉动和逆变器桥臂损耗的时候,发现DPWM这类不连续调制算法在降低开关损耗上确实有明显的账可算,但它不是免费的午餐,代价集中在电流波形畸变和控制器参数适配上。这篇就把我从原理到模型搭建、从波形对比到踩坑经验完整梳理一遍,给正在做PMSM控制仿真、新能源电驱动预研或者伺服系统选型的读者一个可以直接参考的DPWM算法控制仿真路线。
1. 为什么PMSM驱动要盯着DPWM不放:先算一笔损耗账
永磁同步电机的控制链路里,调制策略经常被当成"反正都是PWM,差别不大"的环节一带而过。我一开始做仿真也是这样,SVPWM一把梭,先把转速环电流环调通再说。但后来评估逆变器发热和系统效率时发现,真正决定功率器件温升的事情,恰恰就藏在调制环节里。
1.1 逆变器损耗到底花在了哪里
逆变器一相桥臂的损耗大体分两块:导通损耗和开关损耗。导通损耗取决于电流有效值和器件压降,只要输出电流定了,这部分基本动不了太多。开关损耗则跟开关频率、母线电压、开关瞬间的电流值强相关,每次IGBT或MOSFET打开、关断时,电压和电流的交叠过程都会产生能量损耗,交叠时间越长、电流越大,损耗越狠。
SVPWM的麻烦在于,它属于连续调制,一个基波周期内任何时刻三相桥臂都在高频开关,每相每周期都要开开关关,这样电流过峰值的那段时间,器件恰好也在高频动作,开关损耗被顶到很高。高频工况下,开关损耗甚至可以占到逆变器总损耗的50%以上,风冷散热器和控制器体积都被它卡脖子。
1.2 连续调制与不连续调制的分水岭
DPWM的全称是不连续脉宽调制,核心思路直白得很:既然开关损耗取决于开关次数和开关时刻的电流大小,那我就把某个桥臂在特定时间段里"锁住",让它不开关,直接钳位在直流母线正端或负端。这样每相在一个基波周期里会有连续一段角度完全不动作,总开关次数降下来,损耗自然跟着降。
算个简单账:SVPWM三相每周期都在开关,DPWM把每相的开关角度砍掉三分之一,等效开关次数直接变原来的三分之二。如果把钳位区间特意安排在电流峰值附近,那开关损耗的下降幅度会进一步放大,这是SVPWM这种"勤勤恳恳全程高频"的连续调制做不到的。
这个思路对PMSM驱动特别有吸引力,因为电机运行工况往往固定在一段转速扭矩范围内,不像通用变频器那样要覆盖极宽的工作区,完全可以把DPWM的钳位角度针对主工况做定制优化,让效率往峰值上靠。
2. DPWM的核心思想:把桥臂"锁住",不是随便锁
网上很多资料把DPWM描述成"给SVPWM加一个零序分量",这句话没错,但真正动手搭Simulink模型时你会发现,关键是怎么确定加多少、什么时候加、加到哪一相上。这一节我把原理拆开说透。
2.1 钳位区间怎么选
三相调制波在某一时刻一定有一个最大相、一个最小相和一个中间相。SVPWM的做法是叠加一个零序分量,让最大最小相对称地挤在母线电压范围内。DPWM则走极端:把最大相直接拉到正母线,或者把最小相直接拉到负母线,拉完之后这一相在一个开关周期内就不需要输出PWM脉冲了。
钳到正母线还是负母线,以及每相钳多长时间,就派生出了DPWM0、DPWM1、DPWM2这些不同方案。命名不同本质上是钳位角度相对调制波相位偏移不同:
| 方案 | 钳位特征 | 典型适用场景 |
|---|---|---|
| DPWM0 | 每相钳位120度,正负母线各60度,钳位区间相对相电压零点对称 | 功率因数接近1的工况,平衡开关损耗和电流波形 |
| DPWM1 | 正母线钳位120度,负母线钳位0度,钳位区间跟相电压符号绑定 | 对损耗优化更激进,但低次谐波成分偏大 |
| DPWM2 | 与DPWM1相反,负母线钳位更多 | 适合电流方向偏向负半周的负载 |
| SVPWM | 不钳位,连续调制 | 作为基准方案,波形质量好但损耗偏高 |
我仿真里主要对比的是DPWM1和SVPWM,因为PMSM驱动里功率因数通常接近1,DPWM1的钳位区间恰好能把电流峰值包进去,损耗优化效果最直观。
2.2 钳位对准电流峰值这个细节
这里有个仿真里很容易被忽略的点:钳位角度相对的是电压调制波的相位,但开关损耗大小取决于开关时刻的相电流。电机负载是阻感性的,相电流滞后相电压一个功率因数角,如果钳位区间死板地对准电压峰值,而电流峰值已经偏移了几十度电角度,那损耗优化效果就会打折扣。
所以我自己搭模型时,特意在DPWM模块里留了一个相位偏移参数,用来补偿电压电流相位差。你把电机额定工况的功率因数角量出来,把钳位区间的中心点对准电流峰值,开关损耗还能再压一截。这一点很多论文只给结论不给操作细节,仿真时你不动手调是体会不到的。
还有一个容易被坑的地方:钳位期间这一相虽然不开关了,但电流不是零,它要继续流过钳位二极管或上管的体二极管。所以钳位并不是"这一相下班了",而是把开关损耗转成了二极管导通损耗,总损耗账要一起算,不能只看开关次数下降。
3. Simulink模型搭建全流程:从电机方程到DPWM调制脉冲
下面进入正题,说说我用Simulink搭的这套PMSM控制仿真模型。整体结构从内到外分四层:电机本体、逆变器、调制器、控制环。模型不算复杂,但每一步都决定后面波形分析靠不靠谱。
3.1 电机本体建模:我选了方程建模而不是盲目堆模块
Simulink里有现成的PMSM模块,Simscape里也有机电元件库,但我在做调制策略对比时特意自己搭了一个基于dq坐标方程的电机模型。原因很简单:我要在仿真里随时看反电动势、磁链、交直轴电流这些中间量,还要把电机参数和Torque方程直接暴露给控制环,封装好的模块反而要到处找接口去适配。
电机本体用标准方程写:
% 电流状态方程 vd = Rs*id + Ld*Did - we*Lq*iq; vq = Rs*iq + Lq*Diq + we*Ld*id + we*lambda_pm; % 机械方程 Te = 1.5*p*(lambda_pm*iq + (Ld-Lq)*id*iq); J*Dw = Te - TL - B*w;这里要提醒一句:如果你把电机参数设成凸极机(Ld不等于Lq),别忘了转矩方程里那项(Ld-Lq)*id*iq,很多模型简化成Te = 1.5*p*lambda_pm*iq,在磁阻转矩不可忽略的IPM电机里会让转矩波形和实际差一大截。我仿真里用的某款内置式永磁电机参数,Lq差不多是Ld的三倍,一开始省略磁阻项,导致同一条iq指令下仿真扭矩比计算值低了10%以上。
3.2 逆变器和调制器:脉冲生成的关键部件
逆变器直接用理想开关搭三相半桥就行,调制策略对比不关心器件开关暂态,重点是脉冲宽度和占空比是否正确。调制器部分我单独做了一个子系统,输入是三相电压指令和直流母线电压,输出是六路PWM脉冲。
DPWM参考波生成的核心代码逻辑如下:
% 假设va/vb/vc是经过dq反变换得到的三相电压指令,范围在+-Vdc/2 % SVPWM方式:加零序分量v0 = -0.5*(vmax+vmin) % DPWM方式:根据钳位规则把一相拉到母线轨 vmax = max([va vb vc]); vmin = min([va vb vc]); % 钳位到正母线:让最大相等于+Vdc/2 if clamp_mode == DPWM_positive v0 = Vdc/2 - vmax; % 钳位到负母线:让最小相等于-Vdc/2 elseif clamp_mode == DPWM_negative v0 = -Vdc/2 - vmin; end va_ref = va + v0; vb_ref = vb + v0; vc_ref = vc + v0; % 与三角载波比较生成PWM,载波幅值Vdc/2实际工程化的DPWM还要按扇区判断当前该钳哪一相、钳到哪条母线。我当时是把0到360度按60度一个扇区划分,提前列了一张钳位状态表,仿真里通过查表确定v0的计算方式,这样比每个周期都做复杂逻辑判断更直观,也更容易调试。
3.3 控制环:磁场定向控制加双闭环
控制部分用的是经典FOC,外环转速环PI输出iq指令,id指令通常给0,电流内环PI输出dq轴电压,再做反Park变换得到两相静止坐标电压,最后送给调制器。为了确保两个调制方案可以公平对比,我把整个控制环参数保持完全一致,只切换SVPWM和DPWM的调制器,这样波形差异才能归因到调制策略本身。
调试双闭环时有个小经验:如果把电流环带宽设置过高,DPWM引入的低次谐波会被PI控制器过度响应,导致dq轴电流上叠加明显的振荡分量,转矩波形反而比SVPWM更乱。所以做DPWM对比实验时,电流环带宽最好比全连续调制时稍微调低一点,我在仿真里把电流环带宽从800Hz降到600Hz,DPWM下的转矩脉动明显改善,这就是调制策略变化后控制器要联动调整的典型案例。
4. 对比实测:同一台电机,SVPWM和DPWM差在哪
模型跑起来以后,我把两种调制策略在同样转速、同样负载条件下做了12组对比仿真,下面挑最有代表性的三组说。
4.1 电流波形和谐波分析
先看稳态电流波形。SVPWM的相电流正弦度很好,谐波主要集中在开关频率附近的高次边带,对电机控制影响有限。DPWM在电流过零区域附近出现了明显的畸变,原因是钳位区间切换瞬间,参考波从钳位状态切换到调制状态,占空比会产生一个跳变,这个跳变激励出5次、7次等低次谐波。
我用FFT工具对相电流做了谐波分析,拿两种方案的数字直接对比:
| 指标 | SVPWM | DPWM1 | 变化量 |
|---|---|---|---|
| 电流THD(满载30Hz) | 4.2% | 6.8% | +2.6个百分点 |
| 5次谐波含量 | 1.1% | 2.9% | +163% |
| 7次谐波含量 | 0.8% | 2.1% | +162% |
| 开关频率边带谐波 | 明显 | 减弱 | 开关次数减少自然减弱 |
这几组数据显示一个规律:DPWM把高频谐波压下去的同时,把一部分能量转移到了低频段,电流THD整体往上走。这个结果在预期内,关键是它带来的损耗优化值不值这个谐波代价。
4.2 开关损耗估算
开关损耗在Simulink里没法直接"量出来",我用的是统计法:在每个开关周期记录开关时刻的相电流值,损耗近似为Vdc * |I_sw| * t_sw * f_sw。统计一个基波周期后取平均,折算成平均损耗功率。
同工况下结果清晰:
- SVPWM:每基波周期三相总开关次数折算损耗基准,记为100%
- DPWM1:桥臂总开关次数降为66.7%,但钳位期间二极管导通损耗增加,实测开关损耗降到约55%到60%,导通损耗略微上升,综合损耗大约是SVPWM的70%到75%
这个结果让我确认了DPWM的价值:如果你做的是一个频繁工作在高频区的控制器,DPWM的损耗优势会直接转化为散热器体积缩小或者同等温升下允许更大的输出电流。这也是为什么很多高功率密度逆变器方案里,DPWM类算法是标配。
还要提醒一句,损耗仿真结果对钳位角度和负载功率因数非常敏感。我把功率因数角调大15度后,DPWM的损耗优势从40%衰减到25%左右。所以网上有人测出"DPWM省一半损耗",有人测出"只省20%",大概率是工况不一样,不是谁对谁错。
5. 调制度、母线电压和钳位切换:工程落地的三个边界
仿真跑到后面,我开始把工况往工程实际靠,这时候发现DPWM的适用边界必须画清楚。不是所有场合都能无脑切DPWM,有三个参数直接决定它是"蜜糖"还是"砒霜"。
5.1 低调制度下波形迅速恶化
调制度也就是参考电压幅值与母线电压的比值,低的时候(比如电机低速轻载),参考波幅值很小,DPWM的钳位逻辑会把某一相长时间压在母线轨上,但这一相上进行钳位意味着调制信号的频率内容错误,导致有效矢量作用时间非常短,电流纹波和低次谐波占比急剧上升。
我做了几组不同的调制度仿真:
| 调制度 | SVPWM电流THD | DPWM1电流THD | DPWM的损耗优势 |
|---|---|---|---|
| 0.25 | 7.8% | 14.5% | 约15% |
| 0.50 | 5.5% | 9.2% | 约22% |
| 0.75 | 4.2% | 6.8% | 约30% |
| 0.95 | 3.5% | 5.9% | 约33% |
结论很直白:调制度越低,DPWM的谐波代价越大,损耗收益越薄。低工况下切DPWM基本是负优化。我在模型里做了调制度判断逻辑,低于0.55自动切回SVPWM,高于0.7再切入DPWM,中间留了一段滞回区间防止频繁切换。
5.2 钳位切换瞬间的电流振铃
DPWM的钳位区间切换发生在两相之间"换班"的时刻,这个瞬间调制参考波会有一个不连续的跳变,对应到相电流上会出现一个短暂的冲击电流。如果这个跳变发生在电流峰值附近,冲击会被电流环PI调节掉,但如果发生在电流过零区,畸变就比较明显。
解决办法有三个方向:
- 调整钳位角度,让切换点远离电流过零区
- 对电流环输出做低通或陷波处理,抑制5次7次谐波在dq轴上的耦合
- 在钳位切换瞬间做一个软过渡,给参考波加一小段斜坡而不是直接跳变
我在仿真里试了第三种,在切换点前后各留5度电角度的过渡带,用斜坡过渡取代阶跃跳变,电流THD从6.8%降到5.7%,代价是开关次数稍微多了一点,但整体划算。
5.3 母线电压波动下的钳位失效
母线电压快速跌落时,DPWM把某相拉到母线轨的硬钳位可能会导致实际无法输出足够的电压矢量,逆变器出现"出力不足"的现象,电流环为了追指令会把dq电压加到饱和,控制性能迅速退化。
所以在模型里我加了母线电压前馈,调制器实时读取直流母线电压值,当母线跌落超过5%时,DPWM自动切换成SVPWM,等母线恢复稳定后再切回来。这个功能看似简单,但在实际项目里非常管用,母线电压突降在动态工况下太常见了。
6. 自己搭仿真时踩过的几个坑
最后这部分聊点实操教训。我花了两天时间折腾出来的问题,希望你看到之后能直接绕开。
6.1 求解器和步长选择不当,DPWM波形全是假毛刺
第一次跑DPWM模型,我用了变步长求解器,结果相电流波形上全是高频毛刺,看起来像是振荡不稳定,其实根本原因是DPWM的钳位区间切换带来参考波跳变,变步长求解器会在跳变点附近疯狂缩小步长,导致仿真时间和波形质量都不理想。
后来我把PWM载波周期设为10kHz,强制把仿真步长固定为载波周期的两百分之一,也就是0.5微秒,毛刺立刻消失,波形干净多了。仿真时间确实长了点,但为了波形可分析,这个代价值得付。
6.2 钳位参考表方向搞反
DPWM的钳位状态表按扇区设计时,正母线钳位和负母线钳位的判断条件很容易写反,我第一版表把上管钳位写成了下管钳位,结果相电压直接偏置半个母线,电机状态直接崩了。排查了半天才想起来,这种逻辑错误光看波形很难发现,最好是先在开环状态下输入一个固定占空比,验证调制器输出脉冲是否正确,再闭环跑。
6.3 损耗统计别忽略软开关区
仿真统计开关损耗时,只统计了硬开关的电流电压交叠损耗,忽略了钳位切换过程中的部分软开关区域,导致损耗数值偏低。后来我按功率因数角和钳位区间做了校准,损耗统计才和理论值对得上。
最后一个建议:如果你打算把DPWM用在实际控制器里,先确认MCU中断能力和PWM模块的死区补偿逻辑。DPWM的钳位区间会让某相桥臂长时间不动作,死区时间对系统的影响模式跟连续调制完全不同,死区补偿策略要重新标定。这一点仿真模型里容易体现不充分,但实际硬件调试时往往会从这里开始出幺蛾子。
仿真的价值是提前把趋势和边界摸清楚,DPWM在PMSM驱动里的适用性我已经验证清楚了:高频工况、中高调制度、功率因数接近1,这三个条件都满足时,它是降损耗的利器;条件不满足时,SVPWM依然是最稳的选择。