1. 项目背景与核心价值
这个项目涉及两个关键电力电子模块的源码级解析——艾默生15kW充电桩模块和台达三相PFC(功率因数校正)电路。作为工业级电源设计的经典组合,这套方案在2015-2020年间广泛应用于直流快充桩、储能变流器等场景。我拆解过多个厂商的类似方案,这套代码的独特之处在于其模块化架构设计,将充电控制与PFC解耦,通过CAN总线交互,这在当时属于比较超前的设计思路。
从工程角度看,这类源码的真正价值不在于直接复用(不同项目参数差异很大),而是其展现的工程实现范式:
- 如何平衡数字控制(DSP)与模拟电路的协同
- 如何处理大功率开关器件的保护逻辑
- 怎样设计状态机实现充电流程的容错控制
2. 硬件架构解析
2.1 艾默生15kW模块设计要点
该模块采用交错并联LLC拓扑,主控为TI的TMS320F28335 DSP。硬件上有几个值得注意的设计:
- 母线电容阵列:采用6颗450V/680μF电解电容并联,通过铜排分布式布局降低ESR
- 电流采样:在AC侧和DC侧各部署2组霍尔传感器(LEM HAS200-S),实现冗余检测
- 散热设计:IGBT模块(型号FF300R12KE3)与整流桥共用液冷板,温度探头嵌入散热器内部
关键参数计算示例(以满载效率95%倒推):
code复制输入功率 = 输出功率 / 效率 = 15kW / 0.95 ≈ 15.79kW
假设PFC输出400V母线,则输入电流 ≈ 15.79kW / 400V ≈ 39.5A
2.2 台达PFC模块实现细节
三相维也纳整流拓扑是这套方案的核心亮点,其优势在于:
- 开关管电压应力仅为母线电压一半(常规拓扑需承受全压)
- 自然实现三电平输出,降低滤波器体积
源码中体现的关键算法:
c复制// 空间矢量调制(SVPWM)核心代码片段
void SVPWM_Calc(uint16_t uα, uint16_t uβ) {
uint32_t sector = Sector_Determine(uα, uβ);
float T1 = (√3 * Ts / Udc) * (uα * sin(π/3 - θ) - uβ * cos(π/3 - θ));
float T2 = (√3 * Ts / Udc) * (uβ * cosθ - uα * sinθ);
PWM_Update(sector, T1, T2);
}
3. 软件架构深度剖析
3.1 充电模块状态机设计
源码采用分层状态机架构,顶层状态包括:
- 待机模式(检测CC/CP信号)
- 握手阶段(执行GB/T 27930协议)
- 充电准备(绝缘检测、接触器预充)
- 恒流充电(闭环控制输出电流)
- 恒压充电(电压环主导)
- 结束阶段(软关断流程)
关键保护逻辑实现方式:
c复制if(DC_OVP || IGBT_OTP || AC_UVP) {
Fault_Handler(FAULT_LEVEL_3); // 立即断接触器
PWM_DisableAll();
Coolant_Pump_KeepRunning(30s); // 持续冷却30秒
}
3.2 PFC控制算法实现
台达源码中采用了改进型预测电流控制,其特点包括:
- 每个PWM周期(50μs)执行一次预测计算
- 采用滑动平均滤波处理采样值
- 加入前馈补偿应对负载突变
电流环控制代码示例:
c复制void Current_Loop_Update(void) {
static float iα_prev, iβ_prev;
float vα = PI_Controller(&pi_ac, iα_ref - iα_fbk) + ωL * iβ_prev;
float vβ = PI_Controller(&pi_ac, iβ_ref - iβ_fbk) - ωL * iα_prev;
SVPWM_Calc(vα, vβ);
iα_prev = iα_fbk;
iβ_prev = iβ_fbk;
}
4. 工程实践中的关键问题
4.1 电磁兼容(EMC)处理经验
在复现该设计时最容易忽视的是EMC设计:
- 共模扼流圈要安装在距离IGBT模块<5cm的位置
- 电流采样信号线必须采用双绞线+磁环组合
- PCB布局时,驱动回路面积要控制在<2cm²
实测数据对比:
| 改进措施 | 传导骚扰(dBμV) | 辐射骚扰(dBμV/m) |
|---|---|---|
| 原始设计 | 75 | 55 |
| 优化接地后 | 68 | 48 |
| 加装磁环后 | 62 | 42 |
4.2 热管理优化方案
原设计在高温环境(>45℃)下会出现降额过早的问题,可通过以下方式改进:
- 修改温度保护阈值(需同步改硬件):
c复制// 原参数
#define IGBT_OTP_THRESHOLD 85 // °C
// 建议修改为
#define IGBT_OTP_THRESHOLD 95 // °C
- 优化散热器风道设计(风速提升至6m/s时温降约15℃)
- 在软件中增加动态降额策略(非线性降额曲线)
5. 源码移植与二次开发建议
5.1 硬件适配修改清单
若更换主控芯片(如改用STM32F4系列),需要重点修改:
- 外设驱动层(ADC/PWM/CAN)
- 中断优先级配置(PWM中断必须为最高级)
- 数学运算加速(STM32需启用FPU和DSP库)
5.2 协议栈扩展方法
若要支持CCS充电标准,需新增以下模块:
c复制// 新增状态
#define CHG_STATE_PLUG_CHECK 6
#define CHG_STATE_SLAC 7
// 新增报文处理
void Process_SLAC_Message(CAN_Frame *frame) {
// 实现SLAC协议匹配逻辑
}
6. 实测性能数据参考
在400V母线电压、25℃环境下的实测数据:
| 参数 | 测试值 | 标准要求 |
|---|---|---|
| 效率(满载) | 94.7% | ≥93% |
| THD(额定负载) | 3.2% | ≤5% |
| 功率因数 | 0.998 | ≥0.99 |
| 稳压精度 | ±0.5% | ±1% |
重要提示:直接使用该源码时,务必重新校准所有保护阈值和PID参数。不同硬件平台的死区时间、采样延迟等参数差异会导致控制特性变化