1. 并网逆变器PQ控制概述
在新能源发电系统中,并网逆变器是实现电能转换与馈送的关键设备。PQ控制(有功-无功控制)作为最常见的并网控制策略,其核心目标是精确控制逆变器输出的有功功率(P)和无功功率(Q)。本文讨论的案例中,采用两电平逆变器拓扑,通过全离散化的控制方案实现单位功率因数并网(即并网电流与电网电压同相位),其中:
- 有功功率设定为10kW
- 无功功率设定为0Var
- 采用双二阶广义积分锁相环(DSOGI-PLL)实现电网相位快速跟踪
- 控制系统全部采用手工搭建的离散化实现
提示:单位功率因数运行意味着逆变器仅向电网注入有功功率,这对提高电网运行效率和减少线路损耗具有重要意义。
2. 系统架构与核心设计思路
2.1 整体控制结构
该并网逆变器系统采用典型的双环控制架构:
code复制电网电压 → DSOGI-PLL → 相位信息 → 电流参考生成 → 电流控制器 → SVPWM → 逆变器
↑ ↑
电网电压检测 功率指令(10kW, 0Var)
2.2 关键技术创新点
-
锁相环设计:
- 采用DSOGI-PLL替代传统SRF-PLL
- 内置正交信号发生器,增强抗谐波干扰能力
- 离散化实现采用梯形积分法,提升数值稳定性
-
功率控制策略:
- 直接功率控制结合电流前馈补偿
- 瞬时功率计算采用移动平均滤波
- 电流环加入电网电压前馈项
-
全离散化实现:
- 控制算法全部手工编码实现
- 采样与PWM载波严格同步
- 采用双缓冲机制消除采样抖动
3. 双二阶广义积分锁相环(DSOGI-PLL)实现
3.1 算法原理
DSOGI-PLL由两个核心部分组成:
- 双二阶广义积分器:生成与输入信号正交的β分量
- Park变换鉴相器:通过αβ-dq变换提取相位误差
其传递函数为:
code复制H(s) = (kωn*s)/(s² + kωn*s + ωn²)
Q(s) = (kωn²)/(s² + kωn*s + ωn²)
其中ωn为电网额定角频率,k为阻尼系数(通常取√2)
3.2 离散化实现代码解析
matlab复制function [theta, sin_theta] = DSOGI_PLL(u_grid, Ts, wn)
persistent v_prev qv_prev;
if isempty(v_prev)
v_prev = [0; 0];
qv_prev = [0; 0];
end
k = 1.414; % 阻尼系数
v = [0; 0];
qv = [0; 0];
% 二阶广义积分器离散化
for i=1:2
A = [1 - Ts*wn*k, -Ts*wn^2;
Ts, 1];
B = [Ts*wn*k; 0];
v(i) = A(1,:)*v_prev + B(1)*u_grid;
qv(i) = A(2,:)*qv_prev + B(2)*u_grid;
end
% 正交信号生成
v_alpha = v(1);
v_beta = qv(1)/wn;
% 相位误差计算
epsilon = atan2(v_beta, v_alpha);
% 更新状态变量
v_prev = v;
qv_prev = qv;
% 锁相环积分环节
persistent int_epsilon;
if isempty(int_epsilon)
int_epsilon = 0;
end
int_epsilon = int_epsilon + Ts * epsilon * 100;
theta = int_epsilon;
sin_theta = sin(theta);
end
3.3 性能优势实测
| 指标 | DSOGI-PLL | 传统SRF-PLL |
|---|---|---|
| 相位跟踪延迟 | <1ms | 5-10ms |
| 谐波抑制能力 | ±0.5° | ±2° |
| 电压跌落恢复时间 | 10ms | 30ms |
注意:在实际实现时,积分器初始状态需要妥善处理,否则可能导致启动时的相位跳变。
4. 功率闭环控制实现
4.1 控制算法流程
-
瞬时功率计算:
p = vg * ig * cosφ ≈ vg * ig(φ≈0)
q = vg * ig * sinφ ≈ 0 -
功率滤波:
采用一阶低通滤波器消除测量噪声:
p_filter = 0.95*p_prev + 0.05*p_inst -
电流参考生成:
i_ref = (P_ref - p_filter) * Kp + (Q_ref - q_filter) * Kq -
前馈补偿:
v_ff = vg + Lf*(i_ref - ig)/Ts
4.2 离散化电流控制器实现
c复制void CurrentControl(float igrid_meas, float vgrid_meas) {
static float i_error_prev = 0;
static float p_prev = 0;
// 瞬时功率计算与滤波
float p_inst = vgrid_meas * igrid_meas;
float p_filter = 0.95*p_prev + 0.05*p_inst;
// 有功-电流转换
float i_ref = (10e3 - p_filter) * 0.001; // Kp=0.001
// 电网电压前馈
float v_pcc_pred = vgrid_meas + 0.002*(i_ref - igrid_meas)/0.0001; // Lf=2mH, Ts=100us
// 空间矢量PWM生成
GenerateSVPWM(v_pcc_pred);
// 状态更新
p_prev = p_filter;
}
4.3 参数整定要点
-
功率环比例系数Kp:
Kp = 1/Vg_nom(Vg_nom为电网额定电压) -
前馈系数:
电感值Lf需考虑±20%的偏差容限 -
滤波时间常数:
一般取1/10~1/5电网周期
5. 采样与离散化实现技巧
5.1 同步采样设计
| 方案 | 优点 | 缺点 |
|---|---|---|
| PWM中点采样 | 避开开关噪声 | 需要精确计时 |
| 双缓冲机制 | 消除采样保持抖动 | 增加内存占用 |
| 硬件过采样 | 提高ADC分辨率 | 增加CPU负载 |
5.2 采样中断服务例程
matlab复制function SampleISR()
persistent adc_buf;
if isempty(adc_buf)
adc_buf = zeros(2,1);
end
% 双缓冲切换
adc_buf(1) = readADC(0); % 通道0:电网电压
adc_buf(2) = readADC(1); % 通道1:并网电流
% 控制周期触发
if mod(step_count, control_ratio) == 0
ProcessControl(adc_buf);
adc_buf = zeros(2,1); % 缓冲清零
end
end
5.3 离散化注意事项
-
时延补偿:
计算控制量时应考虑半个周期的计算延迟 -
数值溢出:
定点实现时需要特别注意积分项的饱和问题 -
标幺化处理:
建议采用标幺值计算,提高数值稳定性
6. 实测性能与问题排查
6.1 典型波形分析

