Part Number:TMS320F28069MOther Parts Discussed in Thread:C2000WARE
在捕获一个短沿的时候CAP1计数未能正常捕获:利润CAP1捕获上升沿,在捕获一个占空比低于3.4%的沿的时候,没能正常捕获到这个上升沿的下降沿,捕获到了下一个周期的下降沿。
Green Deng:
你好,目前来说怀疑的只有中断优先级导致的问题。不知道你的工程中是否有其他持续时间比较长的高优先级中断?
另外,你可以用例程先测试一下,看能否正确采集上升下降沿:C:\ti\c2000\C2000Ware_4_01_00_00\device_support\f2806x\examples\c28\ecap_capture_pwm
,
qi peng:
您好;
实验是基于这个例程修改了部分PWM的生成代码用来产生不同占空比的波形。目前的话是使用的ECAP1,GPIO5作为输入端;目前寄存器CAP1~CAP4中只有CAP1出现了这个问题,当该CAP1记录一个短沿的时候会多记录一个周期。
,
Green Deng:
你好,也就是说,你的例程只是修改了PWM的占空比,然后出现的问题是CAP1会捕获当前一个脉冲的上升沿和下一个脉冲的下降沿?
方便给出一下你的程序修改了哪些语句吗?
,
qi peng:
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;}
将原ecap1_isr代码PWM修改部分删除添加了
EPwm1Regs.TBPRD = tpwm; EPwm1Regs.CMPA.half.CMPA = a; TSt1 = ECap1Regs.CAP1; TSt2 = ECap1Regs.CAP2; TSt3 = ECap1Regs.CAP3; TSt4 = ECap1Regs.CAP4;
,
Green Deng:
收到,我会跟其他工程师核对一下代码后看看是否有问题。