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.

[参考译文] TMS320F28379D:死区延迟实际值和理论值不匹配

Guru**** 2589275 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1117194/tms320f28379d-dead-band-delay-actual-and-theoretical-values-do-not-match

器件型号:TMS320F28379D

大家好、

以下是客户提出的问题、可能需要您的帮助:

客户希望生成具有死区的互补 HRPWM。 死区时间为40ns、但通过高分辨率比较 A、死区时间会受到影响。 死区通过使用高分辨率 DB 死区并向原始 DB 死区添加特定的高分辨率延迟来进行补偿。 但是、示波器测量结果发现实际和理论死区时间延迟值不匹配。 以下是代码:

void UserInitEpwm3()
{

    EPwm3Regs.CMPA.bit.CMPA =33; //EPWM_CMP3A;
    //EPwm3Regs.CMPB.bit.CMPB = EPWM_CMP3B;//33;
    EPwm3Regs.TBPRD = 99;              /*Time Base Period Register*/
    EPwm3Regs.CMPA.bit.CMPAHR =  12096;//EPWM_CMP3AHR;  //25*256;// 10688;
    //EPwm3Regs.CMPB.bit.CMPBHR =0; //12096;




    EPwm3Regs.TBCTL.bit.CLKDIV = 0x0;         /*Time Base Clock Pre-Scale Bits*/
    EPwm3Regs.TBCTL.bit.CTRMODE = 0x0;       /*Counter Mode*/
    EPwm3Regs.TBCTL.bit.FREE_SOFT = 0;            /*Emulation Mode Bits*/
    EPwm3Regs.TBCTL.bit.HSPCLKDIV = 0x0;      /*High Speed Time Base Clock Pre-Scale Bits*/
    EPwm3Regs.TBCTL.bit.PHSDIR = 0x1;         /*Phase Direction Bit*/
    EPwm3Regs.TBCTL.bit.PHSEN = 0x1;           /*Counter Reg Load from Phase Reg Enable*/
    EPwm3Regs.TBCTL.bit.PRDLD = 0x1;        /*Active Period Reg Load from Shadow Select*/
    /*PWM.TBCTL.bit.SWFSYNC*/
   // EPwm3Regs.TBCTL.bit.SYNCOSEL = 0x3;     /*Sync Output Select*/
    EPwm3Regs.TBCTL.bit.SYNCOSEL =0x3;
    EPwm3Regs.TBCTR = 0;                     /*Time Base Counter Register*/
    EPwm3Regs.TBPHS.bit.TBPHS = 0;           /*Phase Offset Register*/

/*------------------------------Counter-Compare Submodule----------------------------------------*/
    EPwm3Regs.CMPCTL.bit.SHDWAMODE = 0x0;
    EPwm3Regs.CMPCTL.bit.SHDWBMODE = 0x0;
    EPwm3Regs.CMPCTL.bit.LOADAMODE = 0x0;
    EPwm3Regs.CMPCTL.bit.LOADBMODE = 0x0;
   // EPwm3Regs.CMPA.bit.CMPA = EPWM_CMP4A;
   // EPwm3Regs.CMPB.bit.CMPB = 0;
/*------------------------------Action-Qualifier Submodule---------------------------------------*/
    EPwm3Regs.AQCTLA.bit.ZRO= 0x2;
    EPwm3Regs.AQCTLA.bit.CAU = 0x1;
    EPwm3Regs.AQCTLB.bit.ZRO = 0x2;
    EPwm3Regs.AQCTLB.bit.CBU = 0x1;
    EPwm3Regs.AQSFRC.bit.RLDCSF = 0;
    EPwm3Regs.AQCSFRC.bit.CSFA = 0;
    EPwm3Regs.AQCSFRC.bit.CSFB = 0;
/*------------------------------Dead-Band Submodule----------------------------------------------*/
    EPwm3Regs.DBCTL.bit.HALFCYCLE   =   1;
    EPwm3Regs.DBCTL.bit.IN_MODE = 0;
    EPwm3Regs.DBCTL.bit.OUT_MODE = 0x3;
    EPwm3Regs.DBCTL.bit.POLSEL = 0x2;
    EPwm3Regs.DBFED.bit.DBFED =DB_DBFED+1;
    EPwm3Regs.DBRED.bit.DBRED = DB_DBFED;
/*------------------------------PWM-Chopper Control Submodule------------------------------------*/
 //   EPwm3Regs.PCCTL.bit.CHPEN = 0;    /*PWM-Chopping Enable*/

   EALLOW;

   EPwm3Regs.HRCNFG.all = 0x0;
   EPwm3Regs.HRCNFG.bit.EDGMODE = HR_FEP;          // MEP control on both edges
   EPwm3Regs.HRCNFG.bit.CTLMODE = HR_CMP;          // CMPAHR and TBPRDHR HR control
   EPwm3Regs.HRCNFG.bit.HRLOAD  = HR_CTR_ZERO_PRD; // load on CTR = 0 and CTR = TBPRD
   EPwm3Regs.HRCNFG.bit.EDGMODEB = HR_FEP;          // MEP control on both edges
   EPwm3Regs.HRCNFG.bit.CTLMODEB = HR_CMP;          // CMPBHR and TBPRDHR HR control
   EPwm3Regs.HRCNFG.bit.HRLOADB  = HR_CTR_ZERO_PRD; // load on CTR = 0 and CTR = TBPRD
  //EPwm3Regs.HRCNFG.bit.AUTOCONV = 1;              // Enable autoconversion for HR period

   EPwm3Regs.HRCNFG2.bit.CTLMODEDBFED = 0x2;
   EPwm3Regs.HRCNFG2.bit.CTLMODEDBRED = 0x2;
   EPwm3Regs.HRCNFG2.bit.EDGMODEDB =   0x2;
   EPwm3Regs.DBFEDHR.bit.DBFEDHR = 39*256;


   EPwm3Regs.HRPCTL.bit.TBPHSHRLOADE = 1;          // Enable TBPHSHR sync (required for updwn count HR control)
   EPwm3Regs.HRPCTL.bit.HRPE = 1;                  // Turn on high-resolution period control.

   EPwm3Regs.TBCTL.bit.SWFSYNC = 1;                // Synchronize high resolution phase to start HR period

   EDIS;


}
interrupt void cpu_timer0_isr(void)
{

    epwm3a_integra = (long)(TB_TBPRD_DIV2 + TB_TBPRD_DIV2 * AC_MI * fSinTable[SysTick]);
    epwm3a_frac = (TB_TBPRD_DIV2 + TB_TBPRD_DIV2 * AC_MI * fSinTable[SysTick])-epwm3a_integra;
    epwm4a_integra = (long)(TB_TBPRD_DIV2 + TB_TBPRD_DIV2 * AC_MI * fSinTable[SysTick]);
    epwm4a_frac = (TB_TBPRD_DIV2 + TB_TBPRD_DIV2 * AC_MI * fSinTable[SysTick])-epwm4a_integra;


    EPWM_CMP3A =  epwm3a_integra;
    EPWM_CMP3AHR = (long)(epwm3a_frac * MEP_ScaleFactor + 0.5) <<8;
    EPWM_CMP4A =  epwm4a_integra;
    EPWM_CMP4AHR = (long)(epwm4a_frac * MEP_ScaleFactor + 0.5) <<8;


    EPWM3_DBFED = DB_DBFED + (long)(epwm3a_frac * 2);
    epwm3a_DB_frac = epwm3a_frac*2 - (long)(epwm3a_frac * 2);
    EPWM4_DBFED = DB_DBFED + (long)(epwm4a_frac * 2);
    epwm4a_DB_frac = epwm4a_frac*2 - (long)(epwm4a_frac * 2);


    EPWM3_DBFEDHR = (long)(epwm3a_DB_frac * MEP_ScaleFactor + 0.5)<<9;
    EPWM4_DBFEDHR = (long)(epwm4a_DB_frac * MEP_ScaleFactor + 0.5)<<9;


    SysTick ++;
    if(SysTick >= 1000)      SysTick = 0;

   // Acknowledge this interrupt to receive more interrupts from group 1
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   // Acknowledge interrupt to PIE
   //CpuTimer0Regs.TCR.bit.TIF = 1;     //Clear INT SEQ1 bit
   CpuTimer0Regs.TCR.bit.TRB = 1;     //override initial value
}

