基于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    # 瞬态响应记录
posted @ 2025-10-23 09:58  躲雨小伙  阅读(12)  评论(0)    收藏  举报