This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28335频率精度问题

Other Parts Discussed in Thread: CONTROLSUITE

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

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

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

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

    Eric

  • 难道高端的28335还不如28035  ?

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

    Eric

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

  • 28035可以做移相全桥吗?

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

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

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

      

    Eric

  • 首先,非常感谢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 config
    EPwm1Regs.TBPRD = 1200; // Period = 1201 TBCLK counts
    EPwm1Regs.CMPA = 600; // Set 50% fixed duty for EPWM1A
    EPwm1Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Asymmetrical mode
    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Master module
    EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // Sync down-stream module
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero
    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero
    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // set actions for EPWM1A
    EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
    EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
    EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementary
    EPwm1Regs.DBFED = 50; // FED = 50 TBCLKs initially
    EPwm1Regs.DBRED = 70; // RED = 70 TBCLKs initially
    // EPWM Module 2 config
    EPwm2Regs.TBPRD = 1200; // Period = 1201 TBCLK counts
    EPwm2Regs.CMPA.half.CMPA = 600; // Set 50% fixed duty EPWM2A
    EPwm2Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero initially
    EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Asymmetrical mode
    EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Slave module
    EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
    EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // sync flow-through
    EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR=Zero
    EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR=Zero
    EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET; // set actions for EPWM2A
    EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;
    EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
    EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active Hi complementary
    EPwm2Regs.DBFED = 30; // FED = 30 TBCLKs initially
    EPwm2Regs.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 deg
    EPwm1Regs.DBFED = FED1_NewValue; // Update ZVS transition interval
    EPwm1Regs.DBRED = RED1_NewValue; // Update ZVS transition interval
    EPwm2Regs.DBFED = FED2_NewValue; // Update ZVS transition interval
    EPwm2Regs.DBRED = RED2_NewValue; // Update ZVS transition interval
    EPwm1Regs.CMPB = 200; // adjust point-in-time for ADCSOC trigger

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

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

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