基于TMS320F28035的移相全桥变换器控制

1. 硬件设计

硬件设计主要包括控制级、脉冲地址分配、采样电路、驱动电路和功率子模块部分。对于移相全桥变换器,需要设计合适的驱动电路来控制全桥的开关管,并确保信号隔离和电路保护。

2. EPWM配置

EPWM模块用于生成控制全桥开关管的脉冲信号。

#define HSFB_PERIOD 205 // 146kHz

void PWM_Config(void) {
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the EPWM
    EDIS;

    // Time Base SubModule Register
    EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // Set Immediate load
    EPwm1Regs.TBPRD = HSFB_PERIOD;
    EPwm1Regs.TBPHS.half.TBPHS = 0;
    EPwm1Regs.TBCTR = 0;
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_CMPB; // Used to sync EPWM(n+1) "down-stream"
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
    EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

    // Counter compare submodule registers
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_IMMEDIATE;
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_IMMEDIATE;
    EPwm1Regs.CMPA.half.CMPA = HSFB_PERIOD - 68; // trig_up
    EPwm1Regs.CMPB = HSFB_PERIOD;

    // ADC SOC generation
    EPwm1Regs.ETSEL.bit.SOCAEN = 1;
    EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_PRDZERO; // Use ZRO and PRD events as trigger
    EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event

    EPwm2Regs.ETSEL.bit.SOCAEN = 1;
    EPwm2Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO; // Use ZRO event as trigger
    EPwm2Regs.ETPS.bit.SOCAPRD = ET_2ND; // Generate pulse on 1st event

    EPwm4Regs.ETSEL.bit.SOCAEN = 1;
    EPwm4Regs.ETSEL.bit.SOCASEL = ET_CTRU_CMPA; // Use CAU event as trigger
    EPwm4Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
    EPwm4Regs.CMPA.half.CMPA = 40; // Note: This value is based on 100 KHz switching frequency
    EPwm4Regs.ETSEL.bit.SOCBEN = 1;
    EPwm4Regs.ETSEL.bit.SOCBSEL = ET_CTRU_CMPB; // Use CBU event as trigger
    EPwm4Regs.ETPS.bit.SOCBPRD = 1; // Generate pulse on 1st event
    EPwm4Regs.CMPB = 165; // Note: This value is based on 100 KHz switching frequency

    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
    EDIS;
}

3. 中断配置

中断配置用于处理EPWM模块的事件,如比较器事件和ADC采样。以下是一个中断处理函数的示例:

#define DACDRV_RAMP_In 38400 // 环路计算值

if (TB_DIR_UP == EPwm1Regs.TBSTS.bit.CTRDIR) { // PWM counter direction is UP
    EPwm2Regs.TZCLR.all |= 0x0C;
    EPwm2Regs.TZCTL.all = 0x0FFF; // Force EPWMxB to a low state
    EPwm2Regs.AQCTLB.all = 0x0215; // CBU=HIGH, CAU=LOW, PRD=LOW, ZERO=LOW
    EPwm2Regs.AQCTLA.all = 0x0124; // CBU=LOW, CAU=HIGH, PRD=LOW, ZERO=Nothing
    EPwm2Regs.CMPA.half.CMPA = DB_AtoP;
    EPwm2Regs.CMPB = (HSFB_PERIOD);
    EPwm2Regs.DCFWINDOW = DB_PtoA + 3;
    EPwm1Regs.CMPA.half.CMPA = trig_up;
    EPwm1Regs.CMPB = (HSFB_PERIOD + 10); // set to 0, avoid CMPB to force EPWM2 sync event. Use DCAEVT1.sync to sync EPwm2 module.
    EPwm1Regs.ETSEL.all = 0x0B0D;

    // Update RAMP value
    Comp3Regs.RAMPMAXREF_SHDW = DACDRV_RAMP_In; // Q16 type, max value is 0xFFFF
    Comp3Regs.DACVAL.all = (DACDRV_RAMP_In >> 6); // Q10 type
} else { // PWM counter direction is DOWN
    EPwm2Regs.TZCLR.all |= 0x0C;
    EPwm2Regs.TZCTL.all = 0x0FFF; // Force EPWMxA to a low state
    EPwm2Regs.AQCTLA.all = 0x0125; // CBU=LOW, CAU=HIGH, PRD=LOW, ZERO=LOW
    EPwm2Regs.AQCTLB.all = 0x0214; // CBU=HIGH, CAU=LOW, PRD=LOW, ZERO=Nothing
    EPwm2Regs.CMPB = DB_AtoP;
    EPwm2Regs.CMPA.half.CMPA = (HSFB_PERIOD);
    EPwm2Regs.DCFWINDOW = DB_PtoA + 3; // Need confirm
    EPwm1Regs.CMPA.half.CMPA = trig_dwn;
    EPwm1Regs.CMPB = HSFB_PERIOD + 10; // set to period, avoid CMPB to force EPWM2 sync event. Use DCAEVT1.sync to sync EPwm2 module.
    EPwm1Regs.ETSEL.all = 0x0B0C;
}

4. 控制算法实现

控制算法的核心是调节移相角以实现零电压开关(ZVS)和稳定的输出电压。以下是一个控制算法的示例:

void ControlAlgorithm(void) {
    // 读取ADC采样的电压和电流值
    int voltage = ADC_ReadVoltage();
    int current = ADC_ReadCurrent();

    // 计算误差和控制信号
    int error = reference_voltage - voltage;
    int control_signal = PI_Controller(error);

    // 调整移相角
    phase_shift_angle = control_signal;

    // 更新EPWM模块的移相角
    UpdateEPWMPhaseShift(phase_shift_angle);
}

int PI_Controller(int error) {
    static int integral = 0;
    static int last_error = 0;
    int proportional = error;
    integral += error;
    int derivative = error - last_error;
    last_error = error;
    return proportional * Kp + integral * Ki + derivative * Kd;
}

void UpdateEPWMPhaseShift(int angle) {
    // 更新EPWM模块的移相角
    EPwm2Regs.CMPA.half.CMPA = angle;
}

参考代码 基于TMS320F28035的移相全桥变换器控制程序 www.youwenfan.com/contentcni/71872.html,包含移相ePWM配置方式,中断配置等

5. 实际应用案例

在实际应用中,移相全桥变换器被广泛应用于高压直流变换器、电机驱动、电池充电系统及光伏逆变器等场合。例如,某3kW通信直流供电系统采用PSFB结构作为DC/DC变换主模块,使用TMS320F28035作为控制核心,通过相位比较法调节移相角,控制输出电压稳定在48V。

posted @ 2025-09-26 10:20  kang_ms  阅读(46)  评论(0)    收藏  举报