3、对称故障控制策略:电压跌落检测、正序电流控制、无功支撑策略、有功功率调节

各位同行,今天我们来聊聊对称故障。说白了,就是电网三相电压同时跌落的场景。这种故障在现实中不算最常见,但一旦碰上,处理不好就容易炸机。我早年刚入行时,就吃过这个亏——有一次现场调试,电网突然跌了30%,我那个控制算法没处理好,直流母线直接飙到800V,IGBT模块当场报废。从那以后,我对对称故障的策略就格外上心。

3.1 电压跌落检测——你得先知道它来了

控制策略的第一步,是快速检测到电压跌落。你想想看,如果检测慢了,电流还没来得及调整,过流就来了。

我个人习惯用dq变换法来检测。具体做法是:

  • 采集三相电压 \( u_a, u_b, u_c \)
  • 通过Park变换得到 \( u_d, u_q \)
  • 计算电压幅值 \( U_m = \sqrt{u_d^2 + u_q^2} \)
  • 与额定值比较,判断跌落深度

这里有个关键点:锁相环(PLL)的响应速度。如果PLL在故障期间失锁,你算出来的 \( u_d, u_q \) 就是错的。我在项目中遇到过这种情况,PLL用了二阶广义积分器(SOGI),故障时相位跳变,导致检测结果滞后了半个周波。后来我改用了双二阶广义积分器(DSOGI),抗干扰能力明显提升。

检测时间要求:根据并网标准,电压跌落检测应在1ms内完成。我个人建议留出余量,控制在0.5ms以内。

下面是我常用的检测逻辑伪代码:

// 电压跌落检测函数
void voltage_sag_detection(void) {
    // 1. 采集三相电压
    ua = ADC_read(CHANNEL_A);
    ub = ADC_read(CHANNEL_B);
    uc = ADC_read(CHANNEL_C);
    
    // 2. Clark变换
    u_alpha = (2*ua - ub - uc) / 3;
    u_beta  = (ub - uc) / sqrt(3);
    
    // 3. Park变换(使用PLL输出的theta)
    ud = u_alpha * cos(theta) + u_beta * sin(theta);
    uq = -u_alpha * sin(theta) + u_beta * cos(theta);
    
    // 4. 计算电压幅值
    Um = sqrt(ud*ud + uq*uq);
    
    // 5. 判断跌落
    if (Um < V_NOMINAL * 0.9) {
        sag_flag = 1;          // 检测到跌落
        sag_depth = (V_NOMINAL - Um) / V_NOMINAL;
    } else {
        sag_flag = 0;
    }
}

避坑指南:我曾经在采样频率较低的系统上吃过亏。如果ADC采样率只有10kHz,检测延迟可能达到100μs以上。建议采样率至少20kHz,配合硬件比较器做快速触发。

3.2 正序电流控制——稳住电流,别让它乱跑

对称故障下,电网电压中只有正序分量。所以控制目标很简单:只控制正序电流。负序和零序分量在对称故障中不存在,不用管。

控制结构还是经典的双闭环

  • 外环:直流母线电压环或功率环
  • 内环:电流环,采用PI控制器

但这里有个变化:故障期间,电网电压降低,逆变器的输出能力受限。你想想看,电压低了,同样的电流能输出的功率就少了。所以电流环的限幅值需要动态调整。

我一般这样处理:

  1. 根据跌落深度计算最大允许电流
  2. 将电流限幅值从额定值降低到 \( I_{max} = I_{rated} \times \frac{U_{grid}}{U_{rated}} \)
  3. 同时考虑IGBT的过流能力,通常取1.2倍额定电流作为硬限幅

注意:电流环的PI参数在故障期间可能需要切换。我在项目中遇到过,正常工况下PI参数调得很好,但电压一跌,电流响应就出现超调。后来我增加了增益调度,根据电压幅值自动调整PI系数。

正序电流控制的框图如下:

