4、预同步控制策略:幅值预同步、频率预同步、相位预同步

各位工程师朋友,咱们接着聊。上一节我们把并网到离网切换的总体框架搭好了,这一节我重点讲讲预同步控制。说白了,预同步就是让微电网在并网开关闭合前,先把自己的电压、频率、相位调整到跟大电网“差不多”的水平。为什么要做这个?你想想看,如果两边电压差太大就合闸,那冲击电流能把IGBT炸飞——我在项目现场亲眼见过一次,那动静,真吓人。

4.1 为什么需要预同步?

嗯,这里要先说清楚一个概念。微电网在离网模式下,电压和频率是由储能变流器自己撑起来的。但大电网那边呢?它可不管你微电网是什么状态,它自己稳得很。所以当我们要从离网切回并网时,必须先把微电网侧的电压幅值、频率、相位都拉到跟电网侧一致。

我个人习惯把预同步比作“两个人要牵手跑步”。一个人已经跑得很稳了(电网),另一个人要从旁边插进来(微电网)。如果两个人的速度、方向、步调都不一样,硬拉手肯定摔跤。预同步就是让后者先调整到跟前者的节奏一致,然后再牵手。

核心目标: 在并网开关闭合瞬间,微电网侧电压与电网侧电压的幅值差、频率差、相位差均趋近于零。

4.2 幅值预同步

幅值预同步,说白了就是调电压大小。离网模式下,微电网的电压幅值可能因为负载波动而偏离额定值。比如我遇到过的一个项目,离网时带了一台大电机启动,电压瞬间跌到0.85 pu。这时候要并网,不把电压拉回来,合闸瞬间的冲击电流能直接触发过流保护。

幅值预同步的常用方法是用PI控制器。把电网电压的幅值作为参考值,微电网电压的幅值作为反馈值,误差经过PI调节后,叠加到电压环的给定上。代码实现大概是这样的:

// 幅值预同步PI控制
float V_grid_mag = sqrt(V_grid_alpha * V_grid_alpha + V_grid_beta * V_grid_beta);
float V_mg_mag = sqrt(V_mg_alpha * V_mg_alpha + V_mg_beta * V_mg_beta);

float error_V = V_grid_mag - V_mg_mag;
static float integral_V = 0;
integral_V += error_V * Ts;

float V_adjust = Kp_V * error_V + Ki_V * integral_V;

// 将V_adjust叠加到电压环给定
V_ref = V_nominal + V_adjust;

这里有个坑,我提醒一下。PI参数不能调得太激进,否则幅值会超调,反而拉大了电压差。我曾经在一个项目中把Kp设得太大,结果预同步过程中电压来回震荡,花了3秒才稳定下来。后来把Kp减半,Ki适当增大,0.5秒就搞定了。

小技巧: 幅值预同步的响应速度可以适当放慢,因为幅值差对冲击电流的影响相对较小。我一般把带宽设在5-10 Hz就够用了。

4.3 频率预同步

频率预同步,就是让微电网的频率跟上电网的频率。电网频率是50 Hz(或60 Hz),非常稳定。但离网模式下,微电网的频率会因为负载变化而波动。比如负载突然加重,频率会下降;负载突然减轻,频率会上升。

频率预同步的做法跟幅值类似,也是用PI控制。把电网频率作为参考,微电网频率作为反馈,误差经过PI调节后,调整逆变器的频率给定。代码示例:

// 频率预同步PI控制
float f_grid = 50.0;  // 电网频率,可通过PLL获取
float f_mg = get_mg_frequency();  // 微电网频率

float error_f = f_grid - f_mg;
static float integral_f = 0;
integral_f += error_f * Ts;

float f_adjust = Kp_f * error_f + Ki_f * integral_f;

// 将f_adjust叠加到频率给定
f_ref = f_nominal + f_adjust;

