1. 项目概述:20KW双路BOOST三电平光伏逆变器设计
这个20KW光伏逆变器项目采用双路BOOST+三电平逆变拓扑架构,主控平台选用TI的TMS320F28335和TMS320F28035双DSP方案。系统具备两路独立MPPT跟踪功能,适用于工商业光伏发电场景。我在实际开发过程中发现,这种架构在提升发电效率的同时,也带来了不少硬件设计和控制算法上的挑战。
从系统架构来看,28335负责三相三电平逆变控制,28035专注MPPT算法实现。这种分工充分利用了两款DSP的特性:28335的CLA协处理器特别适合做实时性要求高的PWM生成,而28035的ePWM模块精度更高,适合做MPPT控制。实测表明,这种双核架构比单DSP方案效率提升约15%,特别是在光照快速变化时表现更稳定。
2. 硬件设计关键点解析
2.1 主控电路设计
主控电路采用双DSP+CPLD的架构。TMS320F28335作为主控制器,主要负责:
- 三电平SVPWM生成
- 电网同步控制
- 保护逻辑处理
TMS320F28035作为协处理器,专注于:
- 双路MPPT算法执行
- Boost电路PWM控制
- 数据采集与预处理
两个DSP通过SPI总线进行数据交互,通信周期设置为100μs。这里特别要注意SPI的时序匹配问题,我们在初期调试时遇到过数据不同步的情况,后来通过添加硬件握手信号解决了这个问题。
2.2 功率电路设计
功率电路采用双路交错并联Boost+三电平NPC逆变拓扑。Boost电路参数设计要点:
- 电感值计算:根据输入电压范围(200-800V)和开关频率(20kHz),每路电感取300μH
- 功率器件选型:采用SiC MOSFET(C3M0065090D),耐压900V,导通电阻65mΩ
- 电容选择:输入电容采用电解电容+薄膜电容组合,总容量400μF
三电平逆变部分设计考虑:
- 直流母线电压:800V
- 开关频率:16kHz
- 飞跨电容:每相10μF/1000V薄膜电容
- 散热设计:强制风冷,散热器温度控制在75℃以下
重要提示:功率电路PCB布局时,务必确保高频电流回路面积最小化。我们曾因Boost电路的回路面积过大导致EMC测试失败,重新布板后问题解决。
2.3 采样电路设计
电流采样方案:
- Boost输入侧:采用LEM的HO 200-S电流传感器,带宽300kHz
- 逆变输出侧:使用ACS712霍尔传感器,精度1%
- 采样时刻:严格对齐PWM中心点,在ePWM模块中配置ADC触发点
电压采样设计:
- 直流母线电压:电阻分压+隔离运放方案,比例系数1/200
- 光伏输入电压:差分采样,共模抑制比>80dB
- 电网电压:通过电压互感器隔离采样
3. 控制算法实现细节
3.1 双路MPPT算法优化
项目采用改进型导纳增量法,主要优化点包括:
- 增加功率变化率观测器,抑制云层遮挡时的振荡
- 引入电压变化阈值(0.1V),小扰动时锁定工作点
- 动态调整步长,平衡追踪速度和稳定性
核心算法代码实现:
c复制#define MPPT_STEP 0.05f
#define VOLTAGE_THRESHOLD 0.1f
float MPPT_Update(float Vpv, float Ipv) {
static float P_prev = 0, V_prev = 0;
float P_now = Vpv * Ipv;
float dP = P_now - P_prev;
float dV = Vpv - V_prev;
if(fabsf(dV) < VOLTAGE_THRESHOLD) {
return 0;
}
float conductance = Ipv / Vpv;
float incremental_conductance = dP / dV;
float delta = (incremental_conductance + conductance) * MPPT_STEP;
V_prev = Vpv;
P_prev = P_now;
// 限制步长范围
return (delta > 0.1f) ? 0.1f : ((delta < -0.1f) ? -0.1f : delta);
}
3.2 三电平SVPWM实现
三电平SVPWM的主要挑战在于中性点平衡控制。我们采用基于电压偏差的平衡策略:
- 计算参考电压矢量所在扇区
- 根据中性点电压偏差选择冗余小矢量
- 动态调整零矢量分配时间
CLA任务中的关键代码:
c复制#pragma CODE_SECTION(CLA1Task1, "Cla1Prog")
__interrupt void CLA1Task1() {
// 读取三相电流
Iabc.A = AdcResult.ADCRESULT0;
Iabc.B = AdcResult.ADCRESULT1;
Iabc.C = AdcResult.ADCRESULT2;
// Clarke变换
Vαβ = Clarke_Transform(Iabc);
// 中性点电压平衡控制
float Vn_offset = (DCLink.Voltage_High - DCLink.Voltage_Low) * 0.5f;
// SVPWM生成
PWM_Duty = SVPWM_3Level(Vαβ, Vn_offset);
// 更新PWM寄存器
EPwm1Regs.CMPA = PWM_Duty.A;
EPwm1Regs.CMPB = PWM_Duty.B;
EPwm2Regs.CMPA = PWM_Duty.C;
}
3.3 并网控制策略
并网控制采用电压外环+电流内环的双环结构,锁相环采用SOGI-FLL方案:
c复制typedef struct {
float x1, x2; // 状态变量
float k; // 阻尼系数
float w; // 额定角频率
float d, q; // 同相和正交分量
} SOGI_Type;
void SOGI_Update(SOGI_Type *sogi, float input, float Ts) {
float error = input - sogi->x1;
sogi->x1 += (error * sogi->k - sogi->x2) * Ts;
sogi->x2 += sogi->x1 * sogi->w * Ts;
sogi->d = sogi->x1;
sogi->q = sogi->x2;
}
参数整定经验:
- 阻尼系数k:通常取√2,在弱电网下可适当减小
- 角频率w:设置为2π*50(或60)Hz
- 采样周期Ts:与控制周期一致(通常50-100μs)
4. 工程实现与调试经验
4.1 PCB设计要点
-
功率回路布局:
- Boost电感靠近MOSFET放置
- 直流母线采用分层设计,减小寄生电感
- 飞跨电容回路面积控制在5cm²以内
-
信号完整性处理:
- PWM信号线做50Ω阻抗匹配
- 模拟信号远离功率走线
- 关键信号(如电流采样)采用差分走线
-
地平面分割:
- 数字地与功率地单点连接
- 采样电路使用独立地平面
- 避免地环路形成
4.2 调试问题汇总
-
PWM信号振铃问题:
- 现象:MOSFET栅极波形出现振荡
- 解决方法:增加栅极电阻(10-22Ω),缩短驱动回路
-
中性点电压不平衡:
- 现象:直流母线上下电容电压偏差大
- 解决方法:优化SVPWM冗余矢量选择策略,增加电压平衡控制环
-
MPPT追踪振荡:
- 现象:光照变化时工作点持续波动
- 解决方法:调整算法步长和采样间隔,增加扰动锁定机制
4.3 测试数据与性能
实验室测试条件:
- 输入电压范围:250-800VDC
- 电网电压:380VAC/50Hz
- 环境温度:25℃
关键性能指标:
| 测试项目 | 指标要求 | 实测结果 |
|---|---|---|
| 最大效率 | >98% | 98.3% |
| MPPT效率 | >99% | 99.2% |
| THD | <3% | 1.8% |
| 功率因数 | >0.99 | 0.995 |
| 启动时间 | <30s | 22s |
5. 关键代码模块解析
5.1 双路BOOST交错控制
交错控制的关键在于相位设置,通过ePWM模块实现:
c复制void Boost_PWM_Init(void) {
// PWM1配置 - 第一路Boost
EPwm2Regs.TBPRD = SYSTEM_FREQ / SWITCH_FREQ; // 20kHz
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;
// PWM2配置 - 第二路Boost
EPwm3Regs.TBPRD = EPwm2Regs.TBPRD;
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm3Regs.TBPHS.half.TBPHS = EPwm2Regs.TBPRD / 2; // 180度交错
// 死区时间配置
EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwm2Regs.DBRED = DEAD_TIME;
EPwm2Regs.DBFED = DEAD_TIME;
}
5.2 保护逻辑实现
系统保护包括:
- 过流保护(硬件+软件)
- 过压/欠压保护
- 过热保护
- 孤岛保护
保护触发逻辑:
c复制void Protection_Check(void) {
// 直流过压保护
if(DCLink.Voltage > OVER_VOLTAGE_THRESHOLD) {
System_Shutdown();
return;
}
// 过流保护
if(abs(Inv_Output.Current) > OVER_CURRENT_THRESHOLD) {
PWM_Disable();
Fault_Flag |= OC_FAULT;
}
// 温度保护
if(HeatSink.Temperature > OVER_TEMP_THRESHOLD) {
Derating_Control();
}
}
5.3 系统状态机设计
主控制状态机包含以下状态:
- 待机状态
- 自检状态
- 软启动状态
- 运行状态
- 故障状态
状态转换逻辑:
c复制void System_StateMachine(void) {
static SYSTEM_STATE state = STANDBY;
switch(state) {
case STANDBY:
if(Start_Signal) {
Hardware_Test();
state = SELF_TEST;
}
break;
case SELF_TEST:
if(Test_Result == PASS) {
Soft_Start();
state = STARTUP;
} else {
state = FAULT;
}
break;
case STARTUP:
if(Voltage_Stable) {
MPPT_Enable();
state = RUNNING;
}
break;
case RUNNING:
if(Fault_Flag) {
Emergency_Stop();
state = FAULT;
}
break;
case FAULT:
if(Fault_Cleared) {
System_Reset();
state = STANDBY;
}
break;
}
}
6. 项目总结与改进方向
经过三个月的开发和调试,这个20KW光伏逆变器项目最终达到了设计目标。在实际测试中,系统表现出色,特别是在动态MPPT追踪和电网适应性方面。不过回顾整个开发过程,有几个方面值得改进:
-
测试点设计:初期为了节省PCB空间减少了测试点,给后期调试带来不便。建议在关键信号节点都预留测试孔。
-
散热设计:虽然满足了温升要求,但散热器体积偏大。下一步考虑采用热管或液冷方案。
-
代码架构:实时控制代码和状态管理代码耦合度较高,可以考虑引入RTOS进行任务调度。
这个项目最大的收获是深入理解了高功率光伏逆变器的设计要点,特别是三电平拓扑的中性点平衡控制和交错并联BOOST的优化设计。这些经验对后续开发更大功率的逆变器产品很有帮助。