对称故障下正序电流控制框图 电压跌落检测 电流指令计算 电流环PI控制 PWM调制 电流反馈 动态限幅 图3-1 对称故障下正序电流控制框图 关键:电压跌落检测 → 动态调整电流指令 → 限幅保护 PI参数可根据电压幅值进行增益调度

3.3 无功支撑策略——电网需要你出力

电网故障时,最怕的是电压进一步崩溃。所以并网标准(比如国内的GB/T 19964)要求逆变器在故障期间提供无功支撑。说白了,就是让逆变器像发电机一样,向电网注入无功电流,帮助电压恢复。

具体要求是这样的:

电压跌落深度 无功电流注入比例 响应时间
10% ~ 30% 不低于额定电流的 20% < 30ms
30% ~ 50% 不低于额定电流的 50% < 30ms
> 50% 不低于额定电流的 100% < 30ms

我一般这样实现无功支撑:

  1. 根据检测到的跌落深度 \( \Delta U \),计算无功电流指令 \( i_q^* = k \times \Delta U \times I_{rated} \)
  2. 其中 \( k \) 是比例系数,通常取 2~6,具体看标准要求
  3. 将 \( i_q^* \) 作为电流环的q轴指令

经验之谈:我建议把无功支撑的优先级设得比有功高。因为电网恢复电压是第一位的,有功功率可以等电压稳定后再慢慢调。我曾经在某个项目中,把有功和无功的优先级搞反了,结果电压越撑越低,差点导致脱网。

3.4 有功功率调节——别让直流母线飞起来

对称故障下,电网电压降低,逆变器能送出去的有功功率自然就少了。但光伏板或者电池还在往直流母线上灌能量,如果不及时调节,直流母线电压就会飙升。

我常用的策略是:

  • 限制有功电流指令:根据当前电压和电流限幅值,计算最大允许有功电流
  • 优先保证无功:先分配无功电流,剩余容量再给有功
  • 直流母线电压环:如果母线电压超过阈值,立即降低有功指令

具体计算是这样的:

// 有功电流指令计算
void active_power_control(void) {
    // 1. 计算总电流限幅
    I_max = I_rated * 1.2;  // 硬限幅
    
    // 2. 无功电流指令(来自无功支撑策略)
    iq_ref = k * sag_depth * I_rated;
    
    // 3. 限制无功电流不超过总限幅
    if (iq_ref > I_max) iq_ref = I_max;
    
    // 4. 计算有功电流最大允许值
    id_max = sqrt(I_max * I_max - iq_ref * iq_ref);
    
    // 5. 直流母线电压环输出
    id_ref = PI_controller(Vdc_ref - Vdc_actual);
    
    // 6. 限幅
    if (id_ref > id_max) id_ref = id_max;
    if (id_ref < -id_max) id_ref = -id_max;
}

注意:直流母线电压环的PI参数在故障期间也需要调整。因为正常工况下,母线电压波动小,PI参数可以调得比较慢。但故障时,母线电压可能快速上升,需要更快的响应。我一般会准备两套PI参数,根据故障标志位切换。

3.5 整体控制流程

把上面几个部分串起来,整个对称故障控制策略的流程是这样的:

  1. 检测阶段:实时监测三相电压,一旦检测到跌落,立即触发故障处理
  2. 模式切换:从正常控制模式切换到故障控制模式,切换时间应小于1ms
  3. 指令计算:根据跌落深度,计算无功电流指令和有功电流指令
  4. 电流控制:通过电流环PI控制器,跟踪电流指令
  5. 限幅保护:确保电流不超过IGBT的安全工作区
  6. 故障恢复:电网电压恢复正常后,平滑切换回正常模式

避坑指南:我曾经在故障恢复时吃过亏。电压刚恢复正常,我立刻切回正常模式,结果电流突变,导致过流保护动作。后来我加了软切换,在故障恢复后的几个周波内,让电流指令逐渐过渡到正常值。

好了,对称故障控制策略的核心内容就这些。说白了,就是三件事:快速检测、优先无功、限幅保护。你把这些做好了,电网故障时逆变器就能稳稳地撑住。


专注资料整理