请帮您检查是否有任何问题? 谢谢。

此致、

樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cherry、

    [引用 userid="496057" URL"~/support/microrims/C2000-microset-group/C2000/f/C2000-microset-forum/1117194/tms320f28379d-dead-band delay-actual-and-理论 值-do-not match "]客户希望生成具有死区的互补 HRPWM

    我注意到计数器模式设置为向上计数模式。 您能否尝试使用向上/向下计数模式。 如果使用 HRPWM、则在使用向上计数模式时不支持死区。

    这是 F28003x TRM 的一个片段。 我们尚未更新 F2837x TRM、但相同的注释适用:

    此致、

    Marlyn

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Marlyn、

    感谢您的支持。

    客户在例程之后被设置为向上/向下计数模式、但 BEP 和 REP 控制模式都已尝试、并且 PWM 波形边沿延迟不正确。  

           (*ePWM[4]).TBCTL.bit.PRDLD = TB_SHADOW;  // Set Immediate load
    
            //
            // PWM frequency = 1 / PeriodConfig
            //
            (*ePWM[4]).TBPRD = 100;
    
            //
            // Set duty 50% initially and initialize HRPWM extension
            //
            (*ePWM[4]).CMPA.bit.CMPA = 40;
            (*ePWM[4]).CMPA.bit.CMPAHR = (40<< 8);
            (*ePWM[4]).CMPB.bit.CMPB = 40;
            //(*ePWM[4]).CMPB.bit.CMPBHR = (1 << 8);
            (*ePWM[4]).TBPHS.all = 0;
            (*ePWM[4]).TBCTR = 0;
    
            (*ePWM[4]).TBCTL.bit.CTRMODE = 0x02;
            (*ePWM[4]).TBCTL.bit.PHSEN = 0x1;   // ePWM1 is the Master
            (*ePWM[4]).HRPCTL.bit.TBPHSHRLOADE = 1;
            (*ePWM[4]).TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
            (*ePWM[4]).TBCTL.bit.HSPCLKDIV = TB_DIV1;
            (*ePWM[4]).TBCTL.bit.CLKDIV = TB_DIV1;
    
            //
            // LOAD CMPA on CTR = ZERO_PRD
            //
            (*ePWM[4]).CMPCTL.bit.LOADAMODE = CC_CTR_ZERO_PRD;
            (*ePWM[4]).CMPCTL.bit.LOADBMODE = CC_CTR_ZERO_PRD;
    
            (*ePWM[4]).CMPCTL.bit.SHDWAMODE = CC_SHADOW;
            (*ePWM[4]).CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    
            (*ePWM[4]).AQCTLA.bit.CAU = AQ_SET;
            (*ePWM[4]).AQCTLA.bit.CAD = AQ_CLEAR;
            (*ePWM[4]).AQCTLB.bit.CBU = AQ_SET;
            (*ePWM[4]).AQCTLB.bit.CBD = AQ_CLEAR;
    
            EALLOW;
    
            //(*ePWM[4]).HRCNFG.all = 0x1353;
            (*ePWM[4]).HRCNFG.all = 0x0;
            (*ePWM[4]).HRCNFG.bit.EDGMODE = HR_REP;          // MEP control on both edges
            (*ePWM[4]).HRCNFG.bit.CTLMODE = HR_CMP;          // CMPAHR and TBPRDHR HR control
            (*ePWM[4]).HRCNFG.bit.HRLOAD  = HR_CTR_ZERO_PRD; // load on CTR = 0 and CTR = TBPRD
            (*ePWM[4]).HRCNFG.bit.EDGMODEB = HR_REP;          // MEP control on both edges
            (*ePWM[4]).HRCNFG.bit.CTLMODEB = HR_CMP;          // CMPBHR and TBPRDHR HR control
            (*ePWM[4]).HRCNFG.bit.HRLOADB  = HR_CTR_ZERO_PRD;
            //
            // Turn on high-resolution period control
            //
            (*ePWM[4]).HRPCTL.bit.HRPE = 1;
    
            //
            // Synchronize high resolution phase to start HR period
            //
            (*ePWM[4]).TBCTL.bit.SWFSYNC = 1;
           // (*ePWM[4]).TBCTL.bit.PHSEN = 0x0;
    
            (*ePWM[4]).GLDCFG.bit.CMPA_CMPAHR = 1;
            (*ePWM[4]).GLDCFG.bit.CMPB_CMPBHR = 1;
    
            //
            // Load on CTR = ZERO_PRD (2) / ZERO (1)
            //
            (*ePWM[4]).GLDCTL.bit.GLDMODE = 2;
    
            //
            // One shot mode and global load enabled
            //
           // (*ePWM[4]).GLDCTL.bit.OSHTMODE = 1;
            (*ePWM[4]).GLDCTL.bit.GLD = 1;
    
            //
            // Write to PWM1 GLDCTL2 will result in simultaneous write to PWM2 GLDCTL2
            //
            //(*ePWM[4]).EPWMXLINK.bit.GLDCTL2LINK =;
            //(*ePWM[4]).DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
            //(*ePWM[4]).DBCTL.bit.POLSEL = DB_ACTV_HIC;
            //(*ePWM[4]).DBCTL.bit.IN_MODE = DBA_ALL;
            //(*ePWM[4]).DBCTL.bit.SHDWDBREDMODE = 1;
            //(*ePWM[4]).DBCTL.bit.SHDWDBFEDMODE = 1;
            //(*ePWM[4]).DBCTL.bit.LOADREDMODE = 0;    // Load on Counter == 0
            //(*ePWM[4]).DBCTL.bit.LOADFEDMODE = 0;    // Load on Counter == 0
            //(*ePWM[4]).DBCTL.bit.HALFCYCLE = 1;
            //(*ePWM[4]).DBRED.bit.DBRED = 0;
            //(*ePWM[4]).DBREDHR.bit.DBREDHR = 0x0;
            //(*ePWM[4]).DBFED.bit.DBFED = 0;
            //(*ePWM[4]).DBFEDHR.bit.DBFEDHR = 0x0;
    
            //(*ePWM[4]).HRCNFG2.bit.EDGMODEDB = HR_BEP;    // DBREDHR and DBFEDHR
            //(*ePWM[4]).HRCNFG2.bit.CTLMODEDBRED = 0; // Load on ZRO
           // (*ePWM[4]).HRCNFG2.bit.CTLMODEDBFED = 0; // Load on ZRO
           // (*ePWM[4]).DBREDHR.bit.DBREDHR = (0 << 9);
    
            EDIS;

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Cherry

    [引用 userid="496057" URL"~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1117194/tms320f28379d-dead-band delay-actual-and-理论 值-do-not 匹配/4143815#4143815"REP]客户已尝试设置 PWM 模式、但未按照 PWM 模式进行波形跟踪和倒计时。  [/报价]

    您能否解释一下预期值与测量值之间的关系?

    此致、

    Marlyn