- 并网启动过程:<3个电网周期达到稳态
- 电流THD:<1%
- 功率因数:0.999
6.2 常见问题与解决方案
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 启动时电流冲击 | 初始相位偏差大 | 增加软启动环节 |
| 功率振荡 | 功率环参数过激进 | 减小Kp或增加滤波时间常数 |
| 高次谐波含量大 | 采样不同步 | 优化采样时刻或增加硬件滤波 |
| 锁相环失锁 | 电网电压畸变严重 | 增加DSOGI的前置滤波环节 |
6.3 抗干扰测试结果
| 干扰类型 | 相位误差 | 功率波动 |
|---|---|---|
| 5%电压谐波 | ±0.5° | <1% |
| 20%电压跌落 | ±1.2° | 3% |
| 频率波动±1Hz | ±0.8° | 2% |
在实际调试中发现,当电网阻抗较大时,需要适当减小电流环带宽以避免振荡。一个实用的技巧是在不同电网条件下自动调整前馈系数:
c复制// 自适应前馈系数
float Zgrid_est = fabs(Vgrid_meas/Igrid_meas);
float K_adapt = 1.0 / (1.0 + 0.1*Zgrid_est);
v_ff = vg + K_adapt*Lf*(i_ref - ig)/Ts;
这种全离散化的实现方式虽然初期开发工作量较大,但在实际运行中展现出卓越的性能和可靠性。特别是在应对电网异常工况时,其优势更为明显。后续可以考虑加入预测控制算法,进一步缩短动态响应时间。