Part Number: TMS320F28375D
Good morning.
I set the PWM first and then the GPIO to the PWM function.
At this time, PWM output occurs.
PWM Mode is as follows.
1. Frequency: 50kHz
2. Mode: Up Down
3. TBPRD: 100M / 50k / 2 = 1000
3. DBRED and FED: TBPRD x 2 = 2000
Initialization order is as follows:
void device_init(void)
{
DINT;
IER = 0x0000;
IFR = 0x0000;
InitSysCtrl();
pwm_peripheral_clock_stop();
pwm_init();
pwm_gpio_init();
grid_pwm_protection_init();
pwm_peripheral_clock_start();
interrupt_init();
interrupt_enable();
}
The PWM settings are as follows.
void pwm_init(void)
{
EALLOW;
EPwm7Regs.TBCTL.bit.PRDLD = 0;
EPwm7Regs.TBPRD = ((Uint16)(GRID_PWM_PERIOD) >> 1);
EPwm7Regs.TBCTR = 0;
EPwm7Regs.TBPHS.bit.TBPHS = 0;
EPwm7Regs.TBCTL.bit.CTRMODE = 2;
EPwm7Regs.TBCTL.bit.CLKDIV = 0;
EPwm7Regs.TBCTL.bit.HSPCLKDIV = 0;
EPwm7Regs.CMPA.bit.CMPA = 0;
EPwm7Regs.CMPCTL.bit.LOADASYNC = 0;
EPwm7Regs.CMPCTL.bit.LOADAMODE = 0;
EPwm7Regs.CMPCTL.bit.SHDWAMODE = 0;
EPwm7Regs.AQCTLA.all = 0;
EPwm7Regs.AQCTLA.bit.CAU = 1;
EPwm7Regs.AQCTLA.bit.CAD = 3;
EPwm7Regs.AQCTLA.bit.ZRO = 2;
EPwm7Regs.DBCTL2.bit.SHDWDBCTLMODE = 1;
EPwm7Regs.DBCTL2.bit.LOADDBCTLMODE = 0;
EPwm7Regs.DBCTL.bit.LOADREDMODE = 1;
EPwm7Regs.DBCTL.bit.LOADFEDMODE = 0;
EPwm7Regs.DBCTL.bit.HALFCYCLE = 0;
EPwm7Regs.DBRED.bit.DBRED = GRID_PWM_PERIOD;
EPwm7Regs.DBFED.bit.DBFED = GRID_PWM_PERIOD;
EPwm7Regs.DBCTL.bit.OUT_MODE = 3;
EPwm7Regs.DBCTL.bit.IN_MODE = 0;
EPwm7Regs.DBCTL.bit.DEDB_MODE = 0;
EPwm7Regs.DBCTL.bit.POLSEL = 2;
EPwm7Regs.TBCTL.bit.PHSEN = 0;
EPwm7Regs.TBCTL.bit.SYNCOSEL = 1;
EPwm7Regs.TZFRC.bit.OST = 1;
EPwm7Regs.AQSFRC.bit.RLDCSF = CLR;
//EPwm7Regs.AQCSFRC.bit.CSFA = 1;
//EPwm7Regs.AQCSFRC.bit.CSFB = 1;
EDIS;
}
The GPIO settings are as follows.
void pwm_gpio_init(void)
{
EALLOW;
GpioDataRegs.GPADAT.bit.GPIO12 = 0;
GpioDataRegs.GPADAT.bit.GPIO13 = 0;
GpioDataRegs.GPACLEAR.bit.GPIO12 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO13 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO12 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO13 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 1; //When this part is executed, PWM output occurs.
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 1; //When this part is executed, PWM output occurs.
EDIS;
}
The PWM Trip settings are as follows.
void pwm_protection_init(void)
{
EALLOW;
//--------------------------//
//-------- ePWM7 config --------//
//--------------------------//
//Digital Compare Trip Select Register
EPwm7Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 3;
EPwm7Regs.DCTRIPSEL.bit.DCALCOMPSEL = 4;
EPwm7Regs.DCTRIPSEL.bit.DCBHCOMPSEL = 6;
//Trip Zone Digital Comparator Select Register
EPwm7Regs.TZDCSEL.bit.DCAEVT1 = 2;
EPwm7Regs.TZDCSEL.bit.DCAEVT2 = 4;
EPwm7Regs.TZDCSEL.bit.DCBEVT1 = 2;
//Digital Compare A/B Control Register
EPwm7Regs.DCACTL.bit.EVT1SRCSEL = 0;
EPwm7Regs.DCACTL.bit.EVT2SRCSEL = 0;
EPwm7Regs.DCBCTL.bit.EVT1SRCSEL = 0;
EPwm7Regs.DCACTL.bit.EVT1FRCSYNCSEL = 0;
EPwm7Regs.DCACTL.bit.EVT2FRCSYNCSEL = 0;
EPwm7Regs.DCBCTL.bit.EVT1FRCSYNCSEL = 0;
//Trip Zone Select Register
EPwm7Regs.TZSEL.bit.DCAEVT1 = 1;
EPwm7Regs.TZSEL.bit.DCAEVT2 = 1;
EPwm7Regs.TZSEL.bit.DCBEVT1 = 1;
EPwm7Regs.TZSEL.bit.CBC6 = 1;
//Trip Zone Control Register
EPwm7Regs.TZCTL.bit.TZA = 2; //When this part is executed, PWM output Low.
EPwm7Regs.TZCTL.bit.TZB = 2; //When this part is executed, PWM output Low.
//Trip Zone Clear Register
EPwm7Regs.TZCLR.bit.OST = 1;
EPwm7Regs.TZCLR.bit.DCAEVT1 = 1;
EPwm7Regs.TZCLR.bit.DCAEVT2 = 1;
EPwm7Regs.TZCLR.bit.DCBEVT1 = 1;
//Trip Znoe Force Register
EPwm7Regs.TZFRC.bit.OST = 1;
EDIS;
}
Yellow: PWM Output A (Vgs, High Side FET)
Blue: PWM Ouput B (Vgs, Low Side FET)

