基于TMS320F28034的全桥LLC电源控制
基于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; // 相位偏移0
EPwm1Regs.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; // 关闭PWM
Fault_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 # 瞬态响应记录

浙公网安备 33010602011771号