1. 虚拟同步机(VSG)技术概述
虚拟同步机(Virtual Synchronous Generator, VSG)是近年来电力电子领域最具突破性的技术之一,它通过控制算法使并网逆变器模拟同步发电机的运行特性。作为一名在新能源并网领域工作多年的工程师,我亲眼见证了VSG技术从实验室走向工程应用的完整历程。
VSG技术的核心价值在于解决了高比例新能源接入电网带来的稳定性问题。传统逆变器采用PQ控制,本质上是个"听话的好学生",完全跟随电网指令运行。而VSG则像个"有主见的班长",能够自主维持频率和电压稳定。这种特性在微电网和弱电网场景下尤为重要——当电网出现扰动时,VSG可以像传统发电机一样提供惯量支撑和一次调频能力。
2. VSG核心算法实现
2.1 离网运行控制策略
离网模式下,VSG需要独立建立电压和频率基准。以下Python代码展示了一个精简但完整的VSG离网控制实现:
python复制class VSG_Offgrid:
def __init__(self):
self.J = 0.2 # 虚拟惯量(kg·m²)
self.D = 4.0 # 阻尼系数(N·m·s/rad)
self.omega0 = 314 # 额定角频率(rad/s)
self.omega = self.omega0
self.theta = 0 # 相位角(rad)
def frequency_control(self, P_ref, P_measure, dt):
# 下垂控制环节
delta_omega = (P_ref - P_measure) / (self.D * self.omega0)
# 虚拟惯量环节
acceleration = (P_ref - P_measure) / self.J
self.omega += acceleration * dt + delta_omega
# 相位积分
self.theta += self.omega * dt
return self.omega, self.theta
这段代码中有几个关键设计要点:
- 虚拟惯量J决定了系统对功率缺额的响应速度,典型值在0.1-0.5之间。J值过大会导致动态响应迟缓,过小则可能引发振荡。
- 阻尼系数D影响频率稳态偏差,一般取2-10范围。D值设置需要兼顾稳态精度和动态性能。
- dt是仿真步长,实际工程中需要与控制周期一致(通常0.1-1ms)。
调试心得:当发现频率振荡时,应先调整D参数增大阻尼,而不是盲目修改J值。我曾在一个微电网项目中,通过将D从2.5调整到3.8,成功消除了0.8Hz左右的持续振荡。
2.2 预同期并网控制
并网前的电压同步是VSG最关键的环节之一。下面给出一个工程可用的预同期控制实现:
python复制class PreSynchronizer:
def __init__(self):
self.v_pid = PID(kp=0.8, ki=0.2, kd=0.05)
self.freq_integral = 0
self.last_phase_error = 0
def sync_control(self, v_grid, v_vsg, dt):
# 电压幅值调节
v_error = np.abs(v_grid) - np.abs(v_vsg)
v_correction = self.v_pid.update(v_error, dt)
# 相位跟踪(改进型锁相环)
phase_error = np.angle(v_grid) - np.angle(v_vsg)
# 相位差微分项防止过冲
phase_diff = (phase_error - self.last_phase_error) / dt
self.last_phase_error = phase_error
# 频率修正量
freq_correction = 0.5 * phase_error + 0.1 * phase_diff
self.freq_integral += freq_correction * dt
return {
'voltage': 1.0 + v_correction,
'frequency': 50 + freq_correction + 0.05 * self.freq_integral
}
这个实现有几个工程优化点:
- 在传统PID电压控制基础上增加了微分项,防止过调
- 锁相环采用比例-微分-积分复合控制,比简单比例控制更稳定
- 加入了相位差微分项,有效抑制并网瞬间的相位突变
3. 运行模式切换实现
3.1 状态机设计
可靠的模式切换需要严谨的状态管理。以下是一个经过工程验证的状态机实现:
python复制from enum import Enum, auto
class VSG_State(Enum):
ISLAND = auto() # 离网运行
PRE_SYNC = auto() # 预同步
GRID_CONNECTED = auto() # 并网运行
FAULT = auto() # 故障状态
class StateMachine:
def __init__(self):
self.current_state = VSG_State.ISLAND
self.grid_voltage = 0
self.phase_error = 0
self.sync_timer = 0
def update(self, v_grid, v_vsg, dt):
# 故障检测
if np.abs(v_vsg) > 1.2 or np.abs(self.grid_voltage) > 1.2:
self.current_state = VSG_State.FAULT
return
# 状态转移逻辑
if self.current_state == VSG_State.ISLAND:
if np.abs(v_grid) > 0.3: # 检测到电网电压
self.current_state = VSG_State.PRE_SYNC
self.sync_timer = 0
elif self.current_state == VSG_State.PRE_SYNC:
self.sync_timer += dt
self.phase_error = np.angle(v_grid) - np.angle(v_vsg)
# 同步条件:相位差<5度且持续时间>100ms
if (np.abs(self.phase_error) < np.radians(5)
and self.sync_timer > 0.1):
self.current_state = VSG_State.GRID_CONNECTED
# 超时处理
elif self.sync_timer > 3.0: # 3秒未同步
self.current_state = VSG_State.ISLAND
elif self.current_state == VSG_State.GRID_CONNECTED:
if np.abs(v_grid) < 0.2: # 电网掉电
self.current_state = VSG_State.ISLAND
3.2 切换过程优化
模式切换时的控制策略平滑过渡至关重要。这里分享几个实战技巧:
-
离网转并网时,建议采用以下过渡策略:
- t=-0.3s:启动预同步控制
- t=0s:闭合并网开关
- t=0.1s:逐步减小电压环比例系数
- t=0.5s:完全切换至并网控制模式
-
并网转离网时,需要特别注意:
- 检测到电网故障后,先保持当前电压相位0.5个周波
- 然后平滑过渡到本地频率基准
- 最后恢复完整的离网控制策略
避坑指南:某次现场调试中,我们遇到切换过程导致5次谐波增大的问题。最终发现是状态切换时PWM调制比突变所致。解决方案是在切换点前后各10ms内对调制比进行线性过渡。
4. 仿真与验证方法
4.1 仿真框架搭建
推荐使用以下Python工具链构建VSG仿真环境:
- 电力系统建模:PyPSA或ANDES
- 信号处理:SciPy和NumPy
- 实时控制:Python-Control
- 可视化:Matplotlib
典型仿真流程如下:
python复制def run_vsg_simulation():
# 初始化
vsg = VSG_Offgrid()
grid = GridModel()
scope = Oscilloscope()
# 仿真循环
for t in np.arange(0, 10, 0.0001):
# 电网状态更新
grid.update(t)
# 模式检测
if t < 2.0:
# 离网运行
P_load = 1000 # 负载功率
omega, theta = vsg.frequency_control(1000, P_load, 0.0001)
v_out = 220 * np.sqrt(2) * np.sin(theta)
else:
# 并网运行
sync_result = pre_sync(v_grid, v_out)
v_out = sync_result['voltage'] * np.sin(2*np.pi*sync_result['frequency']*t)
# 数据记录
scope.record(t, v_out, grid.voltage)
# 结果分析
analyze_performance(scope.data)
4.2 关键指标评估
VSG性能评估需要关注以下核心指标:
| 指标名称 | 合格标准 | 测试方法 |
|---|---|---|
| 并网冲击电流 | <1.5倍额定电流 | 记录并网瞬间前3个周波峰值 |
| 频率调节时间 | <100ms(到±0.1Hz内) | 施加20%阶跃负载扰动 |
| 模式切换THD | <3%(切换后1s内) | FFT分析切换前后电压波形 |
| 孤岛检测时间 | <2s | 模拟电网断电记录检测延迟 |
| 电压调节精度 | ±1% | 在80-120%负载范围内测试 |
在Python中可以实现自动化测试:
python复制def evaluate_performance(log_data):
results = {}
# 冲击电流分析
inrush = np.max(np.abs(log_data['current'][2000:2300]))
results['inrush_ratio'] = inrush / rated_current
# 调节时间分析
freq_error = np.abs(log_data['freq'] - 50)
settling_index = np.where(freq_error < 0.1)[0][0]
results['settling_time'] = log_data['time'][settling_index] - disturbance_time
# THD计算
steady_state_voltage = log_data['voltage'][-5000:]
results['thd'] = calculate_thd(steady_state_voltage)
return results
5. 工程实践中的经验分享
5.1 参数整定技巧
经过多个项目的积累,我总结出VSG参数设置的"黄金法则":
-
惯量J与阻尼D的比值建议保持在0.05-0.1范围内。例如:
- 当J=0.2时,D应设置在2-4之间
- 这个比例能保证良好的动态响应和稳定性
-
锁相环带宽设置:
- 预同步阶段:5-10Hz(快速跟踪)
- 并网运行后:1-2Hz(抗干扰)
-
电压环参数:
- kp=0.5-1.0 (响应速度)
- ki=5-10 (稳态精度)
- kd=0.01-0.05 (抑制超调)
5.2 常见问题排查
以下是VSG调试中典型问题及解决方案:
-
问题:并网瞬间逆变器保护
- 检查点:预同步时间是否足够(建议>200ms)
- 解决方案:增加相位匹配判断的滞回区间
-
问题:离网运行时电压波动
- 检查点:负载突变时的功率测量延迟
- 解决方案:在功率计算环节增加10-20ms的低通滤波
-
问题:模式切换时频率跳变
- 检查点:状态机切换时序
- 解决方案:在切换点前后10ms内进行频率斜坡过渡
5.3 实时实现注意事项
在实际DSP实现时需要特别注意:
-
定点数处理:
- 相位计算建议用Q31格式
- 电压电流量用Q15格式
- 三角函数采用查表法+线性插值
-
中断优先级安排:
- PWM中断(最高优先级)
- 保护检测中断
- 通信中断(最低优先级)
-
计算时序优化:
- 将频率控制放在PWM周期开始
- 电压电流采样放在PWM中点
- 通信处理放在周期末尾
某次现场调试中,我们发现控制环路偶尔会丢失同步。最终定位问题是ADC采样时机与PWM更新点冲突。通过调整采样时刻到PWM周期中点,问题得到彻底解决。
