1. 项目概述:全桥LLC数字电源开发实录
去年接手一个工业电源项目,要求输入380VDC输出24V/20A,效率必须做到94%以上。传统硬开关方案根本达不到指标,最终选择了全桥LLC谐振拓扑,主控用了TI的TMS320F28034。这款DSP的12位ADC采样率和150ps分辨率的PWM模块,简直就是为数字电源量身定制的。整个开发过程踩坑无数,从谐振参数计算、PCB布局到控制算法调试,每个环节都有血泪教训。现在这台电源量产大半年零退货,就把关键技术和避坑指南分享给大家。
2. 核心拓扑设计与参数计算
2.1 LLC谐振腔的工程化计算
教科书上LLC设计都是理想模型,实际要考虑元件公差、寄生参数和工况变化。我的设计流程分四步走:
-
基础参数确定:
- 输入电压范围:340-420VDC(留10%余量)
- 额定输出:24V/20A(峰值25A)
- 目标效率:94% @满载
- 谐振频率f_res设定为100kHz(兼顾效率和体积)
-
K因子法初步计算:
math复制K = √(Lm/Lr) = 3.5 (经验值) Q = √(Lr/Cr)/Rac = 0.8 (中等负载优化点) Rac = 8*n²*Vout²/(π²*Pout) = 19.5Ω (等效电阻)通过这三个关键方程,可以解出:
- 谐振电感Lr=35μH(最终选用Coilcraft SER2918L-353)
- 谐振电容Cr=22nF(三颗100V/7.5nF MLCC并联)
- 励磁电感Lm=429μH(实际变压器设计值)
-
Mathcad验证与修正:
搭建的仿真模型发现两个问题:- 轻载时(<30%)谐振电流断续
- 元件温升导致参数漂移约8%
最终将Lr调整为38μH,Cr增加到25nF,留出设计余量。
关键提示:谐振电容务必选用低ESR的MLCC,普通CBB电容的损耗会导致温升爆炸。实测中一颗ESR=50mΩ的电容在满载时温升高达65℃!
2.2 功率器件选型要点
MOSFET选型要考虑三个关键参数:
- Qg(总栅极电荷):影响驱动损耗,本例选用Infineon IPA60R199CP(Qg=38nC)
- Coss(输出电容):决定ZVS实现难度,本例Coss=110pF
- Rds(on):直接影响导通损耗,25℃时仅199mΩ
驱动芯片选用UCC27324,特别注意其-5A/4A的拉灌电流能力,足以在20ns内完成MOSFET开关。但布局时必须遵循:
- 驱动回路面积<2cm²
- 栅极电阻紧贴MOS管
- 采用开尔文连接方式
3. 硬件设计魔鬼细节
3.1 原理图里的死亡陷阱
原理图看似简单,但有几个致命细节:
-
PWM反逻辑设计:
- DSP输出高电平=MOSFET关断
- 需在驱动芯片前加74HC14反相器
- 注意使能信号要滞后PWM信号至少50ns
-
电流采样电路:
c复制// 电流互感器参数: // 匝比1:100,次级并联50Ω电阻 // 运放增益设置: Rf = 10kΩ, Rin = 1kΩ → 增益11倍 // 最终灵敏度:0.1V/A -
ADC采样保护:
- 所有ADC输入通道必须加TVS管(如SMBJ5.0A)
- RC滤波时间常数<1μs(否则影响动态响应)
3.2 PCB布局的血泪史
第一次打样就因布局问题烧了六颗MOSFET,总结出黄金法则:
-
功率回路最小化:
- 全桥对角线MOSFET的DS间距<15mm
- 采用2oz铜厚,必要时开窗加锡
-
地平面分割策略:
- 数字地、模拟地、功率地单点连接
- 接地点选在输入电容负极
-
热设计要点:
- MOSFET间距≥8mm(保证散热气流)
- 变压器下方禁止走线(防耦合干扰)
4. 控制代码核心实现
4.1 PWM初始化关键配置
c复制void InitEPWM(void) {
// 时基模块配置
EPwm1Regs.TBCTL.bit.CTRMODE = 0x2; // 增减计数模式
EPwm1Regs.TBPRD = SYSTEM_FREQUENCY / (2*SW_FREQ); // 100kHz载波
// 比较模块配置
EPwm1Regs.CMPA.half.CMPA = EPwm1Regs.TBPRD * 0.48; // 48%占空比
// 死区模块配置
EPwm1Regs.DBCTL.bit.OUT_MODE = 0x3; // 双边沿延时模式
EPwm1Regs.DBFED = (DEADTIME_NS * SYSTEM_FREQUENCY) / 1000; // 上升沿延时
EPwm1Regs.DBRED = EPwm1Regs.DBFED; // 对称死区
// 事件触发配置
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // 启用ADC触发
EPwm1Regs.ETPS.bit.SOCAPRD = 0x1; // 每个周期触发一次
}
这段代码有三大关键点:
- 死区时间必须大于MOSFET的存储时间(本例中IPW60R199CP的t_stg=65ns)
- ADC触发点设在PWM波谷(TBCTR=0时)
- 占空比限制在48%以内(预防直通风险)
4.2 动态死区补偿算法
轻载时出现的电压泵升问题,通过实时调节死区解决:
c复制void DeadTime_Adjust(int step_ns) {
static int current_deadtime = DEFAULT_DEADTIME;
current_deadtime += step_ns;
if(current_deadtime < 80) current_deadtime = 80; // 最小死区
if(current_deadtime > 200) current_deadtime = 200; // 最大死区
Uint32 new_count = (current_deadtime * SYSTEM_FREQUENCY) / 1000;
EPwm1Regs.DBFED = new_count;
EPwm1Regs.DBRED = new_count;
// 写入影子寄存器
EPwm1Regs.DBCTL.bit.LOADDBMODE = 0x2; // 立即加载
}
补偿逻辑说明:
- 每50ms检测一次输出电压
- 超26V时缩短死区5ns(提升等效频率)
- 低于22V时增大死区5ns(降低开关损耗)
- 步长限制在5ns内(防振荡)
5. 调试过程中的灵异事件
5.1 CLA协处理器发疯事件
现象:闭环运行时PWM突然锁死在98%占空比
排查过程:
- 用CCS查看CLA任务堆栈,发现溢出
- 检查发现ADC采样ISR抢占了PWM更新中断
- 关键变量未加volatile声明
解决方案:
c复制// 中断优先级重配置
PieCtrlRegs.PIEIER4_5.bit.INTx5 = 5; // ADC采样中断优先级5
PieCtrlRegs.PIEIER1_2.bit.INTx2 = 3; // PWM更新中断优先级3
// 共享变量保护
#pragma CLA_SAFE
volatile float Vout_actual;
5.2 神秘的地弹现象
现象:MOSFET偶尔误开通,伴随驱动波形畸变
根本原因:
- 驱动回路与功率回路共地
- di/dt导致地平面电位跳动
终极解决方案:
- 改用四层板(中间完整地平面)
- 驱动芯片采用独立电源供电
- 增加门极负压关断(-2V)
6. 性能实测数据
测试条件:输入380VDC,环境温度25℃
| 负载电流 | 效率 | 谐振腔温升 | 输出电压纹波 |
|---|---|---|---|
| 5A | 92.3% | 18℃ | 120mV |
| 10A | 94.1% | 25℃ | 150mV |
| 15A | 94.7% | 31℃ | 180mV |
| 20A | 94.2% | 38℃ | 220mV |
关键发现:
- 效率峰值出现在50-75%负载区间
- 谐振电容温度比MOSFET高约15℃
- 轻载时纹波主要来自整流二极管反向恢复
这个项目让我深刻体会到,数字电源开发就是不断在理论计算和工程妥协之间找平衡。最后分享一个实用技巧:用热成像仪观察PCB时,重点关注变压器引脚和MLCC电容位置,这些往往是热设计的盲区。下次准备尝试在PFC级联方案中用28034的CLB模块做硬件保护,不过得先把现在的经验消化透了再说。