1. 项目背景与核心价值
充电桩作为新能源汽车基础设施的核心部件,其直流充电模块的性能直接影响充电效率和安全。艾默生15kW直流充电模块是市面上主流的大功率充电解决方案之一,其DCDC控制软件承担着电能转换的核心职能。这个功率等级的模块常见于城市快充站和高速公路服务区,每天需要完成数百次高负荷充放电循环。
我曾参与过多个充电桩项目的现场调试,发现不同厂商的DCDC控制策略差异会导致3%-8%的能效差距。以日均充电量300度的站点计算,优化后的软件每年可节省近万度电。这就是为什么我们需要深入理解成熟产品的控制逻辑——不仅要看它怎么工作,更要明白为什么这样设计。
2. 硬件架构与软件框架
2.1 主控芯片与拓扑结构
该模块采用TI的TMS320F28377D双核DSP作为主控制器,搭配C2000实时控制外设。功率拓扑采用经典的LLC谐振变换器+全桥整流方案,这种结构在15kW级别能实现96%以上的峰值效率。软件层面最值得关注的是:
- 数字锁相环(DPLL)实现谐振频率跟踪
- 自适应死区时间控制算法
- 多模式切换的软启动策略
提示:调试时建议先关闭自适应死区功能,固定设置为200ns观察波形,避免算法收敛过程干扰故障诊断
2.2 软件模块划分
控制软件采用分层架构,从下到上分为:
- 硬件抽象层(HAL):PWM驱动、ADC采样、保护信号处理
- 实时控制层:电压电流双闭环、均流控制
- 应用层:充电曲线管理、故障自恢复
关键数据结构集中在PowerStage_Obj这个结构体,包含:
c复制typedef struct {
float Vout_meas; // 输出电压采样值
float Iout_meas; // 输出电流采样值
float Phase_shift; // 移相角控制量
uint16_t Fault_flags; // 故障标志位
} PowerStage_Obj;
3. 核心控制算法解析
3.1 移相控制实现细节
模块采用移相全桥(PSFB)控制,通过调节H桥对角开关管的导通重叠时间来控制功率传输。代码中关键控制逻辑:
c复制void PSFB_Control(PowerStage_Obj *stage)
{
// 电压外环计算电流指令
float I_ref = PI_Controller(&Vout_PI, stage->Vout_meas, Vout_set);
// 电流内环计算移相角
stage->Phase_shift = PID_Controller(&Iout_PID, I_ref, stage->Iout_meas);
// 限制移相范围在30°-150°之间
stage->Phase_shift = CLAMP(stage->Phase_shift, 30.0, 150.0);
// 更新PWM寄存器
EPwm1Regs.CMPA.half.CMPA = (uint16_t)(stage->Phase_shift * PWM_PERIOD / 360.0);
}
实测中发现当负载电流超过12A时,需要将PWM频率从100kHz降至80kHz以避免开关损耗剧增。这个切换逻辑藏在Protection_Monitor()函数中。
3.2 均流控制策略
模块支持多达8台并联运行,均流算法采用主从模式+下垂控制。关键参数:
- 通信周期:200μs (CAN总线)
- 均流精度:±2.5%
- 动态响应时间:<10ms
调试时遇到过因CAN终端电阻不匹配导致的均流震荡问题。后来在代码中找到这个补偿函数:
c复制void Current_Sharing_Compensate(float *I_share)
{
// 滤波时间常数与通信延迟补偿
static float hist[3] = {0};
*I_share = 0.6f * (*I_share) + 0.3f * hist[0] + 0.1f * hist[1];
hist[1] = hist[0];
hist[0] = *I_share;
}
4. 故障保护机制
4.1 保护分级策略
软件实现了三级保护体系:
- 初级保护:硬件比较器直接关断PWM(响应时间<2μs)
- 中级保护:软件快速保护中断(响应时间<20μs)
- 高级保护:主循环故障处理(响应时间<100ms)
常见故障代码与处理方法:
| 故障代码 | 可能原因 | 排查步骤 |
|---|---|---|
| 0xE001 | 母线过压 | 检查PFC输出电压采样电阻 |
| 0xE010 | 模块过温 | 清理风扇滤网,检查风道 |
| 0xE101 | 谐振电流异常 | 测量谐振电容容值 |
4.2 软件看门狗设计
系统包含三个独立的看门狗:
- CPU看门狗:监控主循环执行
- PWM看门狗:检测PWM信号异常
- 任务看门狗:确保关键任务按时执行
曾遇到过一个隐蔽bug:当CAN总线负载率超过70%时,任务看门狗会误触发。解决方法是在WDG_Refresh()函数中添加总线状态判断:
c复制if(CAN_GetBusLoad() < 0.7f) {
WDG_Clear(TASK_WDG);
}
5. 调试与优化经验
5.1 效率优化技巧
通过修改以下参数可提升0.5%-1.2%效率:
- 将死区时间从默认300ns优化为:
- 轻载(20%以下):350ns
- 中载(20%-80%):250ns
- 重载(80%以上):200ns
- 调整LLC谐振点偏移量,在90%负载时让fs略高于fr
- 优化散热风扇控制曲线,降低30%转速可减少2W损耗
5.2 现场问题排查实录
案例1:模块频繁报E001故障
- 现象:空载正常,带载后随机保护
- 排查:用差分探头测量PFC输出电压,发现采样电路存在10MHz振荡
- 解决:在ADC输入端增加100pF滤波电容
案例2:并联运行时电流震荡
- 现象:两台模块电流差周期性波动
- 排查:用逻辑分析仪抓取CAN报文,发现同步信号抖动
- 解决:修改
Sync_Signal_Process()函数中的滤波时间常数
6. 软件升级与功能扩展
该模块支持通过U盘进行固件升级,升级包结构如下:
code复制Firmware.bin
├── Header (256字节)
│ ├── 版本号
│ ├── CRC校验
│ └── 升级标志
└── 数据区
├── Bootloader
├── 应用程序
└── 参数区
在V2.3版本后增加了充电曲线自定义功能,可通过修改Charge_Profile.csv实现:
code复制SOC%, Voltage, Current
0, 300, 15.0
20, 400, 15.0
80, 500, 10.0
100, 550, 3.0
实际项目中,我们曾利用这个特性为出租车队开发了快充模式——在SOC<50%时允许1.2倍额定电流运行,配合散热系统改造后充电时间缩短18%。