最近在开发一款30kW单相可控整流器时,我遇到一个棘手问题:传统过零检测锁相方法在电网电压畸变时表现糟糕,导致系统频繁失锁。经过多轮方案对比,最终选择了基于SOGI(二阶广义积分器)的锁相方案配合双闭环控制,实测效果令人惊喜。
这套方案的核心优势在于:
系统采用典型的双闭环架构:
code复制电网电压 → SOGI锁相 → 坐标变换 → 电流内环PI → PWM生成
↑ ↑
电压外环PI 前馈补偿
关键设计要点:
SOGI的核心在于其正交信号生成能力。代码实现中:
c复制void SOGI_Update(float v_in, SOGI_Params* p) {
p->v_alpha = p->k * w0 * (v_in - p->v_alpha) / p->Ts - w0 * p->v_beta;
p->v_beta = w0 * p->v_alpha * p->Ts + p->v_beta;
}
参数设计经验:
实测数据对比:
| 指标 | 传统PLL | SOGI方案 |
|---|---|---|
| 谐波抑制能力 | ≤15%THD | ≤30%THD |
| 相位误差 | ±5° | ±2° |
| 响应时间 | 20ms | 10ms |
电流环采用dq解耦控制,核心代码:
c复制void CurrentLoop_Update(CurrentLoop* loop, float id_ref, float iq_ref,
float id_fb, float iq_fb) {
// 前馈补偿
float ud_ff = grid_voltage * cos(theta);
float uq_ff = grid_voltage * sin(theta);
// PI调节
loop->ud = loop->kp * (id_ref - id_fb) + loop->ki * loop->id_integral + ud_ff;
loop->uq = loop->kp * (iq_ref - iq_fb) + loop->ki * loop->iq_integral + uq_ff;
// 限幅处理
loop->ud = fmaxf(fminf(loop->ud, V_MAX), -V_MAX);
loop->uq = fmaxf(fminf(loop->uq, V_MAX), -V_MAX);
}
调试心得:
电压外环控制直流母线电压,其输出作为电流环的d轴给定。关键点:
通过枚举定义四种工作模式:
c复制typedef enum {
RECTIFIER, // 整流模式
INVERTER, // 逆变模式
INDUCTIVE, // 感性无功
CAPACITIVE // 容性无功
} OperationMode;
模式切换逻辑:
c复制void SetOperationMode(OperationMode mode) {
switch(mode) {
case RECTIFIER:
id_ref = POWER_SETPOINT / v_dc;
iq_ref = 0; // 单位功率因数
break;
case INVERTER:
id_ref = -POWER_SETPOINT / v_dc;
iq_ref = 0;
break;
case INDUCTIVE:
iq_ref = Q_SETPOINT; // 感性无功
break;
case CAPACITIVE:
iq_ref = -Q_SETPOINT; // 容性无功
break;
}
}
采用S-Function调用C代码时需注意:
在30kW样机上测试结果:
| 测试项目 | 性能指标 |
|---|---|
| 负载阶跃响应 | 恢复时间<10ms |
| 直流电压波动 | <3%额定值 |
| 输入THD | <3% |
| 功率因数 | >0.99 |
| 整机效率 | 96.5%@30kW |
锁相失步:
电流环振荡:
模式切换冲击:
这套方案在工业现场已稳定运行超过2000小时,期间经历过多次电网电压骤升骤降考验。对于需要高可靠性单相整流/逆变的场景,SOGI锁相+双闭环控制确实是个值得推荐的选择。