1. 项目概述
作为一名电力电子工程师,我最近在研究储能系统相关的技术。储能变流器(PCS)作为连接电网和储能电池的关键设备,其性能直接影响整个储能系统的效率与稳定性。这次我尝试复现的是双向储能变流器的Buck-Boost闭环控制仿真,参考的是《储能电站变流器设计与仿真研究_尹世界》这篇文献。
这个项目主要包含两个核心部分:三相PWM变流器控制和储能双向变换器控制。前者负责电网侧的交直流转换,后者则实现直流母线与电池之间的能量双向流动。通过这个仿真,我们可以验证控制策略的有效性,优化控制参数,为实际硬件设计提供理论依据。
2. 系统架构与工作原理
2.1 整体系统架构
整个PCS系统由以下几个关键部分组成:
- 三相PWM变流器(AC/DC)
- 双向DC/DC变换器
- 直流母线电容
- 电池储能系统
- 控制系统(包括电压环、电流环等)
能量可以双向流动:电网→直流母线→电池(充电模式),或者电池→直流母线→电网(放电模式)。这种双向能量流动能力是储能系统的核心特性。
2.2 三相PWM变流器工作原理
三相PWM变流器采用电压外环、电流内环的双闭环控制结构:
- 电压外环:维持直流母线电压稳定在700V
- 电流内环:快速跟踪电流指令,实现功率因数控制
控制策略中加入了电网电压前馈和电容电流前馈,可以提高系统的动态响应。电感电流解耦技术则解决了dq轴之间的耦合问题,使控制更加精确。
2.3 双向DC/DC变换器工作原理
双向DC/DC变换器采用Buck-Boost拓扑,能够实现升降压功能。通过电流PID控制,可以实现:
- 充电模式(Buck):将直流母线高压转换为适合电池的充电电压
- 放电模式(Boost):将电池电压升高到直流母线电压水平
3. 控制算法实现细节
3.1 电压外环PI控制实现
电压外环PI控制器的Python实现如下:
python复制class VoltagePI:
def __init__(self, kp, ki):
self.kp = kp # 比例系数
self.ki = ki # 积分系数
self.integral = 0 # 积分项
self.prev_error = 0 # 上一次误差
def update(self, setpoint, feedback):
error = setpoint - feedback
self.integral += error
# 抗积分饱和处理
self.integral = np.clip(self.integral, -100, 100)
p_term = self.kp * error
i_term = self.ki * self.integral
output = p_term + i_term
self.prev_error = error
return output
关键点说明:
- 比例系数(kp)决定系统对误差的快速响应能力
- 积分系数(ki)用于消除稳态误差
- 加入了抗积分饱和措施,防止控制器输出过大
- 采样周期需要与仿真步长匹配
3.2 电流内环PI控制实现
电流内环在电压外环的基础上增加了前馈和解耦控制:
python复制class CurrentPI:
def __init__(self, kp, ki):
self.kp = kp
self.ki = ki
self.integral_d = 0 # d轴积分项
self.integral_q = 0 # q轴积分项
def update(self, id_ref, iq_ref, id_fb, iq_fb, w, L):
# d轴控制
error_d = id_ref - id_fb
self.integral_d += error_d
ud = self.kp * error_d + self.ki * self.integral_d - w * L * iq_fb
# q轴控制
error_q = iq_ref - iq_fb
self.integral_q += error_q
uq = self.kp * error_q + self.ki * self.integral_q + w * L * id_fb
return ud, uq
这个实现中:
- 考虑了dq轴的解耦项(wLiq和wLid)
- 分别对d轴和q轴电流进行独立控制
- 前馈补偿可以提高动态响应速度
3.3 SVPWM调制实现
空间矢量PWM(SVPWM)的实现步骤如下:
- 将三相电压转换到αβ坐标系
- 确定当前电压矢量所在的扇区
- 计算相邻基本矢量的作用时间
- 生成PWM波形
python复制def svpwm(u_alpha, u_beta, Vdc, Tpwm):
# 计算电压矢量幅值和角度
U = np.sqrt(u_alpha**2 + u_beta**2)
theta = np.arctan2(u_beta, u_alpha)
# 确定扇区
sector = int(theta // (np.pi/3)) % 6
# 计算基本矢量作用时间
# ...详细计算过程省略...
# 生成PWM占空比
ta = (T1 + T2) / Tpwm
tb = (T2) / Tpwm
tc = 0
return ta, tb, tc
4. 双向DC/DC变换器控制
4.1 电流PID控制器实现
双向DC/DC变换器采用PID控制实现电流环:
python复制class CurrentPID:
def __init__(self, kp, ki, kd, Ts):
self.kp = kp
self.ki = ki
self.kd = kd
self.Ts = Ts # 采样周期
self.integral = 0
self.prev_error = 0
self.prev_output = 0
def update(self, setpoint, feedback):
error = setpoint - feedback
# 比例项
p_term = self.kp * error
# 积分项(带抗饱和)
self.integral += error * self.Ts
self.integral = np.clip(self.integral, -1, 1)
i_term = self.ki * self.integral
# 微分项(带滤波)
d_term = self.kd * (error - self.prev_error) / self.Ts
# 输出限幅
output = p_term + i_term + d_term
output = np.clip(output, -1, 1)
self.prev_error = error
self.prev_output = output
return output
注意事项:
- 微分项容易引入高频噪声,实际中常加入低通滤波
- 输出限幅可以保护功率器件
- 采样周期Ts需要与实际控制周期一致
4.2 工作模式切换逻辑
双向变换器需要在充电和放电模式间平滑切换:
python复制class ModeSwitcher:
def __init__(self):
self.current_mode = 'standby'
self.transition_timer = 0
def update(self, command, current, voltage):
if command == 'charge' and self.current_mode != 'charge':
if self.transition_timer < TRANSITION_TIME:
# 渐变过渡
self.transition_timer += Ts
return 'transition'
else:
self.current_mode = 'charge'
return 'charge'
# 其他模式切换逻辑类似...
5. 仿真实现与结果分析
5.1 仿真参数设置
关键仿真参数如下表所示:
| 参数名称 | 数值 | 单位 | 说明 |
|---|---|---|---|
| 直流母线电压 | 700 | V | 电压环设定值 |
| 电网电压 | 380 | V | 线电压有效值 |
| 开关频率 | 10 | kHz | PWM载波频率 |
| 滤波电感 | 2 | mH | 网侧电感 |
| 直流电容 | 2200 | μF | 母线支撑电容 |
5.2 仿真工况设置
仿真分为三个阶段:
-
0.0-0.1s:待机模式
- 所有控制器输出为零
- 系统保持初始状态
-
0.1-0.3s:充电模式
- 充电功率12kW
- 对应充电电流约17.14A(700V母线)
-
0.3-0.5s:放电模式
- 放电功率20kW
- 对应放电电流约28.57A
5.3 仿真波形分析
通过仿真我们可以观察到以下关键波形:
-
直流母线电压:
- 在模式切换时的动态响应
- 稳态时的电压纹波
-
电池电流:
- 充电/放电电流的跟踪性能
- 模式切换时的过渡过程
-
电网电流:
- 单位功率因数控制效果
- 谐波含量分析
实际调试中发现,PI参数对系统性能影响很大。经过多次调整,最终确定的电压环参数为kp=0.5,ki=10;电流环参数为kp=0.8,ki=50。
6. 常见问题与调试技巧
6.1 系统振荡问题
现象:系统在某些工况下出现明显振荡
可能原因:
- PI参数过于激进
- 解耦不充分
- 采样延迟过大
解决方案:
- 先调低比例系数,再慢慢增加
- 检查解耦算法实现是否正确
- 增加采样频率或引入预测补偿
6.2 模式切换冲击
现象:充放电模式切换时电流冲击过大
解决方法:
- 加入过渡渐变算法
- 设置合理的切换时序
- 加入电流限幅保护
6.3 SVPWM实现问题
常见错误:
- 扇区判断错误
- 作用时间计算错误
- 没有考虑死区时间
调试建议:
- 先用固定矢量测试各扇区
- 逐步验证时间计算
- 实际硬件中必须加入死区
7. 参数整定经验分享
通过这次仿真,我总结出以下参数整定经验:
- 先调电压外环,再调电流内环
- 先调比例系数,再调积分系数
- 动态性能与稳定性需要折中
- 实际系统中要考虑数字控制延迟
对于这个系统,经过多次尝试,最终确定的较优参数为:
- 电压环:kp=0.5,ki=10
- 电流环:kp=0.8,ki=50
- 双向DC/DC电流环:kp=0.3,ki=5,kd=0.01
8. 实际工程应用建议
基于仿真结果,在实际工程应用中建议:
- 加入软启动功能,避免上电冲击
- 实现无缝模式切换算法
- 加入完善的保护功能(过压、过流等)
- 考虑效率优化,如变开关频率控制
- 做好热设计,特别是功率器件散热
在实际调试中,我发现数字控制的延迟会显著影响系统性能,因此建议:
- 尽量提高控制频率
- 采用预测控制等先进算法补偿延迟
- 优化中断处理流程,减少计算延迟