嗯,这里要注意一点。频率预同步和幅值预同步是同时进行的,但它们的响应速度可以不同。我个人习惯让频率预同步快一些,因为频率差对锁相环的影响更大。频率差太大时,PLL可能锁不住,导致相位计算出错。

注意: 频率预同步过程中,不要突然改变频率给定值。应该平滑过渡,否则会引起微电网内部的功率振荡。我建议用斜坡函数限制频率变化率,一般不超过0.5 Hz/s。

4.4 相位预同步

相位预同步是最关键的一步,也是最容易出问题的一步。为什么?因为相位差对冲击电流的影响最大。你想想看,如果幅值和频率都调好了,但相位差了180度,合闸瞬间的电压差就是两倍的额定电压,那电流得多大?

相位预同步的核心思路是:让微电网的电压相位逐渐逼近电网电压的相位。具体做法是,通过PLL获取电网电压的相位角θ_grid,同时获取微电网电压的相位角θ_mg。两者的差值Δθ = θ_grid - θ_mg,经过PI调节后,调整微电网的频率给定,从而改变相位。

代码实现:

// 相位预同步PI控制
float theta_grid = get_pll_theta();  // 电网相位
float theta_mg = get_mg_theta();     // 微电网相位

// 计算相位差,注意要归一化到[-π, π]
float delta_theta = theta_grid - theta_mg;
if (delta_theta > PI) delta_theta -= 2 * PI;
if (delta_theta < -PI) delta_theta += 2 * PI;

static float integral_theta = 0;
integral_theta += delta_theta * Ts;

float omega_adjust = Kp_theta * delta_theta + Ki_theta * integral_theta;

// 将omega_adjust叠加到角频率给定
omega_ref = omega_nominal + omega_adjust;

这里有个细节,我特别想强调。相位差的计算一定要做归一化处理,否则当相位差接近±π时,会出现跳变。我曾经在一个项目中忘了做这个处理,结果相位差从179度跳到-179度,PI控制器直接饱和,系统振荡了好几个周期才恢复。

经验之谈: 相位预同步的PI参数要跟频率预同步协调好。我一般把相位环的带宽设得比频率环低一些,避免两者互相干扰。具体来说,频率环带宽10 Hz,相位环带宽2 Hz,这样配合起来效果不错。

4.5 预同步的整体流程

好了,三个预同步都讲完了。那它们在实际中是怎么配合的呢?我画了一张流程图,方便大家理解。

预同步控制流程图 开始预同步 幅值预同步 PI调节,调整电压幅值给定 频率预同步 PI调节,调整频率给定 相位预同步 PI调节,调整角频率给定 误差达标? 合闸并网

从流程图可以看出,三个预同步是顺序执行的,但实际中它们会相互影响。比如相位预同步调整频率时,频率预同步也在同时工作。所以我的建议是:先让幅值和频率预同步稳定下来,再启动相位预同步。这样相位环的调节量不会太大,系统更稳定。

4.6 预同步的退出条件

什么时候算预同步完成?我个人习惯设置三个阈值:

参数 阈值 说明
幅值差 < 5% 额定电压 一般取10V以内(220V系统)
频率差 < 0.1 Hz 电网频率波动本身就有±0.05 Hz
相位差 < 5° 这个值越小越好,我一般设3°

当三个条件都满足时,保持这个状态持续一段时间(比如5个电网周期),确认没有波动后,就可以发出合闸指令了。

重要提醒: 合闸指令发出后,不要立即退出预同步控制。应该继续保持预同步状态1-2个周期,等并网开关真正闭合后,再切换到并网控制模式。否则,如果开关动作有延迟,预同步退出了但开关还没合上,那就前功尽弃了。

好了,预同步控制策略就讲到这里。说白了,幅值、频率、相位三个预同步,核心就是三个PI控制器在干活。但实际调试时,参数整定和逻辑配合才是真正的难点。我建议大家在仿真平台上先跑一遍,把参数调顺了再上硬件。毕竟,炸一次IGBT的成本,够买好几年的仿真软件授权了。


专注资料整理