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

28335频率精度问题

请问  28335的EPWM模块EPwm1Regs.TBPRD = 7499;时  产生的频率为20.000KHZ,

如果我要得到20.001KHZ时,对TBPRD赋值为7498  PWM产生的是20.003KHZ,

如何解决此问题.请高手指导一下.

Eric Ma:

应该避免不了这个问题,因为28335的HRPWM是type0的,没有HR period的功能,所以没办法把少于一个TBCLK的计时用HRPWM功能来实现。像piccolo 28035, 28069等芯片中的HRPWM是type1的,就有HR period功能,就能避免这个误差。

Eric

请问  28335的EPWM模块EPwm1Regs.TBPRD = 7499;时  产生的频率为20.000KHZ,

如果我要得到20.001KHZ时,对TBPRD赋值为7498  PWM产生的是20.003KHZ,

如何解决此问题.请高手指导一下.

NO NO1:

回复 Eric Ma:

难道高端的28335还不如28035  ?

请问  28335的EPWM模块EPwm1Regs.TBPRD = 7499;时  产生的频率为20.000KHZ,

如果我要得到20.001KHZ时,对TBPRD赋值为7498  PWM产生的是20.003KHZ,

如何解决此问题.请高手指导一下.

Eric Ma:

回复 NO NO1:

各有所长,28335的主频和存储都远高于28035,另外,piccolo 28035是在28335之后发布的,所以对它的外设进一步优化。

Eric

请问  28335的EPWM模块EPwm1Regs.TBPRD = 7499;时  产生的频率为20.000KHZ,

如果我要得到20.001KHZ时,对TBPRD赋值为7498  PWM产生的是20.003KHZ,

如何解决此问题.请高手指导一下.

NO NO1:

回复 Eric Ma:

那请问如果我换成2808或是2801 行不行,还有2801和2808有什么区别,?

请问  28335的EPWM模块EPwm1Regs.TBPRD = 7499;时  产生的频率为20.000KHZ,

如果我要得到20.001KHZ时,对TBPRD赋值为7498  PWM产生的是20.003KHZ,

如何解决此问题.请高手指导一下.

NO NO1:

回复 NO NO1:

28035可以做移相全桥吗?

请问  28335的EPWM模块EPwm1Regs.TBPRD = 7499;时  产生的频率为20.000KHZ,

如果我要得到20.001KHZ时,对TBPRD赋值为7498  PWM产生的是20.003KHZ,

如何解决此问题.请高手指导一下.

Eric Ma:

回复 NO NO1:

280x跟2833x的HRPWM是同个类型的,参照下图:

28035可以做移向全桥,TI的移向全桥实验板是用28027做的。在ControlSUITE软件上可以看到。

另外2808与2801的区别可以由下图看到

  

Eric

请问  28335的EPWM模块EPwm1Regs.TBPRD = 7499;时  产生的频率为20.000KHZ,

如果我要得到20.001KHZ时,对TBPRD赋值为7498  PWM产生的是20.003KHZ,

如何解决此问题.请高手指导一下.

NO NO1:

回复 Eric Ma:

首先,非常感谢Eric Ma 的耐心指导,再问如下问题?

下面是官方的移相例程,

我公司产品要求频率精度从14.700KHZ以1HZ量 增加到28.100KHZ

以下例程没有用到TBPRDHR这个寄存器,也就不可能实现以上精度要求.

当没有用到TBPRDHR寄存器时,频率计算公式是TPWM = (TBPRD + 1) x TTBCLK

                                                                                     FPWM = 1/ (TPWM)

如果使用TBPRDHR寄存器的频率如何计算?

请Eric Ma 先生在以下例程指点如何实现上述功能.非常感谢!

 

//=====================================================================// Config//=====================================================================// Initialization Time//========================// EPWM Module 1 configEPwm1Regs.TBPRD = 1200; // Period = 1201 TBCLK countsEPwm1Regs.CMPA = 600; // Set 50% fixed duty for EPWM1AEPwm1Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zeroEPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Asymmetrical modeEPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Master moduleEPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // Sync down-stream moduleEPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=ZeroEPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=ZeroEPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // set actions for EPWM1AEPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band moduleEPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementaryEPwm1Regs.DBFED = 50; // FED = 50 TBCLKs initiallyEPwm1Regs.DBRED = 70; // RED = 70 TBCLKs initially// EPWM Module 2 configEPwm2Regs.TBPRD = 1200; // Period = 1201 TBCLK countsEPwm2Regs.CMPA.half.CMPA = 600; // Set 50% fixed duty EPWM2AEPwm2Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero initiallyEPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Asymmetrical modeEPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Slave moduleEPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // sync flow-throughEPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=ZeroEPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=ZeroEPwm2Regs.AQCTLA.bit.ZRO = AQ_SET; // set actions for EPWM2AEPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band moduleEPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementaryEPwm2Regs.DBFED = 30; // FED = 30 TBCLKs initiallyEPwm2Regs.DBRED = 40; // RED = 40 TBCLKs initially// Run Time (Note: Example execution of one run-time instant)//============================================================EPwm2Regs.TBPHS = 1200-300; // Set Phase reg to 300/1200 * 360 = 90 degEPwm1Regs.DBFED = FED1_NewValue; // Update ZVS transition intervalEPwm1Regs.DBRED = RED1_NewValue; // Update ZVS transition intervalEPwm2Regs.DBFED = FED2_NewValue; // Update ZVS transition intervalEPwm2Regs.DBRED = RED2_NewValue; // Update ZVS transition intervalEPwm1Regs.CMPB = 200; // adjust point-in-time for ADCSOC trigger

请问  28335的EPWM模块EPwm1Regs.TBPRD = 7499;时  产生的频率为20.000KHZ,

如果我要得到20.001KHZ时,对TBPRD赋值为7498  PWM产生的是20.003KHZ,

如何解决此问题.请高手指导一下.

10#:

回复 NO NO1:

如果使用的仍然是F2833x芯片,则如Eric所说,是输出不了你提到的这些频率点的。

如果使用支持ePWM周期高精度的Piccolo系列来实现,建议查看一下Piccolo HrPWM的用户手册,里面有详细的说明和例子介绍如何计算。

简单来说,TBPRD与之前一样,相当于一个整数,而增加的是HR部分,相当于小数部分。

赞(0)
未经允许不得转载:TI中文支持网 » 28335频率精度问题
分享到: 更多 (0)