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

TMS320F28035: pwm1与pwm2无法完全同步,总是有固定相位差

Part Number:TMS320F28035

使用28035两路pwm1与pwm2,

增减计数模式,

AQCTLA.BIT.ZRO=AQ_set;

AQCTLA.BIT.CAU=AQ_CLEAR;

PWM1.TBCTL.BIT.PHSEN=TB_DISABLE;

PWM1.TBCTL.BIT.SYNCOSEL=TB_CTR_ZERO

PWM2.TBCTL.BIT.PHSEN=TB_ENABLE;

PWM2.TBCTL.BIT.SYNCOSEL=TB_SYNC_IN

生成的pwm1A与pwm2A不能完全同步,pwm2之后大概52ns的时间,请问是什么原因造成的,谢谢!

song wenbin:

pwm2滞后pwm1大概52ns时间

,

Green Deng:

你好,工程师将在工作时间回复你的问题。

,

Green Deng:

你好,看配置没看出来有什么问题,你可以对比一下芯片TRM中第290页的同步配置example“Example 3-9. Code Snippet for Configuration in Figure 3-56”,看一下有什么不同的地方:www.ti.com.cn/…/sprui10.pdf

,

song wenbin:

你好,就是参考上面的设计例程,包括controlsuilt里的例程。发出来的波形不是完全对齐的。是不是在经过这几个寄存器配置后有延时呢。用的是外部有源晶振。从DSP出来经过一个74HC245就没有其他电路了。你能测试出这个现象吗?下面是配置代码。

EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; EDIS;

//PWM增计数模式

(*ePWM[1]).TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; //TB_COUNT_UPDOWN; (*ePWM[1]).TBCTL.bit.PRDLD = TB_SHADOW;  (*ePWM[1]).TBCTL.bit.PHSEN = TB_DISABLE; (*ePWM[1]).TBCTL.bit.SYNCOSEL = 1; (*ePWM[1]).TBCTL.bit.HSPCLKDIV = TB_DIV1; (*ePWM[1]).TBCTL.bit.CLKDIV = TB_DIV1; 

(*ePWM[1]).TBPRD = period/2;  (*ePWM[1]).CMPA.half.CMPA = 16;  (*ePWM[1]).CMPA.half.CMPAHR = 0;  (*ePWM[1]).CMPB = period/2-16;  (*ePWM[1]).TBPHS.all = 0; (*ePWM[1]).TBCTR = 0; (*ePWM[1]).DBFED = 0; (*ePWM[1]).DBRED = 0;

(*ePWM[1]).CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; (*ePWM[1]).CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;  (*ePWM[1]).CMPCTL.bit.SHDWAMODE = CC_SHADOW;  (*ePWM[1]).CMPCTL.bit.SHDWBMODE = CC_SHADOW;

(*ePWM[1]).AQCTLA.bit.ZRO = AQ_SET;  (*ePWM[1]).AQCTLA.bit.CAU = AQ_CLEAR;  (*ePWM[1]).AQCTLB.bit.CBD = AQ_CLEAR;  (*ePWM[1]).AQCTLB.bit.PRD = AQ_SET; 

(*ePWM[1]).DBCTL.bit.IN_MODE = 0; // (*ePWM[1]).DBCTL.bit.POLSEL = 0;// (*ePWM[1]).DBCTL.bit.OUT_MODE = 2; //

(*ePWM[1]).AQSFRC.bit.RLDCSF = 3; 

//PWM2增计数模式

(*ePWM[2]).TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;  (*ePWM[2]).TBCTL.bit.PHSEN = TB_ENABLE;  (*ePWM[2]).TBCTL.bit.SYNCOSEL = TB_SYNC_IN; (*ePWM[2]).TBCTL.bit.HSPCLKDIV = TB_DIV1;  (*ePWM[2]).TBCTL.bit.CLKDIV = TB_DIV1;  (*ePWM[2]).TBCTL.bit.PRDLD = TB_SHADOW;  //(*ePWM[2]).TBCTL.bit.PHSDIR = TB_UP;

(*ePWM[2]).TBPRD = period/2; (*ePWM[2]).CMPA.half.CMPA = period/2;  (*ePWM[2]).CMPA.half.CMPAHR = 0;  (*ePWM[2]).CMPB = 0;  (*ePWM[2]).TBPHS.half.TBPHS = 0;  (*ePWM[2]).TBCTR = 0;

(*ePWM[2]).CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; (*ePWM[2]).CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;  (*ePWM[2]).CMPCTL.bit.SHDWAMODE = CC_SHADOW;  (*ePWM[2]).CMPCTL.bit.SHDWBMODE = CC_SHADOW;

(*ePWM[2]).AQCTLA.bit.ZRO = AQ_SET;  (*ePWM[2]).AQCTLA.bit.CAU = AQ_CLEAR;  (*ePWM[2]).AQCTLB.bit.CBD = AQ_CLEAR;  (*ePWM[2]).AQCTLB.bit.PRD = AQ_SET; 

(*ePWM[2]).DBCTL.bit.IN_MODE = DBA_ALL; (*ePWM[2]).DBCTL.bit.POLSEL = DB_ACTV_HIC;//DB_ACTV_HIC;  (*ePWM[2]).DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; //

(*ePWM[2]).DBFED = 0; (*ePWM[2]).DBRED = 0; (*ePWM[2]).AQSFRC.bit.RLDCSF = 3; 

EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;//必要配置结束后使能同步信号 EDIS;

,

Green Deng:

你好,确认一下你这边测试到的延迟是52ns?

根据主频60MHz算的话一个时钟周期是16.7ns,52ns应该是3个时钟周期多点,这样的话还算是正常的同步延时。

可以通过:

EPwm1Regs.TBPHS.half.TBPHS=3;

这样设置后可以补偿同步延迟的3个周期。可能在调试的时候回发现并不完全是3个周期,每个PWM都可以根据实际情况调整,因为这也会被外部电路影响.

,

song wenbin:

也就是说按照例程配置也不能完全同步,pwm1A和pwm2A的相位延时是存在的,需要靠相位寄存器修正

,

Green Deng:

是的,理论上也是这样的,因为信号是从PWM1传送到PWM2的,肯定会有一个机械延时。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28035: pwm1与pwm2无法完全同步,总是有固定相位差
分享到: 更多 (0)