做电源的同行都知道,LLC谐振变换器是个让人又爱又恨的主儿。爱的是它理论上能实现软开关,恨的是实际调试时那叫一个酸爽——ZVS(零电压开关)条件稍微不对,MOS管分分钟表演烟花秀。最近用STM32G4搞定了3kW全数字控制的LLC,效率干到96.8%,过程中烧掉的MOS管够开个废品回收站了。今天就把这些用炸机换来的经验,连同一线代码一起摊开来讲。
LLC的核心在于谐振腔参数设计,我用的经典公式:
code复制Lr = (Q^2 * Req^2 * Cr) / (4 * π^2 * fmin^2)
Cr = 1 / (4 * π^2 * fr^2 * Lr)
其中Q值取2.5,fr=100kHz,fmin=80kHz。实际调试发现教科书公式算出来的参数在轻载时容易丢ZVS,最后Lr取了计算值的90%,Cr增大15%。MOS管用的英飞凌IPP60R125P7,其Coss=110pF,这个参数直接影响死区时间设置。
整个系统跑在200kHz开关频率下,关键时序安排如下:
| 任务 | 执行周期 | 耗时(us) |
|---|---|---|
| ADC采样 | 10us | 2.5 |
| PID计算 | 10us | 3.8 |
| 频率调整 | 10us | 1.2 |
| 保护检测 | 5us | 0.8 |
实测发现ADC采样和计算总时间不能超过7us,否则会错过下一个开关周期。STM32G4的HRTIM时钟配置为170MHz,PWM分辨率能做到4.3ns。
死区时间设置是防止上下管直通的关键,我的动态调整算法如下:
c复制uint32_t calc_deadtime(float Ipri_peak) {
float t_dead = 35; // 基础死区时间ns
if(Ipri_peak > 5.0) {
t_dead += (Ipri_peak - 5.0) * 2.5; // 重载时线性增加
}
// 考虑MOS管结温影响
t_dead *= (1 + (temp - 25) * 0.003);
return (uint32_t)(t_dead * 170 / 1000); // 转换为HRTIM计数
}
这个算法在负载突变时特别有效,比如从20%突加到80%负载时,死区时间会自动从480ns调整到580ns。
ZVS检测是LLC控制的核心,我的状态机实现:
c复制typedef enum {
STATE_OFF,
STATE_PRE_CHARGE,
STATE_ZVS_WAIT,
STATE_ON
} LLC_State;
void LLC_StateMachine(float Ipri, float Vds) {
static LLC_State state = STATE_OFF;
switch(state) {
case STATE_OFF:
if(Vds < 5.0) { // 电压已放电
state = STATE_PRE_CHARGE;
TIM1->CCR1 = freq_min; // 切到最低频
}
break;
case STATE_PRE_CHARGE:
if(Ipri < -0.3) { // 电流反向
state = STATE_ZVS_WAIT;
start_zvs_timer();
}
break;
// 其他状态处理...
}
}
针对ADC采样噪声问题,实现的动态窗口滤波:
c复制#define MAX_WINDOW 8
#define MIN_WINDOW 3
float dynamic_filter(float new_val) {
static float buffer[MAX_WINDOW];
static int index = 0;
static int window = MAX_WINDOW;
buffer[index++] = new_val;
if(index >= window) index = 0;
// 动态调整窗口
if(fabs(new_val - buffer[(index+1)%window]) > 0.5) {
window = MIN_WINDOW; // 突变时缩小窗口
} else if(window < MAX_WINDOW) {
window++; // 平稳时逐步增大
}
// 计算平均值
float sum = 0;
for(int i=0; i<window; i++) {
sum += buffer[i];
}
return sum / window;
}
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 上电瞬间炸管 | 死区时间不足 | 增大BDTR寄存器值 |
| 轻载时效率骤降 | ZVS条件不满足 | 调整LrCr比值或最低工作频率 |
| 负载突变时振荡 | PID参数不合适 | 启用非线性PID |
| 输出电压纹波大 | 反馈环路延迟过大 | 减小滤波窗口或提高采样频率 |
批量测试的100台样机数据统计:
| 参数 | 最小值 | 最大值 | 平均值 |
|---|---|---|---|
| 效率@满载 | 96.2% | 97.1% | 96.8% |
| 空载功耗 | 8.3W | 9.7W | 8.9W |
| 输出电压精度 | ±0.8% | ±1.2% | ±1.0% |
关键波形说明:
已经验证可行的几个优化方案:
这个项目的全部源码和PCB设计文件已经开源,仓库里的Hardware目录下有详细的BOM清单和装配图。下期准备分享如何用Matlab生成LLC的3D参数优化曲面,比传统试错法效率高十倍不止。