主动式孤岛检测原理:四种核心方法深度解析

各位工程师朋友,今天我们来聊聊主动式孤岛检测。说实话,被动式检测虽然简单,但盲区太大——你想想看,当负载和逆变器输出功率刚好匹配时,电压和频率根本不会跑偏,这时候被动法就彻底失效了。所以,我们得主动“搞点事情”,让逆变器主动注入扰动,逼出孤岛状态。

我个人习惯把主动式检测比作“钓鱼”——你往水里扔个石子,看水面有没有反应。没反应,说明水太深(电网还在);有反应,说明水浅(孤岛了)。下面这四种方法,就是四种不同的“扔石子”方式。

1. 主动频率偏移法(AFD)

AFD 是最经典的方法,也是我入行时第一个接触的主动式算法。它的核心思路很简单:让逆变器输出电流的频率,比电网电压频率偏一点点。

怎么偏? 我们通常引入一个“斩波因子” cf。正常并网时,电流和电压同频。AFD 会让电流在过零点附近“死区”一段时间,相当于强制电流频率偏移。

核心公式:

斩波因子 cf = 2 * tz / T_v

其中 tz 是死区时间,T_v 是电压周期。cf 越大,频率偏移越猛。

// AFD 实现伪代码(我习惯用定点数做,避免浮点开销)
void afd_control(float v_freq, float *i_freq) {
    float cf = 0.05;  // 斩波因子,我一般取 0.03~0.08
    if (v_freq > 49.5 && v_freq < 50.5) {
        *i_freq = v_freq * (1 + cf);  // 电流频率略高于电压
    } else {
        *i_freq = v_freq;  // 频率跑偏太多就停止扰动
    }
}

我的经验: 我在一个 30kW 的 PCS 项目里用过 AFD。当时并网时一切正常,但孤岛测试时发现,如果负载是纯阻性,频率偏移很慢。后来我把 cf 从 0.03 调到 0.06,检测时间从 2 秒缩短到 0.8 秒。但注意,cf 太大容易误触发,电网频率波动时容易跳闸。

AFD 的优缺点:

  • 优点:实现简单,计算量小,适合低成本 MCU。
  • 缺点:多机并联时,各台 AFD 的扰动可能互相抵消,导致检测失败。另外,对电网质量有轻微影响。

2. 滑模频率偏移法(SMS)

SMS 是 AFD 的升级版。它不固定偏移量,而是让偏移量随频率变化——频率越偏,我推得越狠。这就像“正反馈”,一旦孤岛发生,频率会迅速跑偏到保护阈值。

核心思想: 让逆变器输出电流的相位,是电网频率的函数。正常时相位差很小,孤岛时相位差迅速增大。

SMS 相位偏移公式:

θ_sms = θ_m * sin( (π/2) * (f - f_g) / (f_m - f_g) )

其中 θ_m 是最大偏移角(我常用 10°),f_m 是最大偏移频率(通常 51Hz),f_g 是电网额定频率(50Hz)。

// SMS 实现示例
float sms_phase_shift(float f_grid) {
    float theta_m = 10.0 * PI / 180.0;  // 10度转弧度
    float f_m = 51.0;  // 最大偏移频率
    float f_g = 50.0;  // 额定频率
    
    if (f_grid < 49.5 || f_grid > 50.5) {
        return 0.0;  // 频率异常时不扰动
    }
    
    float delta = (f_grid - f_g) / (f_m - f_g);
    return theta_m * sin(PI/2 * delta);
}

避坑指南: 我曾经在一个 100kW 的储能项目里用 SMS,结果并网时频繁误报孤岛。查了两天发现,是电网频率波动较大(±0.2Hz),SMS 的增益设得太高。后来我把 θ_m 从 15° 降到 8°,并加入 200ms 的延时确认,问题就解决了。记住,SMS 的增益要跟电网质量匹配。

SMS vs AFD:

