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.

TMS320F280039: Frequency change PWM application

Part Number: TMS320F280039

Tool/software:

Dear TI,

I am using PWM5 and PWM7 at a frequency change project. My main isr freqency is timer at 20K Hz. And PWM will change from 20K to 400K Hz. In 20K ISR, the software may change PRD, CMPA, CMPB at same time.

PWM is up-down mode.  And load PRD and CMP form shadow register.

And sometimes AQ Submodule may miss CAU to turn on PWMA.

I change the PWMA to load time form CC_CTR_ZERO, CC_CTR_PRD,CC_CTR_ZERO_PRD. But the miss is still there.

Is there any other Regs that I am forgetting to configure?

the following code is PWM5 configuration and PWM7 is the same.

        EPwm5Regs.TBCTL.bit.PRDLD = TB_SHADOW;  // set Shadow load
        EPwm5Regs.TBCTL2.bit.PRDLDSYNC = 0;
        EPwm5Regs.TBPRD = 400;               // PWM frequency = 1/(2*TBPRD)
        EPwm5Regs.CMPA.bit.CMPA = 200;   // set duty 50% initially
        EPwm5Regs.CMPA.bit.CMPAHR = 0;   // initialize HRPWM extension
        EPwm5Regs.CMPB.bit.CMPB = 200;   // set duty 50% initially
        EPwm5Regs.CMPB.bit.CMPBHR = 0;
        EPwm5Regs.TBPHS.all = 0;
        EPwm5Regs.TBCTR = 0;

        EPwm5Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Select up-down
                                                        // count mode
        EPwm5Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
        EPwm5Regs.TBCTL.bit.CLKDIV = TB_DIV1;          // TBCLK = SYSCLKOUT
        EPwm5Regs.TBCTL.bit.FREE_SOFT = 11;

        EPwm5Regs.CMPCTL.bit.LOADAMODE = CC_CTR_PRD;  // LOAD CMPA on CTR = PRD
        EPwm5Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
        EPwm5Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
        EPwm5Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;

        EPwm5Regs.AQCTLA.bit.CAU = AQ_CLEAR;             // PWM toggle high/low
        EPwm5Regs.AQCTLA.bit.CAD = AQ_SET;
        EPwm5Regs.AQCTLB.bit.CBU = AQ_SET;             // PWM toggle high/low
        EPwm5Regs.AQCTLB.bit.CBD = AQ_CLEAR;

Thank you for your help