TMS320F28379D: EPWM1的TBPRD从影子寄存器加载方式实际效果与设置效果不一致

Part Number: TMS320F28379D

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
interrupt void UserISR(void)
{
if(syncAdjEna == 1)
{
EALLOW;
EPwm1Regs.TBCTL.bit.PRDLD = 0; //Enable shadow
EPwm1Regs.TBCTL2.bit.PRDLDSYNC = 0; //TBCTR = 0:shadow->active
EPwm1Regs.TBPRD = 4166*2;
EDIS;
GpioDataRegs.GPBTOGGLE.bit.GPIO38 = 1;
cnt = 15;
syncAdjEna = 0;
}
if(cnt > 1)
{
if(cnt == 14)
{
EALLOW;
EPwm1Regs.TBCTL.bit.PRDLD = 0; //Enable shadow
EPwm1Regs.TBCTL2.bit.PRDLDSYNC = 0;
EPwm1Regs.TBPRD = 4166;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

目标:UserISR中断中增大EPWM1 TBPRD值(4166*2),下一次进UserISR中断再恢复为原值(4166)

配置基础:EPWM1计数器采用向上向下计数方式,TR=0和TR=PRD时触发EPWM1SOCA,SOCA触发ADC中断,ADCAINT1触发CLA中断,每两次CLA中断触发一次UserISR中断(频率24K,一个周期41.65us)并且翻转IO电平(以此电平作为过零点信号,波形为蓝色所示),UserISR中断里改变TBPRD前翻转另一个IO电平(波形为绿色所示), 配置为:

Fullscreen
1
2
EPwm1Regs.TBCTL.bit.PRDLD = 0; //Enable shadow
EPwm1Regs.TBCTL2.bit.PRDLDSYNC = 0; //TBCTR = 0:shadow->active
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

根据配置,效果应该是蓝色波形其中一个周期变长(时间为41.65*2us),但实际效果为其中两个周期变长(时间为62us,即为41.65us的1.5倍,看起来似乎TBPRD从影子寄存器加载时机并不是设置的零点,而是顶点,这是为什么?),如下图所示:

EPwm1Regs.TBCTL.bit.PRDLD设置为1,立即加载模式,波形是正常的:

请问为什么配置为过零点再从影子寄存器里加载TBPRD值效果不正确?应该如何配置?

  • 感谢您对TI产品的关注!
    已经收到了您的案例,调查需要些时间,感谢您的耐心等待

  • 您好,

         shadow设置没什么问题,但您在中断里面使能,是外部还有代码禁止shadow吗?   

         

           由于只是代码片段,在进入中断时,CNT == 0且syncAdjEna == 0的情况好像没有做处理。

x 出现错误。请重试或与管理员联系。