This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28375D: How to limit PWM output when first time running a program.

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)