1. 引言
随着可再生能源(如光伏、风电)的大规模并网和储能系统的快速发展,大功率储能变流器(PCS, Power Conversion System) 作为能量双向流动的核心枢纽,其控制性能直接关系到电网的稳定性、电能质量以及系统效率。在众多控制策略中,双环闭环控制算法 因其优异的动态响应、稳态精度和抗干扰能力,已成为大功率 PCS 的主流控制方案。本文将深入剖析大功率 PCS 双环闭环控制算法的基本原理、数学模型、设计方法 ,并结合仿真与代码示例,阐述其工程实现要点。
2. PCS 拓扑结构与控制目标
2.1 典型拓扑结构
大功率 PCS 通常采用三相两电平或三电平电压源型变流器(VSC) 作为主电路拓扑。
- 直流侧 :连接电池储能系统(BESS),电压为
V_dc。 - 交流侧 :通过滤波电感
L_f和滤波电容C_f(构成 LCL 或 L 型滤波器)接入电网,电压为V_g。 - 核心开关器件:IGBT 或 SiC MOSFET,由 PWM 信号驱动。
2.2 主要控制目标
- 功率控制 :精确控制注入电网的有功功率
P和无功功率Q,实现削峰填谷、频率支撑等功能。 - 电流控制:确保并网电流正弦、谐波含量低,满足并网标准(如 THD < 5%)。
- 直流侧电压稳定:在并网模式下维持直流母线电压恒定;在离网模式下为负载提供稳定电压。
- 动态响应与稳定性:在电网电压跌落、负载突变等工况下快速响应并保持系统稳定。
3. 双环闭环控制算法原理
双环控制的核心思想是外环产生内环的参考指令,内环快速跟踪该指令 。对于并网型 PCS,最经典的结构是外环为功率/直流电压环,内环为电流环。
3.1 坐标系变换:ABC -> dq
为了将交流量转换为直流量进行控制,采用 Park 变换(Clarke + Park)。
- Clarke 变换 (3s/2s):将三相静止坐标系 (ABC) 转换为两相静止坐标系 (αβ)。
- Park 变换 (2s/2r):将 αβ 坐标系旋转,对齐到与电网电压矢量同步的旋转坐标系 (dq)。
- 在 dq 坐标系下,电网基波电压、电流表现为直流量,便于 PI 控制器实现无静差跟踪。
3.2 外环(功率/电压环)设计
- 功能 :根据系统高级指令(如能量管理系统 EMS 下发的
P_ref,Q_ref)或需要稳定的直流电压V_dc_ref,计算出内环电流的参考值i_d_ref和i_q_ref。 - 功率外环 (并网模式):
- 有功功率参考
P_ref决定i_d_ref:i_d_ref = (2/3) * P_ref / V_gd(假设电网电压矢量定向于 d 轴,则V_gq = 0)。 - 无功功率参考
Q_ref决定i_q_ref:i_q_ref = -(2/3) * Q_ref / V_gd。 - 通常,外环采用 PI 控制器,但其输出直接作为电流参考,带宽较低,主要作用是设定稳态工作点。
- 有功功率参考
- 直流电压外环 (稳压模式或离网模式):
- 通过 PI 控制器调节直流电压
V_dc至其参考值V_dc_ref,其输出即为有功电流参考i_d_ref。 - 该环控制直流侧与交流侧的能量平衡。
- 通过 PI 控制器调节直流电压
3.3 内环(电流环)设计
-
功能 :快速、准确地跟踪外环给出的电流参考指令
i_d_ref和i_q_ref,生成变流器所需的电压指令V_d_ref和V_q_ref。 -
数学模型 :在 dq 同步旋转坐标系下,考虑滤波电感,可得状态方程:
L * di_d/dt = V_d - V_gd + ω * L * i_q L * di_q/dt = V_q - V_gq - ω * L * i_d其中,
ω为电网角频率,V_d,V_q为变流器输出电压指令。 -
解耦控制 :方程中存在交叉耦合项
ω*L*i_q和-ω*L*i_d。为了实现 d、q 轴电流的独立控制,引入前馈解耦 :V_d = (V_gd - ω * L * i_q) + u_d V_q = (V_gq + ω * L * i_d) + u_q其中,
u_d和u_q为 PI 控制器的输出。代入原方程后,得到两个独立的一阶系统:L * di_d/dt = u_d L * di_q/dt = u_q -
PI 控制器设计 :针对解耦后的系统,d、q 轴电流环可分别设计为典型的 I 型系统。PI 参数 (
Kp_i,Ki_i) 可根据期望的带宽和阻尼进行整定。
3.4 前馈与抗干扰
- 电网电压前馈 :将
V_gd和V_gq直接加入电压指令,可有效抵消电网电压扰动对电流环的影响,提高动态性能。 - 直流电压前馈 :在某些设计中,会将直流电压
V_dc引入调制波计算,以线性化 PWM 环节。
4. 算法实现步骤与流程
-
信号采样与处理 :采样三相电网电压
V_gabc、三相并网电流i_abc、直流侧电压V_dc。 -
锁相环(PLL) :基于
V_gabc计算电网电压相位角θ和频率ω,用于坐标变换和解耦。 -
坐标变换 :将
V_gabc和i_abc通过 Park 变换得到V_gd,V_gq,i_d,i_q。 -
外环计算 :
- 并网模式:根据
P_ref,Q_ref和V_gd计算i_d_ref,i_q_ref。 - 稳压模式:直流电压外环 PI 控制器根据
V_dc_ref和V_dc计算i_d_ref;i_q_ref通常设为 0 或由无功控制给出。
- 并网模式:根据
-
内环计算 :
-
计算电流误差:
e_d = i_d_ref - i_d,e_q = i_q_ref - i_q。 -
经过电流环 PI 控制器得到
u_d,u_q。 -
加入前馈解耦项和电网电压前馈,得到变流器电压指令
V_d_ref,V_q_ref:V_d_ref = u_d + V_gd - ω * L * i_q V_q_ref = u_q + V_gq + ω * L * i_d
-
-
反 Park 变换 :将
V_d_ref,V_q_ref反变换回两相静止坐标系V_α_ref,V_β_ref。 -
PWM 调制 :采用 空间矢量脉宽调制(SVPWM) 或正弦脉宽调制(SPWM),根据
V_α_ref,V_β_ref和V_dc生成驱动 IGBT 的开关信号。
#mermaid-svg-DwQQ0YfthkFde1j1{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DwQQ0YfthkFde1j1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DwQQ0YfthkFde1j1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DwQQ0YfthkFde1j1 .error-icon{fill:#552222;}#mermaid-svg-DwQQ0YfthkFde1j1 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DwQQ0YfthkFde1j1 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DwQQ0YfthkFde1j1 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DwQQ0YfthkFde1j1 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DwQQ0YfthkFde1j1 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DwQQ0YfthkFde1j1 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DwQQ0YfthkFde1j1 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DwQQ0YfthkFde1j1 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DwQQ0YfthkFde1j1 .marker.cross{stroke:#333333;}#mermaid-svg-DwQQ0YfthkFde1j1 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DwQQ0YfthkFde1j1 p{margin:0;}#mermaid-svg-DwQQ0YfthkFde1j1 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DwQQ0YfthkFde1j1 .cluster-label text{fill:#333;}#mermaid-svg-DwQQ0YfthkFde1j1 .cluster-label span{color:#333;}#mermaid-svg-DwQQ0YfthkFde1j1 .cluster-label span p{background-color:transparent;}#mermaid-svg-DwQQ0YfthkFde1j1 .label text,#mermaid-svg-DwQQ0YfthkFde1j1 span{fill:#333;color:#333;}#mermaid-svg-DwQQ0YfthkFde1j1 .node rect,#mermaid-svg-DwQQ0YfthkFde1j1 .node circle,#mermaid-svg-DwQQ0YfthkFde1j1 .node ellipse,#mermaid-svg-DwQQ0YfthkFde1j1 .node polygon,#mermaid-svg-DwQQ0YfthkFde1j1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DwQQ0YfthkFde1j1 .rough-node .label text,#mermaid-svg-DwQQ0YfthkFde1j1 .node .label text,#mermaid-svg-DwQQ0YfthkFde1j1 .image-shape .label,#mermaid-svg-DwQQ0YfthkFde1j1 .icon-shape .label{text-anchor:middle;}#mermaid-svg-DwQQ0YfthkFde1j1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DwQQ0YfthkFde1j1 .rough-node .label,#mermaid-svg-DwQQ0YfthkFde1j1 .node .label,#mermaid-svg-DwQQ0YfthkFde1j1 .image-shape .label,#mermaid-svg-DwQQ0YfthkFde1j1 .icon-shape .label{text-align:center;}#mermaid-svg-DwQQ0YfthkFde1j1 .node.clickable{cursor:pointer;}#mermaid-svg-DwQQ0YfthkFde1j1 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DwQQ0YfthkFde1j1 .arrowheadPath{fill:#333333;}#mermaid-svg-DwQQ0YfthkFde1j1 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DwQQ0YfthkFde1j1 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DwQQ0YfthkFde1j1 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DwQQ0YfthkFde1j1 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DwQQ0YfthkFde1j1 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DwQQ0YfthkFde1j1 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DwQQ0YfthkFde1j1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DwQQ0YfthkFde1j1 .cluster text{fill:#333;}#mermaid-svg-DwQQ0YfthkFde1j1 .cluster span{color:#333;}#mermaid-svg-DwQQ0YfthkFde1j1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DwQQ0YfthkFde1j1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DwQQ0YfthkFde1j1 rect.text{fill:none;stroke-width:0;}#mermaid-svg-DwQQ0YfthkFde1j1 .icon-shape,#mermaid-svg-DwQQ0YfthkFde1j1 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DwQQ0YfthkFde1j1 .icon-shape p,#mermaid-svg-DwQQ0YfthkFde1j1 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DwQQ0YfthkFde1j1 .icon-shape .label rect,#mermaid-svg-DwQQ0YfthkFde1j1 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DwQQ0YfthkFde1j1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DwQQ0YfthkFde1j1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DwQQ0YfthkFde1j1 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 并网模式
稳压模式
开始采样
锁相环 PLL
获取相位θ与频率ω
坐标变换 Park
V_gabc, i_abc -> V_gdq, i_dq
运行模式?
功率外环
P_ref/Q_ref -> i_dq_ref
直流电压外环
V_dc_ref -> i_d_ref
i_q_ref = 0 或 Q_ref
电流内环 PI 控制
e_dq = i_dq_ref - i_dq -> u_dq
前馈解耦与补偿
V_dq_ref = u_dq + V_gdq ± ωL*i_qd
反 Park 变换
V_dq_ref -> V_αβ_ref
SVPWM 调制
生成 PWM 驱动信号
驱动 IGBT 开关
一个控制周期结束
5. 仿真与代码示例(MATLAB/Simulink 思路)
5.1 仿真模型搭建要点
- 主电路模型:搭建三相两电平 VSC、直流电压源、电网、L 或 LCL 滤波器。
- 控制子系统:封装双环控制算法,包括 PLL、坐标变换、外环、内环、SVPWM 等模块。
- 测试场景:设计阶跃功率指令、电网电压跌落、负载投切等动态测试。
5.2 核心控制代码片段(伪代码风格)
c
// 双环控制核心函数,在中断服务程序中调用 (控制周期 Ts)
void DualLoop_Control(float P_ref, float Q_ref, float Vdc_ref, float Vdc, float Vg_abc[3], float Ig_abc[3]) {
// 1. PLL 获取电网相位 theta 和频率 omega_e
PLL_Update(Vg_abc, &theta, &omega_e);
// 2. Park 变换
Clarke_Park_Transform(Vg_abc, theta, &Vgd, &Vgq);
Clarke_Park_Transform(Ig_abc, theta, &Igd, &Igq);
// 3. 外环:计算电流参考值
if (control_mode == GRID_FEEDING) {
// 功率控制外环
I_ref_d = (2.0f/3.0f) * P_ref / Vgd;
I_ref_q = -(2.0f/3.0f) * Q_ref / Vgd;
} else if (control_mode == DC_VOLTAGE_CONTROL) {
// 直流电压外环 PI
I_ref_d = PI_Controller(&Vdc_PI, Vdc_ref, Vdc);
I_ref_q = 0; // 或根据无功需求设定
}
// 4. 内环:电流 PI 控制 + 前馈解耦
float Ud = PI_Controller(&Id_PI, I_ref_d, Igd);
float Uq = PI_Controller(&Iq_PI, I_ref_q, Igq);
float Vd_ref = Ud + Vgd - omega_e * Lf * Igq; // 解耦与前馈
float Vq_ref = Uq + Vgq + omega_e * Lf * Igd;
// 5. 反 Park 变换
float Valpha_ref, Vbeta_ref;
Inverse_Park_Transform(Vd_ref, Vq_ref, theta, &Valpha_ref, &Vbeta_ref);
// 6. 生成 SVPWM 占空比
SVPWM_Generate(Valpha_ref, Vbeta_ref, Vdc, PWM_duty_cycles);
}
6. 工程实现挑战与优化
- 参数敏感性 :滤波器电感
L的准确值对解耦效果影响大,需在线辨识或自适应调整。 - 延时补偿:数字控制带来的计算延时和 PWM 延时需在前馈或控制器设计中予以补偿。
- LCL 滤波器谐振抑制 :当使用 LCL 滤波器时,需引入有源阻尼 或陷波器来抑制谐振峰,保证系统稳定。
- 过调制与直流电压利用率:在直流电压有限时,需设计过调制算法以提高输出电压能力。
- 弱电网适应性 :在电网阻抗较大时,PLL 和电流环的设计需额外考虑稳定性,可能需采用虚拟阻抗 或自适应控制。
7. 总结
大功率 PCS 的双环闭环控制算法通过外环设定目标、内环快速跟踪 的分层结构,结合同步旋转坐标系下的解耦与前馈 技术,实现了对功率、电流、电压的高性能控制。该方案结构清晰,动态响应快,稳态精度高,是当前工程应用中的黄金标准。然而,其性能极大依赖于精确的系统参数和针对实际工况(如弱电网、非线性负载)的优化设计。未来,与模型预测控制(MPC) 、自适应控制等先进算法结合,将是进一步提升 PCS 性能的重要方向。