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.

How to Configure HRPWM for hi-res duty and period and phase shift control in up count mode using F28035?

Dear All:

            I need to configure hrpwm for hi-res duty and period and phase shift control in up count mode.  EPWM1A is the master, EPWM2A is the slave shift 120°,

            EPWM3A is the slave shift 240°. I am using F28035.

            Is it possible to configure HRPWM for all these 3 parts duty, period and phase shift?

            According to https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/189224, My code :

           

// Disable TBCLKSYNC
    EALLOW;
            SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;    
    EDIS;
 
//Write To CMP, TBPRD, TBPHS registers.
    (*ePWM[j]).TBCTL.bit.PRDLD = TB_SHADOW;             // set Shadow load
    (*ePWM[j]).TBPRD = period;                                         // PWM frequency = 1/(2*TBPRD)
    (*ePWM[j]).CMPA.half.CMPA = period / 2;                   // set duty 50% initially
    (*ePWM[j]).CMPA.half.CMPAHR = (0 << 8);                 // initialize HRPWM extension
    (*ePWM[j]).TBPHS.all = 0;
 
//Configure modes, clock dividers and action qualifier
    (*ePWM[j]).TBCTR = 0;
    (*ePWM[j]).TBCTL.bit.CTRMODE = TB_COUNT_UP;     // Select up-down count mode
    (*ePWM[j]).TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;     
    (*ePWM[j]).TBCTL.bit.HSPCLKDIV = TB_DIV1;
    (*ePWM[j]).TBCTL.bit.CLKDIV = TB_DIV1;                             // TBCLK = SYSCLKOUT
    (*ePWM[j]).TBCTL.bit.FREE_SOFT = 00;
 
    (*ePWM[j]).CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;      // LOAD CMPA on CTR = 0
    (*ePWM[j]).CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;       
    (*ePWM[j]).CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    (*ePWM[j]).CMPCTL.bit.SHDWBMODE = CC_SHADOW;
 
    (*ePWM[j]).AQCTLA.bit.CAU = AQ_SET;                
    (*ePWM[j]).AQCTLA.bit.PRD = AQ_CLEAR;
   
//Configure HRPWM registers
    EALLOW;
     (*ePWM[j]).HRCNFG.all = 0x0;
     (*ePWM[j]).HRCNFG.bit.EDGMODE = HR_BEP;                      // MEP control on both edges
     (*ePWM[j]).HRCNFG.bit.CTLMODE = HR_CMP;                      // CMPAHR and TBPRDHR HR control
     (*ePWM[j]).HRCNFG.bit.HRLOAD  = HR_CTR_ZERO_PRD;    // load on CTR = 0 and CTR = TBPRD
     (*ePWM[j]).HRCNFG.bit.AUTOCONV = 1;                               // Enable autoconversion
     (*ePWM[j]).HRPCTL.bit.HRPE = 1;                                         // Turn on high-resolution period control
 
//set TBCTL[PHSEN] = 1
     (*ePWM[j]).TBCTL.bit.PHSEN = 1;
 
//set HRPCTL[TBPHSHRLOADE] = 1
     (*ePWM[j]).HRPCTL.bit.TBPHSHRLOADE = 1;
    
//Do the same to all other PWM modules except the TBPHS
 
//Enable TBCLKSYNC
     SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;                        
 
//Perform a software sync
     EPwm1Regs.TBCTL.bit.SWFSYNC = 1; 

I do not know if all three parts work well.   Am I wrong? Please let me know.