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.

TMS320F28069: Correct PWM Output Routine

Part Number: TMS320F28069

Hello,

           I hope everyone is safe and doing well during this time of Pendamic and hpe that all would be well in the days to follow.

I am having some dilemma in configuring the PWM Routine.

//
// Included Files
//
#include "F2806x_Device.h"     	   // F2806x Headerfile
#include "F2806x_Examples.h"       // F2806x Examples Headerfile
#include "F2806x_EPwm_defines.h"   // useful defines for initialization

//
// Function prototypes
//
void HRPWM1_Config(Uint16);
void HRPWM2_Config(Uint16);




//
// Main
//
void main(void)
{

    InitSysCtrl();

    InitEPwm1Gpio();
    InitEPwm2Gpio();
    InitEPwm3Gpio();
    InitEPwm4Gpio();

    DINT;

    InitPieCtrl();

    IER = 0x0000;
    IFR = 0x0000;

    InitPieVectTable();


    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
    EDIS;

       EPwm1Regs.TBPRD = 2000; // Period = 2´600 TBCLK counts

       //EPwm1Regs.TBPHS = 0; // Set Phase register to zero
       EPwm1Regs.TBCTR = 0; // clear TB counter
       EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetric
       EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Phase loading disabled
       EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
       EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
       EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // TBCLK = SYSCLKOUT
       EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
       EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
       EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
       EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR = Zero
       EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR = Zero
       EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
       EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
       EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;
       EPwm1Regs.AQCTLB.bit.CBD = AQ_SET;
       // Run Time
       // = = = = = = = = = = = = = = = = = = = = = = = =
       // Initialization Time
       // = = = = = = = = = = = = = = = = = = = = = = = =
       EPwm2Regs.TBPRD = 2000; // Period = 2´600 TBCLK counts

      // EPwm2Regs.TBPHS = 0; // Set Phase register to zero
       EPwm2Regs.TBCTR = 0; // clear TB counter
       EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetric
       EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Phase loading disabled
       EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
       EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
       EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // TBCLK = SYSCLKOUT
       EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
       EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
       EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
       EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR = Zero
       EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR = Zero
       EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;
       EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;
       EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR;
       EPwm2Regs.AQCTLB.bit.CBD = AQ_SET;

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


       EPwm1Regs.CMPA.half.CMPA = 100; // adjust duty for output EPWM1A
       EPwm1Regs.CMPB = 0; // adjust duty for output EPWM1B

       EPwm2Regs.CMPA.half.CMPA = 100  ; // adjust duty for output EPWM1A
       EPwm2Regs.CMPB = 0; // adjust duty for output EPWM1B

    while (1)
    {

    }

}

In the above code I have Set the Frequency at 22 KHZ but I am bit confused in setting up the variable to output.

       EPwm1Regs.CMPA.half.CMPA = 0; // adjust duty for output EPWM1A
       EPwm1Regs.CMPB = 0; // adjust duty for output EPWM1B

       EPwm2Regs.CMPA.half.CMPA = 0; // adjust duty for output EPWM1A
       EPwm2Regs.CMPB = 0; // adjust duty for output EPWM1B
                                                   SITUATION ONE        

A---High Side Mosfet (CMPA.half.CMPA = 100)--->|********************|<------High Side Mosfet (CMPA.half.CMPA = 0---------------C
                                               |                    |
                                               |       IR2110       |
                                               |       MOSFET       |
                                               |                    |
D--LowSide Mosfet (CMPB = 0)-----------------> |********************|<-----Low Side Mosfet (CMPB = 100)------------------------B


                                                                                                                   
                                                   SITUATION TWO

A---High Side Mosfet (CMPA.half.CMPA = 0)----->|********************|<-----High Side Mosfet (CMPA.half.CMPA = 100-------------C
                                               |                    |
                                               |      IR2110        |
                                               |       MOSFET       |
                                               |                    |
D---LowSide Mosfet (CMPB = 100)--------------> |********************|<-----Low Side Mosfet (CMPB = 0)--------------------------B

As shown above these are the two scenarios for an h-bridge to work in reverse and forward direction, So I need to know how to properly assign the values of theEPwm1Reg & EPwm2Regs Registers.