对比项 AFD SMS
扰动方式 固定频率偏移 频率相关相位偏移
检测速度 较慢(0.5~2s) 较快(0.2~1s)
多机并联 易失效 相对稳定
电网影响 较小 略大

3. Sandia 频率偏移法

Sandia 是美国 Sandia 国家实验室提出的方法,说白了就是“正反馈+频率偏移”的组合拳。它比 SMS 更激进——不仅相位偏移,还主动改变电流幅值。

核心逻辑: 检测到频率偏移后,逆变器输出一个与频率偏差成正比的“额外无功电流”,加速频率漂移。

Sandia 法公式:

I_q = K * (f - f_g)

其中 I_q 是无功电流分量,K 是正反馈增益(我一般取 0.1~0.5 A/Hz)。

// Sandia 频率偏移法实现
void sandia_control(float f_grid, float *i_d, float *i_q) {
    float K = 0.3;  // 正反馈增益
    float f_g = 50.0;
    float delta_f = f_grid - f_g;
    
    // 正常并网时,无功电流为0
    // 孤岛时,频率偏移,注入无功电流加速偏移
    if (fabs(delta_f) > 0.1) {
        *i_q = K * delta_f;  // 正反馈
    } else {
        *i_q = 0.0;
    }
    
    // 有功电流保持正常
    *i_d = 1.0;  // 标幺值
}

我的建议: Sandia 法检测速度非常快,我实测过 0.1 秒就能检测到孤岛。但代价是,电网频率波动时容易误动。我一般会加一个“频率变化率”限制——只有 df/dt 超过 0.5 Hz/s 才启动正反馈,这样能滤掉大部分电网正常波动。

4. 主动电流扰动法

这个方法跟频率偏移不同,它扰动的是电流幅值。说白了,就是让逆变器输出电流周期性地“抖一下”——比如每 10 个周期,电流幅值突然降低 5%。

为什么有效? 并网时,电网是“硬”的,你电流抖一下,电压纹丝不动。但孤岛时,负载是“软”的,电流一抖,电压跟着抖。检测到电压波动,就知道孤岛了。

// 主动电流扰动法示例
void current_disturbance(int cycle_count, float *i_ref) {
    int disturb_period = 10;  // 每10个周期扰动一次
    float disturb_amp = 0.95;  // 幅值降到95%
    
    if (cycle_count % disturb_period == 0) {
        *i_ref = *i_ref * disturb_amp;  // 电流幅值降低
    } else {
        // 正常输出
    }
}

避坑指南: 我曾经在微电网项目里用电流扰动法,结果发现扰动周期跟负载的谐振频率重合了,导致电压振荡。后来我把扰动周期改成随机数(7~13 周期随机),问题就解决了。另外,扰动幅度不能太大,否则并网时功率波动会触发过流保护。

四种方法对比总结:

方法 检测速度 多机兼容性 电网影响 实现难度
AFD 中等
SMS
Sandia 很快
电流扰动

知识体系框架图

下面这张图,是我自己整理的主动式孤岛检测知识体系。你可以把它当作学习地图。

主动式孤岛检测知识体系 主动式孤岛检测 AFD 频率偏移 SMS 滑模偏移 Sandia 频率法 电流扰动法 斩波因子 cf 死区时间 tz 相位偏移角 θ 正反馈增益 无功电流 I_q 频率变化率 df/dt 扰动周期 扰动幅度 选择建议:单机用 AFD,多机用 Sandia 电网质量差时慎用 SMS 和 Sandia

好了,四种主动式孤岛检测方法就讲完了。说实话,没有哪种方法是完美的,关键看你的应用场景。我个人建议:单机小功率用 AFD 最省事,多机并联用 Sandia 最可靠,电网质量差的时候用电流扰动法最稳妥。嗯,下次我们聊聊这些方法在 DSP 上的具体实现细节。


公众号:蓝海资料掘金营,微信deep3321