做并网逆变器控制的同行都清楚,所谓“单位功率因数”不是一句口号,它落到波形上就是入网电流和电网电压严格同频、同相,有功输出达到最大,而无功分量几乎为零。很多刚接触逆变器控制的朋友第一反应是:用PI把电流环做出来不就好了?仿真里看着也挺正常,可一旦把参考信号从直流改成50Hz正弦,PI的固有短板就暴露了——稳态误差根本压不到零。这也是我写这篇文章的初衷:聊清楚为什么基于PR控制器的并网逆变器更合适,以及实现单位功率因数到底靠哪几个环节。
文中会涉及控制原理、参数整定、离散化和调试中的常见坑,适合正在做光伏并网、储能PCS或微电网样机的工程师,也适合刚把目光从拓扑转到控制策略的学生。这篇文章从原理到落地,把“电流电压同相位”这件事拆开讲透。
1. 从PI切到PR:正弦电流跟踪的原理性拐点
1.1 PI控制器为什么压不掉正弦误差
你去看电流内环,很多教材都从PI讲起,这是有道理的:PI在处理直流参考时几乎是万能药,积分项把开环传递函数在零频处的增益顶到很大,静差自然趋近于零。但并网逆变的参考不是直流,而是带工频的正弦,麻烦就从这里开始了。
要解释清楚,用内模原理最合适。内模原理说的是:闭环系统要想对某类信号实现无差跟踪,控制器里必须复制出该类信号的动力学模型。直流信号的特征是s=0处的1/s极点,PI里恰好有这个内模;而正弦信号的特征是s=±jω0处的谐振极点,PI里完全没有这个东西,所以无论Kp、Ki怎么调,理论上都无法把正弦跟踪误差消到零。仿真里可能看着只是幅值、相位有一点偏差,但这点偏差会直接恶化入网电流的谐波和无功分量。
进一步看频域表达:设开环传递函数为Gol(s)=Gc(s)·Gp(s),若Gc是PI,Gol在ω0处只是某一有限值;系统对正弦参考的稳态误差幅值近似1/(1+Gol(jω0)),相位上也会残留一个与Gol幅相有关的弧度。Kp调大一点能减小误差,但又会把高频噪声放大,顾此失彼。这也是为什么很多人把PI的参数调到极限,电流波形依然“差点意思”。需要的不是调参,而是换一个结构上更匹配的控制器。
1.2 准PR控制器:把直流内模换成交流内模
PR控制器的思路很直接:把PI的积分项换成谐振项。理想PR传递函数是
Gc(s)=Kp+Kr·s/(s²+ω0²)
s=jω0处,谐振项可以提供的开环增益理论上趋近无穷,于是正弦参考的稳态误差被压到接近零。这个逻辑和PI对待直流完全是一样的。这也是很多资料里说“PR相当于正弦域的PI”这句话的来源。
不过理想PR真正用起来并不舒坦,原因有两点:其一,物理电网频率并非恒定50.000Hz,偏一点,谐振项增益就会掉下来;其二,离散化之后,位于单位圆上的谐振极点很容易因为系数量化、采样误差而跑到圆外,产生自激或长时间振荡。工程上因此普遍用准PR:
Gc(s)=Kp+Kr·ωc·s/(s²+2ωc·s+ω0²)
这里的ωc给谐振项增加了一个小带宽,让控制器的选择性从“一根针”变成“一小段频带”。ωc太小,频率漂移导致性能迅速下滑;太大,又会把50Hz附近其他谐波也放大。实际项目里比较常见的范围是2π×5~2π×20 rad/s,如果电网频率波动大,可以往2π×20靠。
1.3 PI和PR的适用边界
容易有一个误解,以为PR必须全盘取代PI。其实在许多拓扑中,直流电压外环仍用PI,只有电流内环用PR,两者并不冲突。选择边界其实很清晰:如果你控制变量是直流量,比如电池BUCK那一级的电流、母线电压,PI就非常顺手;如果你控制变量是工频交流量,又希望在静止坐标系里直接做,PR就是更合理的选项。反过来,PR在非基频处的增益有限,如果想抑制5、7次等特定谐波,还可以在控制器里并联多个谐振支路,扩展性也比PI好。
| 对比项 | PI | PR/准PR |
|---|---|---|
| 内置信号模型 | 直流极点 | 交流谐振极点 |
| 对工频正弦参考 | 存在稳态幅值/相位偏差 | 可接近零稳态偏差 |
| 常用坐标系 | dq旋转或αβ直用 | αβ下非常自然 |
| 对参数依赖 | 对dq角度同步依赖 | 对谐振频率设定敏感 |
| 扩展谐波抑制 | 需多个旋转坐标变换 | 并联谐振支路即可 |
这个对照表基本概括了两类控制器的差异。可以说,PR并不是一种比PI更“高级”的控制器,而是在正弦跟踪这个特定任务上,结构恰好对上了内模原理的要求。理解这一点,后面所有参数整定和调试动作就有了依据。
2. 单位功率因数的三个支柱:基准电流、锁相环与调制度
2.1 单位功率因数到底由谁决定
单位功率因数在功率理论里意味着cosφ=1,也就是电压与电流相位差为零、无功电流为零。很多初学者容易把PR控制器和单位功率因数直接挂钩,好像用了PR就自动同相了。事实不是这样。电流内环只是一台追踪器,它忠实跟随的是“电流基准”;基准长什么样,最终电流就长什么样。换句话说,决定能不能实现单位功率因数,第一位是基准电流的相位和波形,第二位才是PR环路的跟踪能力。
正常控制流程是:外环(一般取直流母线电压环或有功功率环)给出电流幅值指令,PLL给出电网电压相位,两者合成为电流基准,PR内环再去抑制误差,把实际电流拉到基准上。只要基准相位和电网电压一致,实际电流又与基准一致,网侧电流和电压自然同相。所以这篇文章的核心,与其说是“用PR实现单位功率因数”,不如说是“让基准、PLL、电流环三者对齐”。
2.2 电流基准的生成:让指令与电压天然同相
在αβ静止坐标系里,这个基准生成的逻辑最直观。假设PLL已经锁定了电网电压的基波正序相位θ,那么电网电压可以近似写作
eα=Em·cosθ, eβ=Em·sinθ
如果外环给出的电流幅值是Im,只要让
iα_ref=Im·cosθ, iβ_ref=Im·sinθ
就天然构造出了一个与电压同相、同时维持恒定幅值的正弦基准。PR电流环在这两个轴上各有一个,各自对该轴的误差做调节。这也是PR和静止坐标系配合得很舒服的原因:不需要额外做Park变换,每个轴都是一个单输入单输出的调节回路。
从dq域看,上述等式其实和“id_ref=Im、iq_ref=0”完全等价。dq域把正弦基准变成类似直流,PI可以工作;而αβ域把基准保持成正弦,PR可以工作。两条路最终殊途同归。但在弱电网或畸变工况下,“电压归一化”或者“直接乘正序电压”这类做法要小心。如果直接用采样电压的瞬时值当基准,电压里的谐波、负序分量都会被带进电流基准,PR环节再努力也滤不干净。我的习惯是只取PLL输出的角度/单位向量,再用这个干净向量构造正弦基准,把谐波挡在基准生成之前。
2.3 PLL和调制度这两个隐藏约束
既然基准相位来自PLL,PLL的动态和稳态精度就直接影响功率因数。同步旋转坐标系锁相环(SRF-PLL)结构简单、稳态精度好,但在电网电压的谐波和不平衡比较明显时,锁出的角度会有小纹波,导致电流基准出现附加的谐波。对三相系统可以改用基于正序分量提取的锁相方法,比如带正交信号发生器(DSOGI)的PLL,或者用陷波器把2倍频谐波挡掉。对于单相并网逆变器,正弦和余弦基准的质量更依赖正交信号发生器,不能只靠一个简单过零比较去锁相。总之,PLL的干净程度决定基准的干净程度,基准又决定并网电流的纯净度,这个因果链不能断。
再有一个容易被忽略的是调制度/直流母线电压约束。单位功率因数下逆变器要向电网输送有功,桥臂输出电压矢量的幅值必须高于电网电压矢量和电感压降的合成。如果母线电压偏低或者调制深度接近饱和,在电流过零附近就会表现出“跟不上”的现象,电流削顶、谐波升高,实测功率因数也掉下来。设计时除了控制参数,还要检查调制比余量,尤其电网电压偏高或动态波动时不能贴着限幅跑。
3. PR参数整定与离散化:从连续域到DSP的落地
3.1 一套可以起步的参数整定方法
先列一个单L电流环的控制对象,逆变器在中频段近似为一个增益环节,滤波电感L、线路电阻R,于是从控制量到并网电流的传递函数约是1/(Ls+R)。电网电压作为扰动量,PR控制器的主要任务就是在基频处提供足够高的环路增益并保持相位裕度。实际中我们不用执着于从零推导每个系数,下面这套步骤可以作为起步点。
第一,确定Kp。Kp主要决定电流环的穿越频率和动态响应。在只考虑Kp的简化开环下,期望穿越频率fc附近的幅值条件大约是
Kp·Kpwm ≈ 2π·fc·L
很多数字控制里把PWM调制增益折算成1,于是Kp≈2π·fc·L。fc一般取开关频率的1/10~1/20。举个例子,开关频率10kHz、L=3mH,fc取500Hz时,Kp初值大概是9.4,取整可以先从5~8试起。Kp太大,高频噪声和延迟导致的相位滞后都会被放大;太小,动态和抗扰动都不行。
第二,确定谐振带宽ωc。它的作用是给基频附近留出容差。对电网频率偏差不大的情况,ωc=2π×5~2π×15足够;如果当地电网频率飘得比较厉害,就取到2π×20甚至更大。带宽过大时,会对基频附近的其他谐波也产生较高增益,需要自行权衡。
第三,确定Kr。Kr直接决定基频点的峰值增益,峰值增益大致是Kp+Kr/2。为了让基频处稳态误差足够小,峰值增益通常做到比中频段高10~20倍,按这个目标反推Kr。还是用L=3mH那套参数,Kp=8、希望峰值增益约20倍,Kr大概可以取到300附近。然后放进仿真里闭环验证,观察阶跃响应和并网电流THD,再用波特图看看相位裕度,一般至少留40°以上。
3.2 离散化路上的几个关键决定
连续域设计完成后,真正的分水岭是离散化。PR和PI不一样,谐振极点非常“精细”,如果用普通双线性变换且不做任何修正,离散后的谐振频率可能发生偏移,轻则稳态误差变差,重则系统不稳定。我的做法是采用带预畸变的双线性变换,把ω0=2π×50这个频率点提前对齐。大多仿真工具里的离散化函数可以直接指定prewarp频率,写法类似
Gd = c2d(Gc_continuous, Ts, 'prewarp', 2pi50)
这一行看起来简单,但决定了谐振器是否恰好落在电网频率上。得到离散传递函数后,落到DSP里就是一个二阶递归(IIR)结构。代码骨架是:
/* err: 当前拍电流误差;ctrl: 控制器输出 */ ctrl = b0*err + b1*err_prev1 + b2*err_prev2 - a1*ctrl_prev1 - a2*ctrl_prev2; err_prev2 = err_prev1; err_prev1 = err; ctrl_prev2 = ctrl_prev1; ctrl_prev1 = ctrl;这里最想提醒的是:b0~a2这些系数,每次改采样周期、改ω0、改Kr都要重新计算,千万不要从老的工程里复制一套“经典系数”直接用。谐振器的系数对精度很敏感,稍有不对波形上就是持续的小毛刺或低频抖动。
如果DSP中断支持,还可以把采样点设在PWM计数顶部和底部,控制周期等于开关周期或半开关周期,这样能减少一拍延迟,但计算负担和中断负荷也随之增加。具体取哪种要看主控芯片的余量和项目对动态响应的要求,没有统一答案。
3.3 延迟补偿是实验和仿真最大的分水岭
数字控制天然有延迟:电流采样通常在PWM周期开始或中间,控制器计算需要时间,PWM比较值要到下一个周期才更新,合起来常用一个1.5倍采样周期来描述。连续域仿真里如果不加这个延迟,PR参数往往可以给得比较激进;一旦把延迟模型加进去,相位裕度立刻下降,足够让控制出现振荡或纹波。
常用的补偿思路有两种。一种是在设计控制器时就把延迟放进被控对象模型里,让整定结果天然预留余量,这最稳妥;另一种是在PR输出后做角度补偿,相当于给控制器增加一个相位项,按延迟对应的基频相位差来取,补偿谐振器在离散化、延迟下拉偏的频率点。对多数项目,把1.5拍延迟建模进仿真系统比事后补偿更容易落地。调试时如果你发现参数在仿真里跑得好、上机就抖,第一件事不是怀疑示波器,而是回头确认延迟模型建了没有。
实际参数里,如果控制器开关频率10kHz、Ts=100μs,1.5拍延迟在50Hz处对应的相位滞后大约为 1.5×0.0001×50×360°=2.7°,看着不大,但谐振器的相位曲线在ω0附近很陡,这点滞后叠加到环路里,足以吞掉好几十度裕度。这也是PR调试中“差一点点就振荡”现象最常见的来源。
4. 调试实录:那些仿真看不出来的并网坑
4.1 LCL谐振与有源阻尼
单L设计简单,但滤波效果有限;要用更小电感达到并网THD要求,多数方案上LCL。LCL好处是高频衰减快,坏处是幅频特性里有一个尖锐谐振峰,如果没有阻尼,即使PR参数在工频处再漂亮,系统也很容易在这个谐振频率附近振荡。仿真里这个问题很容易看见,但如果模型没建全,你会误以为是PR调得不对。
常用处理办法是给LCL加有源阻尼。简单有效的是电容电流反馈:把滤波电容上的电流采进来,乘一个虚拟电阻系数反馈到调制波,等效于在谐振峰上串联了一个虚拟电阻。也可以用电容电压反馈,但电流反馈在实现上更常见。无源阻尼(电感并联电阻、电容串联电阻)也可以,代价是损耗,在线缆长、温升高、效率要求严格的场合会比较头疼。还有一个可选方案是加陷波器把谐振峰削掉,但它会给整个环路的相位带来额外滞后,一般不作为首选。判断是不是LCL振荡,用FFT看电流里那个高频分量是否和理论谐振频率接近即可。
4.2 启动瞬间的相位对齐问题
仿真里初始化条件理想,PLL一上电就把角度锁准,真实硬件却常有意外。比如接触器闭合的瞬间,PLL还没锁定,此时如果电流控制已经开始动作,基准角度和电网实际相位对不上,就可能出现一个大电流冲击,严重的直接触发保护或损坏器件。
我的调试顺序是先空载并网:上下管封锁,只让母线电容充电,PLL在这个过程中把相位锁住;然后给一个极小的电流指令,比如额定电流的2%~5%,观察实际电流方向是不是与预期一致。如果电流反向,多半是采样极性、PLL输出的sin/cos符号或者基准构造环节有一处反号。这类问题在仿真中几乎不出现,但实际接线时一个采样霍尔的方向就能让人查一天。所以上电前一定要对通道:逐个通道扳电压波形,确认PLL角度的零点与采样电压正半周起点对齐。
另外启动电流指令不要给阶跃。仿真里阶跃无所谓,硬件上阶跃意味着电流基准瞬间从0跳到额定值,电感承受的冲击和器件应力都很大。给一段斜坡,比如100ms到200ms内从0升到目标值,既能保护设备,也能让你清楚看到电流环的动态过程,一旦有振荡不至于直接炸机。
4.3 电网频率漂移与带宽设计
电网工频名义上是50Hz,但在实际台区或微网里,频率漂个±0.2Hz是常有的事,弱电网甚至更大。如果准PR带宽很窄,比如ωc只取2π×2,频率一旦偏0.2Hz,谐振增益就会明显下降,输出电流出现幅值和相位误差。这正是整定ωc时不能照抄别人项目参数的原因,不同并网点频率质量差很远。
如果你的项目面对的是频率波动比较大的电网,有两个改进方向。第一,把ωc放宽到2π×20甚至更大,牺牲一点选择性换鲁棒性。第二,做频率自适应:PLL实时输出ω0,控制器系数在线更新。第二种思路理论很漂亮,但要注意离散系数变化时不能突变,否则电流会抖一下。实际实现中可以给ω0加一个低通或斜坡,让系数平滑地跟着电网频率走。用DSP做这个不难,但每次系数更新都要重新算一遍IIR系数,中断里的计算量要预先评估。
4.4 现场问题快速排查
| 现象 | 优先排查 | 常用对策 |
|---|---|---|
| 电流过零处削顶、THD升高 | 调制度饱和、死区效应 | 提高母线电压、减小电流幅值或加死区补偿 |
| 并网电流相位有稳定偏差 | PLL角度不准、数字延迟未补偿 | 检查PLL输出与采样电压对齐,补偿延迟 |
| 并网瞬间大电流冲击 | 基准相位错误、指令阶跃 | 从零斜坡给电流基准,先空载锁相 |
| 电流高频振荡 | LCL谐振峰未阻尼 | 电容电流有源阻尼,或调整LCL参数 |
| 功率因数偏离1 | 无功电流指令不为零、PLL环路误差 | 检查基准iq_ref是否清零,验证PLL稳态 |
这张表是给调试时走捷径用的。实际中这五类问题经常混在一起,比如LCL振荡和死区效应同时存在时,电流波形千奇百怪。我的办法是每次只动一个变量:先稳住相位,再降THD,最后调稳态精度。同时样机调试时保留一套“保底参数”(Kp小一点、Kr按最低需求、ωc偏宽),遇到环路发散先回到安全区,再渐进优化。
我在这些项目里最后保留的调试习惯是:一切改动都从仿真中的“数字延迟+LCL完整模型”开始,确保稳定裕度足够,再上实际样机验证。单位功率因数表面上是一个波形指标,真正实现起来考验的却是整条链路——PLL、基准构造、PR参数、离散化、延迟补偿、滤波器阻尼,每一环都要对齐。希望这篇记录能把原理和落地之间的那层窗户纸捅破,也祝大家在并网调试时少一点示波器前的漫长抓挠,多一点一次通过的顺畅。