做逆变器如果只看空载波形,十有八九会在接入负载的那一刻翻车——输出电压掉多少、波形还能不能挺住、电流环会不会振荡,这些问题空载时完全看不出来。我最近把一台三相逆变器从单电压闭环改成了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以下。
我的参数是电感L=3mH,电容C=10μ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大约-50dB,16kHz的开关纹波基本被压到可以忽略的程度。
需要注意的一个小陷阱: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/A,Ki的量纲是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) ≈ 24
Kp_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之后,现象立刻消失。这个教训我印象很深:带宽不是越高越好,要尊重数字控制延迟这个物理上限。
最后分享一个我这次体会最深的小技巧:调双闭环时,先把内环单独调稳(断开外环,给电流环一个阶跃给定,看到电流快速且无超调地跟上),再闭合外环;闭合外环后每次只改一个参数,改完存一版波形再动下一个。这套流程虽然慢,但每一步都有据可查、可回退,比"拍脑袋试参"的效率高太多了。阻性负载过关之后,下一步我打算接不可控整流负载测带非线性负载的能力,到时候再来补一篇实测记录。