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.

TMS320F28069M: Question about eCAP module

Part Number: TMS320F28069M
Other Parts Discussed in Thread: C2000WARE

Dear team:

C:\ti\c2000\C2000Ware_4_01_00_00\device_support\f2806x\examples\c28\ecap_capture_pwm

After modifying the PWM duty cycle in the above routine, my customer found that cap1 can only capture the rising edge of the current pulse and the falling edge of the next pulse.

What may be the reason?

Below is the code:

InitEPwmTimer()
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;

EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//TB_COUNT_UP; // Count up
EPwm1Regs.TBPRD = 8000;//PWM3_TIMER_MAX;
EPwm1Regs.TBPHS.all = 0x00000000;

EPwm1Regs.CMPCTL.bit.SHDWAMODE = 1;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = 1;
EPwm1Regs.CMPA.half.CMPA =4000;
EPwm1Regs.CMPB = (Uint16)4000;

EPwm1Regs.AQCTLA.bit.CAU = 2;
EPwm1Regs.AQCTLA.bit.CAD = 1;
EPwm1Regs.AQCTLB.bit.CAU = 2;
EPwm1Regs.AQCTLB.bit.CAD = 1;
//EPwm1Regs.AQCTLA.bit.PRD = AQ_TOGGLE; // Toggle on PRD

EPwm1Regs.DBCTL.bit.IN_MODE = 2;
EPwm1Regs.DBCTL.bit.POLSEL = 2;
EPwm1Regs.DBCTL.bit.OUT_MODE = 3;
//
// TBCLK = SYSCLKOUT
//
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 1;
EPwm1Regs.TBCTL.bit.CLKDIV = 0;

//EPwm6TimerDirection = EPWM_TIMER_UP;

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

Delete the PWM modification part of the original ecap1_isr code and add the following code:

EPwm1Regs.TBPRD = tpwm;
EPwm1Regs.CMPA.half.CMPA = a;
TSt1 = ECap1Regs.CAP1;
TSt2 = ECap1Regs.CAP2;
TSt3 = ECap1Regs.CAP3;
TSt4 = ECap1Regs.CAP4;

Best regards