TI中文支持网
TI专业的中文技术问题搜集分享网站

dsp280023产生独立的PWMA和PWMB

利用280023想发出一组如图1所示的频率和占空比相同、相位相差180度的PWMA和PWMB,因此我打算设置AQCTLA动作寄存器在时基计数值为0时,epwmA置高,在时基计数值为CMPA时,epwmA置低;设置AQCTLB动作寄存器在时基计数值为PRD时,epwmB置高,在时基计数值为CMPB时,epwmB置低,但最终却产生了如图2所示频率占空比相同、相位也相同的PWM波,一直没找到其中的原因。

图 1

图 2

Pwm模块寄存器设置有epwm初始化和pwm发波两部分:

初始化配置如下:

       EPwm1Regs.TBPRD = p->PERIOD;

       EPwm1Regs.TBPHS.all = 0;

       EPwm1Regs.TBCTR = 0x0000;

 

       EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; //递增递减计数模式

       EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;         //禁止TBPHS加载到TBCTR

       EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;

      

       EPwm1Regs.EPWMSYNCINSEL.all = 0;

       EPwm1Regs.EPWMSYNCOUTEN.all = 0;

       EPwm1Regs.TBCTL2.bit.OSHTSYNCMODE = 0;

       EPwm1Regs.TBCTL.bit.CLKDIV = 0;           //时间基准时钟预分频位

       EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;       //高速时间基准时钟预分频位

       EPwm1Regs.TBCTL.bit.FREE_SOFT = 11;    

 

       EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;

       EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;

       EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

       EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

 

       EPwm1Regs.AQCTL.bit.SHDWAQAMODE = 0;

       EPwm1Regs.AQCTL.bit.SHDWAQBMODE = 0;

 

       EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;

       EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;

 

       EPwm1Regs.AQCTLB.bit.PRD = AQ_SET;

       EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;

 

       EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;

/*====================================================================*/

       EPwm1Regs.CMPA.bit.CMPA = p->CMPRA;

       EPwm1Regs.CMPB.bit.CMPB = p->CMPRB;

/*====================================================================*/

       EALLOW;

      CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;

       EDIS;

 

Pwm发波配置如下:

       EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;

       EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;

 

       EPwm1Regs.AQCTLB.bit.PRD = AQ_SET;

       EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;

 

       EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;

       EPwm1Regs.DBFED.all = 100;

       EPwm1Regs.DBRED.all = 100;

 

       EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HI;

 

       EPwm1Regs.AQCSFRC.bit.CSFA = 0;

       EPwm1Regs.AQCSFRC.bit.CSFB = 0;

请问是哪里配置错误了?还是忘记配置某个寄存器才产生了图2的pwm波?

Green Deng:

粗看了一下你的配置,似乎并没有问题。我会请其他同事一起查看一下会不会有其他细节方面的问题

,

user6574641:

好的

,

Aiden zhang:

配置有问题,把死区功能关掉。
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; 改为 Pwm1Regs.DBCTL.bit.OUT_MODE = DB_DISABLE;再试试。

,

Green Deng:

也可以试一下给其余事件也指定操作,例如,对于OUTPUT A,CTR = PRD清除输出低电平。 CTR = CMPAD清除输出低电平等

,

user6574641:

对的,把死区关了就可以了,这是什么原理呀?

,

user6574641:

楼上那个方式我试了,波形正常了

,

Aiden zhang:

把PWM 死区模块这一章节仔细阅读一下你就会明白。相信我,只有你仔细阅读,理解了死区的机制你以后才能灵活应用,不然总是一知半解,问题不断。学会了,你以后会感激我的。提醒一点,使能了死区,A和B就必须是有互补关系的。

,

user6574641:

好的,谢谢

赞(0)
未经允许不得转载:TI中文支持网 » dsp280023产生独立的PWMA和PWMB
分享到: 更多 (0)