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
