三相逆变器双闭环控制与SVPWM调制的阻性负载实测解析
做逆变器如果只看空载波形十有八九会在接入负载的那一刻翻车——输出电压掉多少、波形还能不能挺住、电流环会不会振荡这些问题空载时完全看不出来。我最近把一台三相逆变器从单电压闭环改成了PI双闭环配上SVPWM调制在纯阻性负载下做了从空载到满载的完整测试。整套流程走下来最大的感受是双闭环不是简单的多一个环而是把电源从靠电容硬扛变成了靠电流环主动调度这个思路转变才是关键。这篇帖子就按我实际调试的路线把主电路参数、双闭环整定、SVPWM发波细节和阻性负载实测结果完整展开给同样在做三相逆变器、或者正被输出波形一接负载就恶化困扰的朋友一个可参照的落地方案。1. 为什么双闭环能解决单闭环解决不了的问题1.1 单电压环的本质等误差变大了才反应最早我做的是三相电压单闭环采样输出相电压跟给定做PI输出直接作为调制波。空载时波形非常好THD能压到1%左右。但一接上阻性负载尤其是突加负载的瞬间电压明显跌下去一截要等几十毫秒才慢慢爬回来。原因其实很直白单闭环里负载电流没有自己的反馈通道。负载突然加大第一个感受到的是滤波电容被抽走电荷输出电压下降然后电压误差慢慢变大PI才开始补。整个过程中电感电流的增长是被动的先有电压跌落才有电流补充。这个先跌后补的时序决定了动态响应一定慢。还有一个隐患是电感电流完全不受控。启动瞬间电容充电电流、负载短路电流都可能冲到器件限流值以上只能靠硬件过流保护兜底。做过的人都知道这种保护动不动就误触发而且对IGBT/MOSFET的应力很不友好。1.2 电流内环的加入改变了什么双闭环的结构是外环管电压内环管电感电流。电压环的输出不再是占空比而是电流给定电流环去跟踪这个给定。电流环的带宽远高于电压环所以电感电流可以在一两个开关周期内就响应负载变化。我更喜欢用另一个角度理解加了电流内环之后电感从被动滤波元件变成了受控电流源。负载需要多少电流电压环就给一个电流参考电流环立刻把电感电流送上去。突加负载的瞬态里电容的电压跌落幅度和恢复时间都被大幅压缩因为电流环已经提前把补给送上去了。这就像家里用水。单闭环相当于水龙头反应慢半拍水池液面先下降、浮球阀才慢慢开双闭环则有一个流量计盯着出水流量一变化立刻调节进水水池液面几乎不动。1.3 阻性负载为什么适合做第一站很多人一上来就用整流性负载或电机负载测逆变器结果波形一团糟还找不到原因。我的经验是首次并网验证一定要用纯阻性负载。纯阻性负载有几个明显的优点没有无功功率电压电流同相位dq旋转坐标系里电流基本集中在d轴分析起来非常干净没有二极管换流过程不会在电流过零点引入额外的畸变电流波形完全跟随电压波形如果电压THD高电流THD同步升高控制问题会被直接暴露出来。所以阻性负载是把控制环调好和波形问题排查解耦的第一步等阻性负载过关了再上整流性、电机性负载才有意义。2. 主电路与LC滤波参数先把硬条件定下来2.1 三相全桥拓扑与器件参数设定我做的是一台三相全桥逆变器额定输出相电压100V RMS / 50Hz直流母线300V开关频率16kHz额定阻性负载每相20Ω总功率约1.5kW。这个功率等级下功率器件选了600V/60A的MOSFET模块驱动用带隔离的栅驱动芯片死区时间先设为2μs。母线电容用了两串470μF/450V电解电容考虑到300V母线下电容纹波电流不大这个容值足够。选这个电压和功率等级是刻意的第一安全300V直流在实验室环境里属于可控范围第二参数好算每相20Ω对应额定电流5A各种实验现象都能直观反映在示波器上第三整个系统可以方便地往后扩展把母线电压抬到540V、输出改成380V系统控制策略完全不用动。2.2 LC滤波器的截止频率设计LC滤波器的设计原则一句话概括就是截止频率要远高于基波50Hz保证基波无衰减地通过同时远低于开关频率16kHz把开关纹波压下去。工程上通常取基波的10倍以上、开关频率的1/10以下。我的参数是电感L3mH电容C10μF计算截止频率fc 1 / (2π√(L·C)) 1 / (2π√(3mH × 10μF)) ≈ 919Hz这个频率是50Hz的18倍是16kHz开关频率的约1/17位置很合理。再看纹波衰减LC滤波器在开关频率处的衰减大约是(fc / fsw)²也就是(919 / 16000)² ≈ 0.0033折算成dB大约-50dB16kHz的开关纹波基本被压到可以忽略的程度。需要注意的一个小陷阱LC滤波器的谐振峰在919Hz附近如果负载很轻、阻尼很弱谐振峰处可能出现轻微电压放大。阻性负载本身就提供了一部分阻尼所以实测没有明显振荡但如果后面换低损耗负载建议在电容上串联一个几欧的阻尼电阻或者用有源阻尼算法这一步很省心。2.3 母线电压、调制比与输出电压的匹配SVPWM在线性区内能输出的最大相电压幅值是Udc/√3这是它比SPWM强的地方。我的母线300V对应的线性区最大相电压幅值为300/√3≈173V。额定输出100V RMS对应幅值141V留了约23%的余量给动态调压和电压环调节。这个余量很重要。电压环在负载突变时会把调制波的幅值顶上去一段如果余量不足调制就进入过调制区波形立刻畸变。我建议做类似系统时额定相电压幅值最好控制在Udc/√3的75%~80%以内既保证动态空间又不会浪费母线利用率。3. 双闭环参数整定带宽分层是关键3.1 电流内环建模把电感当作被控对象电流内环的被控对象就是滤波电感忽略负载侧影响时传递函数是G(s) 1/(Ls RL)RL是电感自身铜阻我实测大概0.5Ω。PI控制器的零点设计成抵消这个极点即τi L/RL 3mH / 0.5Ω 6ms这样电流环就变成近似一阶系统带宽仅由比例系数决定。电流环带宽取多少我选的是2.5kHz大约是开关频率16kHz的1/6。这个比例是经验值再高数字控制的延迟采样、计算加一个开关周期的执行延迟会吃掉太多相位裕度系统容易在LC谐振频率附近闹振荡再低内环跟不上外环要求的电流变化双闭环的意义就打折扣了。具体参数计算ωci 2π × 2500 ≈ 15700 rad/s Kp_i L × ωci 0.003 × 15700 ≈ 47 Ki_i Kp_i / τi 47 / 0.006 ≈ 7800注意这里的PI输出是电压指令单位是V输入是电流误差单位是A。所以Kp的量纲是V/AKi的量纲是V/(A·s)写代码时要在DSP或单片机里明确标量纲不然很容易差1000倍。3.2 电压外环设计站在电流环肩膀上电压外环的被控对象是滤波电容但在设计时可以把电流内环近似看成一个带宽足够高的1所以外环对象简化成了G(s) 1/(sC)。C 10μF。电压环带宽必须远低于电流环我取500Hz是内环带宽的1/5。设计思路是让PI的零点放在带宽的1/4左右给足够的相位裕度Kp_v C × ωcv 10μF × 2π × 500 0.0314 Ki_v Kp_v × (2π × 125) ≈ 24Kp_v的量纲是A/V电压误差1V对应电流给定变化约0.03A看起来很小但因为电容只有10μF这个增益配上500Hz带宽是自洽的。电压外环的输出我做了限幅限制在±8A大约是额定电流5A的1.6倍给瞬态留余量的同时防止过流。3.3 带宽分离与抗饱和实际调试中的两个关键动作双闭环能不能稳定工作核心是带宽分离。内外环带宽至少隔5倍以上否则两个环会互相打架表现为某一频段的谐振被两个环同时放大。我见过有人在调参时把外环带宽提得太高结果输出电压出现明显的低频振荡其实就是外环响应太快和内环的相位相互纠缠了。另一个很容易踩的坑是积分饱和。启动时给定从零突跳到额定电压误差很大电压环积分很快冲到限幅值导致电流给定长时间顶在饱和值启动瞬间电流过冲到接近8A听起来吓人。我的解决办法分两步第一启动时给电压给定加斜坡从0在100ms内升到额定值第二PI里做积分限幅和条件积分——积分输出到达限幅时停止累加误差方向反转后再放开。代码写出来只有几行但实际效果是天壤之别。4. SVPWM调制从扇区判断到七段式发波4.1 为什么要用SVPWM母线利用率比SPWM高15%三相桥的8种开关状态里6个非零电压矢量把αβ平面分成6个扇区。SVPWM的思想是用参考电压矢量所在扇区的两个相邻非零矢量加上零矢量去合成每个开关周期内按伏秒平衡分配作用时间。SVPWM对SPWM的最大优势是直流母线利用率高15.47%。SPWM在线性区内相电压最大幅值只有Udc/2而SVPWM可以做到Udc/√3两者比值是2/√3≈1.1547。换句话说同样的300V母线SPWM最多输出约150V幅值的相电压SVPWM能到173V。这多出来的部分是白捡的不需要额外硬件成本。为什么会有这个差距本质是SVPWM在调制波里自动注入了零序分量——相当于SPWM加了三倍次谐波注入的效果把正弦调制的线性区拓宽了。所以现在的三相逆变器基本都直接上SVPWM极少有人再用纯SPWM去浪费母线电压。4.2 扇区判定与T1、T2作用时间计算SVPWM的第一步是判断参考矢量落在哪个扇区。工程上效率最高的方法不是算角度而是直接对αβ分量做符号判断我用的是三段式比较v1 Vβ v2 (√3/2)Vα - 0.5Vβ v3 -(√3/2)Vα - 0.5Vβ N (v1 0) 2(v2 0) 4(v3 0)N在1~6之间查表就能映射到扇区编号。这个方法的优点是没有atan运算任何单片机都能在几个周期内算完。确定扇区后计算两个相邻非零矢量的作用时间。以第一扇区0°~60°为例参考矢量由V1和V2合成T1 √3 × |Vref| × Ts × sin(60° - θ) / Udc T2 √3 × |Vref| × Ts × sin(θ) / Udc T0 Ts - T1 - T2其中θ是参考矢量与α轴的夹角。实际程序里我不会去算sin而是用查表或者直接把Uα、Uβ代入线性公式这样每个周期只要几十次乘加法完全跟得上16kHz的开关频率。4.3 七段式发波的顺序与死区处理时间算完之后还要决定开关序列。我采用的是七段式对称发波每个开关周期内矢量顺序是零矢量-非零矢量-非零矢量-零矢量-非零矢量-非零矢量-零矢量。这样做的好处是开关管动作次数在每周期内固定开关损耗可控波形对称输出谐波主要集中在开关频率及其倍数附近低频段比较干净。发波时用到互补PWM通道上下管之间必须插入死区。我的MOSFET模块死区设在2μs对这个功率等级够用了。死区带来的问题是输出电压在电流过零点附近出现非线性死区时间与开关频率的乘积相当于一个等效电压误差会让相电压波形在过零处出现一个台阶空载或轻载时尤其明显。调试中发现这个问题后我在电流方向比较明确的区域加了简单的死区补偿通过判断相电流极性对占空比做±修正空载波形畸变得到明显改善。5. 阻性负载实测波形、THD与动态响应的复盘5.1 稳态波形与THD从空载到满载的对比全部调通之后我最先记录了空载、半载每相40Ω和满载每相20Ω三组稳态数据。用功率分析仪测的相电压THD和相电流THD如下表工况相电压THD相电流THD空载2.8%无负载电流半载2.2%2.3%满载1.9%2.0%满载THD反而比空载低这个现象一开始有点反直觉。后来想明白了空载时逆变器只带滤波电容和死区非线性电压过零处的小台阶占比重更大接入阻性负载后负载电流本身就是正弦的滤波电容上的谐波电压大部分被负载电流旁路所以THD反而下降。这也验证了阻性负载下THD主要来源是死区和数字控制延迟而不是开关纹波——开关纹波已经被LC滤到-50dB了。5.2 突加突卸负载的动态响应测试记录动态响应是我最关心的指标用电子负载做阶跃太生硬我直接上了接触器把20Ω电阻并到40Ω电阻上实现50%负载突加到100%负载。示波器测相电压波形记录到的数据如下突加负载电压跌落约6%10ms左右恢复到额定值附近没有振荡突卸负载电压上升约5%同样在15ms内回落波形没有明显过冲。对比之前的单电压闭环同样的突加测试电压跌落接近15%恢复时间超过80ms。这组数据直接说明了电流内环的价值——双闭环把动态压降压缩到原来的四成恢复时间缩短到原来的五分之一。测试中还注意了一个细节因为负载纯阻性、且三相平衡dq旋转坐标系里负载电流几乎全在d轴q轴电流基本为零。这意味着q轴电压环在阻性负载下几乎没有被真正锻炼到它的参数好坏要到接感性负载或不对称负载时才暴露。所以阻性负载测试只能证明基本控制正确不能证明所有环路都已调优这一步我心里有数。5.3 调试中遇到的三个真实坑第一个坑是启动冲击。最初电压给定直接给额定值电压环积分饱和电流参考冲到限幅8A母线电压被拉出明显凹坑。后来加了100ms软启动斜坡和积分限幅启动电流峰值控制在6A以内母线电压平稳。第二个坑是电流传感器零点漂移。用的是霍尔电流传感器上电后零漂大概有几个mA级别的等效偏移在5A额定电流下虽然占比不大但会让输出电流波形里的50Hz分量附近出现一个毛刺相电流THD无论如何都压不到2%以下。解决方法是每次上电先做一次零电流标定把采样偏移存下来在控制周期里做减法补偿。第三个坑是电流环带宽调过头。我曾经把内环带宽从2.5kHz往上提到4kHz想着动态能更快结果输出电压出现明显的2kHz附近振荡声响也很刺耳。回头看4kHz带宽下数字控制的延迟和LC谐振的交互已经破坏了稳定裕度。降回2.5kHz之后现象立刻消失。这个教训我印象很深带宽不是越高越好要尊重数字控制延迟这个物理上限。最后分享一个我这次体会最深的小技巧调双闭环时先把内环单独调稳断开外环给电流环一个阶跃给定看到电流快速且无超调地跟上再闭合外环闭合外环后每次只改一个参数改完存一版波形再动下一个。这套流程虽然慢但每一步都有据可查、可回退比拍脑袋试参的效率高太多了。阻性负载过关之后下一步我打算接不可控整流负载测带非线性负载的能力到时候再来补一篇实测记录。