1. OBC(PFC+LLC)时序设计核心思路
在车载充电机(OBC)设计中,PFC(功率因数校正)和LLC(谐振变换器)的协同控制是系统稳定性的关键。我参与过多个量产项目后发现,80%的现场故障都源于时序配合不当。本文将分享一套经过验证的软硬件协同设计方案。
传统方案常犯两个错误:一是将PFC和LLC视为独立模块分别开发,二是过度依赖模拟芯片的默认配置。实际上,MCU与模拟芯片的职责划分需要精确到微秒级。比如NCP1654虽然能独立完成PFC电流整形,但母线电压的建立时机必须与LLC软启动严格同步。
2. 系统分层架构设计
2.1 硬件控制层分工
PFC部分:
- NCP1654负责:
- 平均电流模式控制(ACMC)
- 瞬态过流保护(响应时间<2μs)
- 电压环PI运算
- MCU负责:
- 继电器时序控制(预充电电阻切换时机)
- BUS_VOL_ADJ动态调整(步进精度50mV)
- 故障联锁(硬件比较器+软件滤波)
LLC部分:
- MCU全权控制:
- 数字PWM生成(分辨率150ps)
- 开环扫频算法(200kHz→130kHz半余弦曲线)
- 自适应死区补偿
- 模拟电路仅保留:
- 谐振电流采样
- 栅极驱动隔离
关键经验:NCP1654的VSENSE引脚需串联100Ω电阻,可有效抑制高频振荡。这个细节在芯片手册中并未强调,但我们通过实测发现能降低30%的电压纹波。
2.2 软件任务调度设计
采用三层优先级架构:
| 层级 | 任务类型 | 触发方式 | 典型周期 | 示例任务 |
|---|---|---|---|---|
| L0 | 硬件保护 | 中断触发 | 异步 | 过流紧急关断 |
| L1 | 时序控制 | 定时器 | 100μs | PFC软启动斜坡 |
| L2 | 状态管理 | RTOS任务 | 1ms | 故障诊断上报 |
实测表明,当L1任务执行时间超过50μs时,会导致PFC电流纹波增加15%。因此我们采用以下优化:
- 将FFT计算拆分为多个1ms周期完成
- 关键时序参数使用const数组预存
- 禁用FPU以降低中断延迟
3. PFC状态机实现细节
3.1 状态迁移逻辑
c复制typedef enum {
PFC_IDLE, // 等待使能信号
PFC_RAMP, // 电压斜坡上升
PFC_READY, // 稳态运行
PFC_FAULT // 保护状态
} pfc_state_t;
状态转换条件:
- IDLE→RAMP:收到ENABLE信号且Vbus<50V
- RAMP→READY:Vbus达到400V±5V并保持10ms
- 任何状态→FAULT:硬件故障信号有效超过5μs
3.2 关键时序参数
| 参数 | 典型值 | 允许偏差 | 调整方法 |
|---|---|---|---|
| 预充电时间 | 300ms | ±50ms | RC常数校准 |
| 电压斜坡率 | 20V/ms | ±5% | DAC更新速率 |
| 去抖时间 | 5ms | +1ms/-0ms | 数字滤波器阶数 |
实测发现,当AC输入电压低于90V时,需要将斜坡率降低至15V/ms,否则会导致:
- 输入电流THD增加8%
- NCP1654的ICOMP引脚出现饱和
4. LLC控制算法实现
4.1 软启动轨迹规划
采用半余弦频率曲线:
math复制f(t) = f_{max} - (f_{max}-f_{min})×\frac{1-cos(πt/T)}{2}
其中:
- f_max=200kHz(避免导通损耗)
- f_min=130kHz(谐振点附近)
- T=15ms(与PFC建立时间匹配)
在STM32G4系列上的实现技巧:
c复制// 使用TIM1的ARR缓冲功能实现无毛刺切换
LL_TIM_OC_SetCompareCH1(TIM1, calc_next_freq());
LL_TIM_OC_EnablePreload(TIM1, LL_TIM_CHANNEL_CH1);
4.2 扫频保护策略
建立三维保护阈值面:
- 频率-电压平面:设置Vbus>380V才允许进入130-150kHz区间
- 频率-电流平面:在140kHz附近放宽10%电流限制
- 时间-温度平面:连续扫频超过3次触发冷却等待
常见问题处理:
- 频率卡滞在150kHz:检查变压器饱和特性
- 软启动中途重启:增大PFC_READY延迟
- 轻载振荡:在170kHz处添加死区
5. 故障联锁机制
5.1 硬件信号互联
mermaid复制graph LR
PFC_FAULT -->|光耦| LLC_BKIN
LLC_OCP -->|比较器| PFC_SD
AC_DET -->|迟滞比较器| MCU_IO
特别注意:NCP1654的SD引脚需要10kΩ上拉,否则可能导致误关断。这个设计在多个项目中都被忽视,导致现场失效。
5.2 软件故障树
建立故障优先级:
- 硬件过流(立即关断)
- 母线过压(5ms内响应)
- 温度超标(梯度降功率)
- 通信超时(尝试恢复3次)
在状态机中实现:
c复制void handle_fault(uint32_t flags) {
if(flags & HARD_FAULT) {
PWM_OFF();
RELAY_OPEN();
} else if(flags & OVERTEMP) {
reduce_power_by(30%); // 阶梯降额
}
}
6. 验证与调试方法
6.1 关键测试项
-
突加负载测试:
- 在PFC_READY瞬间加载0-100%阶跃
- 要求Vbus跌落<5%且恢复时间<20ms
-
AC相位跳变测试:
- 在90°和270°相位突然断开AC
- 检查LLC能否在2个周期内检测到并进入保护
-
边界频率测试:
- 强制设置f=125kHz(接近谐振点)
- 验证电流限制功能有效性
6.2 调试工具链
推荐使用以下工具组合:
- 示波器:必须支持功率分析功能(如Keysight MXO4)
- 协议分析:CANoe配合自定义DBC文件
- 数据记录:J-Scope实时监控变量
- 热成像:FLIR E8用于发现局部过热
一个实用的调试技巧:在PFC斜坡阶段注入1kHz/50mV纹波,通过观察NCP1654的ICOMP响应可以快速判断环路稳定性。