1. 项目背景与行业现状
直流充电桩作为新能源汽车基础设施的核心部件,其主控系统的设计直接关系到充电效率、安全性和用户体验。当前市场上主流30kW-120kW直流桩普遍采用STM32F4/F7系列作为主控芯片,搭配CAN总线通信和多种安全保护机制。这个开源方案完整呈现了从硬件设计到软件实现的全部细节,特别适合准备进入充电桩领域的硬件工程师和嵌入式开发者参考。
我在2018年参与过某品牌60kW直流桩的研发,当时最大的痛点就是缺乏完整的参考设计。市面上能找到的资料要么是零散的模块说明,要么就是商业方案的黑箱SDK。这个项目把充电桩最核心的四大模块——主控电路、电源管理、通信接口、安全保护——全部开源,甚至连BOM清单里的器件采购型号都标注得一清二楚。对于想快速入门的团队来说,至少能节省3个月的前期研发时间。
2. 硬件架构解析
2.1 主控芯片选型依据
方案采用STM32F407VGT6作为主MCU,这个选择背后有几点关键考量:
- 168MHz主频满足CC/CV充电算法实时性要求
- 自带FPU加速浮点运算,适合做电能计量校准
- 3个CAN控制器完美适配充电桩的CAN通信矩阵(车辆BMS通信+后台监控+急停信号)
- 512KB Flash存储空间足够存放完整的充电协议栈
对比STM32F103系列,虽然成本更低但缺少硬件CRC校验模块,这在充电桩固件安全校验上是致命缺陷。而STM32H7系列性能过剩,性价比反而不如F4系列。实际测试中,F407在同时处理以下任务时CPU负载稳定在65%左右:
- 实时采集16路ADC(电压/电流检测)
- 运行Modbus TCP协议栈
- 执行PID充电控制算法
- 刷新TFT液晶界面
2.2 电源电路设计要点
充电桩的电源设计最容易被忽视却至关重要。方案中采用三级供电架构:
- 前级EMC滤波电路:在AC-DC模块前端加入共模电感+XY电容组合,实测可将浪涌电压抑制在600V以下(4kV雷击测试标准)
- 隔离DC-DC模块:金升阳的URB2405YMD-20WR3实现输入-输出3000VAC隔离
- 本地LDO稳压:TPS7A4700为MCU提供3.3V电源,纹波控制在50mV以内
特别要注意的是,继电器控制电路的电源必须与逻辑电源隔离。我们曾遇到因共地导致MOSFET误触发的事故,后来改用ADuM5401数字隔离器彻底解决了这个问题。
2.3 安全保护机制实现
充电桩国标GB/T 18487.1-2015明确要求必须包含六重保护:
- 过压保护(OVP):通过分压电阻+LM2903比较器实现硬件级保护
- 过流保护(OCP):采用ACS712霍尔传感器+软件双重判断
- 漏电保护(RCD):剩余电流检测模块直连MCU的快速中断引脚
- 急停回路:独立硬件看门狗监控急停按钮状态
- 绝缘监测:在充电前自动检测CP/PE间阻抗
- 温度保护:NTC热敏电阻布置在功率器件散热片上
原理图中特别设计了"保护优先级仲裁电路"——当多重故障同时发生时,硬件会优先切断接触器供电而非依赖软件响应。这个设计让我们顺利通过了CNAS实验室的型式试验。
3. 软件架构深度解析
3.1 充电状态机设计
核心充电流程采用分层状态机实现,分为三个层级:
c复制// 顶层状态机
typedef enum {
IDLE_STATE,
HANDSHAKE_STATE,
CHARGE_STATE,
FAULT_STATE
} top_state_t;
// 充电阶段子状态机
typedef enum {
CC_CHARGE,
CV_CHARGE,
BALANCE_CHARGE,
STOPPING
} charge_substate_t;
每个状态转换都设置了超时监控,例如握手阶段必须在30秒内完成BMS通信协议交互,否则自动跳转至故障状态。实测发现,比亚迪车型对SDP报文响应较慢,需要特别调整该车型的超时阈值。
3.2 CAN通信协议栈
方案完整实现了GB/T 27930-2015标准协议栈,关键点包括:
- 使用CubeMX配置CAN过滤器,只接收0x1806F456(标准充电报文ID)
- 定时器触发每100ms发送充电机辨识报文
- DMA双缓冲接收BMS数据帧
- 校验和采用SAE J1850标准算法
在兼容性测试中,我们发现北汽新能源的BMS对报文间隔要求严格,必须精确控制帧间隔在99-101ms之间,否则会导致通信中断。解决方案是在CAN发送中断中嵌入高精度定时器:
c复制void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan)
{
static uint32_t last_send = 0;
uint32_t now = HAL_GetTick();
if(now - last_send < 99) {
HAL_Delay(101 - (now - last_send));
}
last_send = HAL_GetTick();
}
3.3 电能计量算法
精确计量依赖以下关键技术:
- 电压电流同步采样:使用ADC的注入通道模式,在PWM上升沿触发采样
- 有效值计算:采用每周期128点采样+FFT算法,比常规均方根法精度提升0.5%
- 电能累加:32位累加器配合溢出补偿算法
- 温度补偿:根据NTC读数动态调整采样电阻阻值
校准过程中需要特别注意:
必须在20%-100%额定电流范围内至少取5个校准点,我们通常选择20%、50%、80%、100%、110%这五个负载点。校准数据要写入Flash的指定扇区,并做CRC32校验。
4. PCB设计实战技巧
4.1 四层板叠层设计
推荐采用以下叠层方案:
| 层序 | 用途 | 关键参数 |
|---|---|---|
| TOP | 信号层+关键元件 | 线宽≥8mil |
| L2 | 完整地平面 | 避免分割 |
| L3 | 电源层(3.3V/5V分割) | 20mil宽电源通道 |
| BOT | 普通信号层 | 避开高速信号 |
功率回路布局要遵循"三短原则":
- 电流检测路径短(ACS712到MCU距离<15mm)
- 继电器驱动回路短(MOSFET栅极电阻紧贴IC)
- 采样反馈环路短(电压检测走线远离AC线路)
4.2 EMC设计经验
通过CE认证必须注意:
- 在AC输入端预留共模电感位置(TDK的ACM4520-102-2P效果最佳)
- 所有IO口串联22Ω电阻并接100pF电容到地
- 金属外壳接地点不少于3处,间距<15cm
- 液晶排线加装磁环(型号:ZCAT2035-0930)
实测表明,将CAN总线终端电阻改为120Ω±1%精密电阻后,通信误码率可从10^-4降至10^-6。另外,在RS-485芯片电源脚并联10μF钽电容,能有效抑制浪涌导致的芯片损坏。
5. 生产测试方案
5.1 自动化测试夹具
我们开发了基于LabVIEW的测试系统,主要检测:
- 绝缘电阻:用2500V兆欧表测试CP-PE阻抗>10MΩ
- 接触器动作时间:示波器监控线圈驱动信号
- 计量精度:对比标准源误差<0.5%
- CAN通信压力测试:持续发送10万帧随机报文
测试夹具关键部件:
- 可编程直流负载(ITECH的IT8511)
- 高精度功率分析仪(横河的WT1800)
- 多路温度记录仪(安捷伦的34970A)
5.2 故障注入测试
必须模拟的异常场景包括:
- 充电枪半插入状态(检测CC2电阻值)
- 车辆启动行驶中充电(突然断开CP信号)
- 电网电压骤降(用调压器模拟380V→220V突变)
- BMS通信中断(CAN总线短路测试)
我们曾发现一个隐蔽bug:当同时触发过流和急停时,看门狗可能无法及时复位。最终通过调整中断优先级解决:
c复制void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == EMG_STOP_Pin) {
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0); // 最高优先级
// 紧急处理代码
}
}
6. 现场问题排查实录
6.1 典型故障代码速查
| 故障码 | 可能原因 | 解决方案 |
|---|---|---|
| E001 | CP信号幅值异常 | 检查12V稳压管D5是否击穿 |
| E005 | 绝缘检测超限 | 清洁充电枪座内部积水 |
| E020 | BMS协议版本不匹配 | 更新固件支持新国标2015版 |
| E101 | 接触器粘连 | 更换带灭弧电路的继电器 |
6.2 通信干扰排查案例
某停车场10台桩集体出现CAN通信中断,最终定位原因是:
- 所有故障桩的CANH线长度超过15米
- 终端电阻功率不足(1/4W电阻过热)
- 线缆与380V动力线平行走线
改进措施:
- 改用1W的金属膜终端电阻
- CAN线换用双绞节距更小的AWG18线缆
- 与强电线路保持30cm以上间距
这个项目最宝贵的经验是:永远要在PCB上预留未使用的零欧姆电阻位置。我们后来在改版中加入的R101-R110这组预留电阻,帮助快速解决了至少三个现场兼容性问题。