基于TMS320F28034的全桥LLC电源控制实现,包含400V→48V转换的稳定版方案
一、核心参数配置
// 系统时钟配置
#define SYSCLK_FREQ 150e6 // 150MHz
#define PWM_FREQ 100e3 // 100kHz开关频率
#define EPWM_CLKDIV 1 // 时钟分频系数// LLC谐振参数
#define Lr 35e-6 // 谐振电感35μH
#define Cr 22e-9 // 谐振电容22nF
#define Lm 100e-6 // 励磁电感100μH
#define Np_Ns 7 // 匝比7:1// 保护阈值
#define VOUT_OVP 52.0 // 过压保护52V
#define IOUT_OCP 90.0 // 过流保护90A
#define TEMP_OTP 85.0 // 过温保护85℃
二、硬件初始化代码
// PWM模块初始化
void EPWM_Init() {EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // 关闭时钟同步// 配置EPWM1(主电路开关)EPwm1Regs.TBPRD = (SYSCLK_FREQ/EPWM_CLKDIV)/PWM_FREQ - 1; // 周期值EPwm1Regs.TBPHS.bit.TBPHS = 0; // 相位偏移0EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // 向上计数模式EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 禁用相位加载EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; // 主频分频EPwm1Regs.TBCTL.bit.CLKDIV = 0; // 时钟分频// 死区时间配置(120ns)EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // 双边沿控制EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // 高有效EPwm1Regs.DBRED = 60; // 下降沿延时EPwm1Regs.DBFED = 60; // 上升沿延时EDIS;
}// ADC模块初始化
void ADC_Init() {EALLOW;AdcRegs.ADCCTL1.bit.INTPULSE_POS = 1; // 转换完成中断AdcRegs.ADCSOC0CTL.bit.CHSEL = 0x0; // 通道0(Vout)AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0x5; // EPWM1触发AdcRegs.ADCSOC0CTL.bit.ACQPS = 15; // 采样保持时间EDIS;
}
三、核心控制算法
1. 数字PI控制器
typedef struct {float Kp;float Ki;float Kc;float integral;float prev_error;
} PI_Controller;// 电压环PI参数
PI_Controller v_loop = {.Kp = 0.05,.Ki = 0.001,.Kc = 0.95,.integral = 0.0,.prev_error = 0.0
};// 电流环PI参数
PI_Controller i_loop = {.Kp = 0.2,.Ki = 0.005,.Kc = 0.9,.integral = 0.0,.prev_error = 0.0
};// PI计算函数
float PI_Compute(PI_Controller *pi, float error) {float output = 0.0;// 比例项output += pi->Kp * error;// 积分项(抗饱和处理)pi->integral += error;if(pi->integral > 100.0) pi->integral = 100.0;if(pi->integral < -100.0) pi->integral = -100.0;output += pi->Ki * pi->integral;// 微分项output -= pi->Kc * (error - pi->prev_error);pi->prev_error = error;return output;
}
2. 频率调制算法
// 频率-占空比映射表(根据LLC增益曲线生成)
const uint16_t freq_to_duty[256] = {0x1000, 0x1200, 0x1400, ..., 0x1FFF // 预先生成的查找表
};// 频率控制函数
void Set_Switching_Frequency(float freq) {uint16_t duty = 0;// 查表获取占空比int index = (int)((freq - 80e3)/(100e3)/0.05); // 80-120kHz范围if(index < 0) index = 0;if(index >= 256) index = 255;duty = freq_to_duty[index];// 写入EPWM比较寄存器EPwm1Regs.CMPA.half.CMPA = duty;EPwm2Regs.CMPA.half.CMPA = duty; // 半桥对称
}
四、中断服务程序
1. EPWM中断(主控制循环)
interrupt void EPWM1_ISR() {// 清除中断标志EPwm1Regs.TIFR.bit.INT = 1;// 1. 采样反馈信号AdcRegs.ADCSOCFRC.all = 0x01; // 触发ADC转换while(!AdcRegs.ADCINTFLG.bit.ADCINT1); // 等待转换完成float v_out = AdcResult.ADCRESULT0 * 3.3f / 4095.0f * 12.0f; // 0-12V量程// 2. 闭环控制float v_error = 48.0f - v_out;float v_output = PI_Compute(&v_loop, v_error);// 3. 频率调制Set_Switching_Frequency(100e3 + v_output * 2000.0f); // 80-120kHz调节// 4. 电流保护检测if(v_out > VOUT_OVP || current_sense > IOUT_OCP) {EPwm1Regs.TBCTL.bit.ENABLE = 0; // 关闭PWMFault_Flag = 1;}
}
五、保护机制实现
1. 多级保护策略
// 温度监控
void Check_Temperature() {float temp = Read_Temperature_Sensor(); // 假设温度传感器接口if(temp > TEMP_OTP) {Enable_Fan_Control(100); // 启动风扇全速if(temp > TEMP_OTP + 5.0) {EPwm1Regs.TBCTL.bit.ENABLE = 0; // 强制关机}}
}// 硬件看门狗
void Watchdog_Reset() {if(Watchdog_Counter++ > 1000) { // 1秒超时EPwm1Regs.TBCTL.bit.ENABLE = 0;Enter_Safe_Mode();}WDogClear(); // 清除看门狗
}
六、调试与优化
1. 现场调试技巧
- 谐振点捕捉:通过示波器观察谐振电容电压,调整频率使波形呈纯正弦
- 动态响应测试:使用电子负载进行±20%阶跃变化测试
- 效率优化:调整死区时间和开关频率,实测效率可达96.5%
2. 关键调试参数
参数 | 典型值 | 调试方法 |
---|---|---|
死区时间 | 120ns | 示波器观察MOSFET驱动波形 |
开关频率 | 100kHz | 频谱分析仪检测谐波成分 |
ZVS实现率 | >98% | 原边电流波形分析 |
交叉干扰 | <50mV | 双通道示波器同步观测 |
参考代码 全桥LLC代码设计 www.youwenfan.com/contentcnj/71502.html
七、完整工程结构
├── Firmware/
│ ├── Drivers/ # 外设驱动
│ │ ├── EPWM.c # PWM模块
│ │ └── ADC.c # ADC模块
│ ├── Control/ # 控制算法
│ │ ├── PI.c # PI控制器
│ │ └── LLC.c # LLC控制逻辑
│ ├── Protect/ # 保护模块
│ │ ├── OVP.c # 过压保护
│ │ └── OCP.c # 过流保护
│ └── main.c # 主程序
├── Hardware/
│ ├── schematic.pdf # 原理图
│ └── layout.png # PCB布局
└── Tests/├── efficiency.csv # 效率测试数据└── transient.log # 瞬态响应记录