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.

[参考译文] TMS320F28033:什么情况会导致此 PWM 计数/TBCTR 在所有 PWM 模块中不同步?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1289798/tms320f28033-what-circumstances-would-cause-this-pwm-count-tbctr-to-be-out-of-sync-in-all-pwm-module

器件型号:TMS320F28033

您好、专家!

我要求为我的客户提供服务。

现象:客户/他们使用 F28033执行 PSU、并且在 PWM INIT 操作时、在所有 PWM 模块中错过了 TBCTR = 0x0000。 当他们在半负载 条件下测试代码时、PWM1和 PWM2 模块5个 TBCLK 不同步。  

您可以参考以下 PWM 初始化代码、它们不初始化 TBCTR、但遵循了 下面的时基时钟同步、并且 S/W 强制 软件同步。 因此、在理论上、所有 PWM 模块应同时开始工作、而时基(TB)子模块也是同步的。

1)、我们在没有负载 条件的情况下在 EVM 或客户的板上测试代码、PWM1和 PWM2 PWM1和 PWM2是同步的  、但我们在半负载条件下测试代码、PWM1和 PWM2 PWM1和 PWM2 模块5个 TBCLK 不同步、不同步。  

如果我们添加以 在 All PWM 模块中初始化 TBCTR = 0x0000、则 在任何情况下都将同步所有 PWM 模块(加载条件)。 同时、一切看起来都 很好。 所以、 如果在 PWM 初始化时 TBCTR 不清、有什么风险吗? 哪些情况会导致此 PWM 计数//TBCTR 在所有 PWM 模块中不同步? 谢谢。

void InitEPwm1(void)
{
       // EPWM1 config 
       EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD;
       EPwm1Regs.TBPHS.half.TBPHS = 0;
       EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE;
       EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;           // Pass through 
       EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;   // up/down Count 
       EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
       //TBPRD is loaded from its shadow register on Counter = 0 event (CTR_zero)
       //TBCLK=SYSCLKOUT/(HSPCLKDIV * CLKDIV)=SYSCLKOUT
       EPwm1Regs.TBCTL.bit.CLKDIV =  TB_DIV1;                            //Timebase clock pre-scale
       EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;               //High speed time pre-scale
       EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_PRD;                // Select INT on Zero event
       EPwm1Regs.ETSEL.bit.INTEN = 0;                                   //  enable INT
       EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;                          // Generate INT on 1st event
       EPwm1Regs.ETCLR.all = 0x000F ;                                   //clear all ETFLAG

       EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA;
       EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO_PRD;
       EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO_PRD;
       EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
       EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
       

       EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;    //for Piccolo HRPWM AQ_SET
       EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;

       //Setup Deadband  
       EPwm1Regs.DBCTL.bit.OUT_MODE = DBB_ENABLE;                     //S1=1,S0=0
    EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HI;                 //S3=0,S2=0
    EPwm1Regs.DBCTL.bit.IN_MODE = DBA_RED_DBB_FED;          //S5=1,S4=0
    EPwm1Regs.DBRED = DC_DB_TIME_300NS;                             //DC_DB_TIME_100NS;


    EPwm1Regs.HRCNFG.all = 0x0;//lzy 
    EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO_PRD;
       EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP;
       EPwm1Regs.HRCNFG.bit.EDGMODE = HR_BEP;//rising and falling edge

       EPwm1Regs.HRCNFG.bit.AUTOCONV = AUTOCONV_AUTO;  // Enable autoconversion
    EPwm1Regs.HRPCTL.bit.HRPE=0x01; // Turn on high-resolution period control.
    EPwm1Regs.HRPCTL.bit.TBPHSHRLOADE = 1;

}

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

    您好、绍兴市

     在初始化阶段设置模块时、最佳做法始终是将 EPWM 时基计数器初始化为一个值(即 TBCTR = 0x000)。 这是确保模块正确启动的最佳方法。 另请注意、  TRM 第 3.2.2.3.3节 " EPWMxSYNCI: 同步输入脉冲"、可以  使用 TBPHS  进行相应调整 并生成完美同步的 PWM 来进行调节(类似地、在其他器件上也可以看到、如 本主题中所述)。 我认为、如果将 EPWM 的 TBCTR=0设置为0、 执行此操作时可能允许 EPWM2同步发生(因为 EPWM2使用 EPWM1 SYNCOUT)。 EPWM1同步输入源是什么?  关于在半负载和不负载情况下出现延迟的原因、我 不明白 PSU 系统负载为何会影响这一点、但无论如何都应设置 TBCTR=0。

    此致、

    艾里森

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

    尊敬的 Allison:

    好的。 我们也 对这个问题案例很好奇。 我们不知道为什么  PWM1和 PWM2模块在负载条件下有5个 TBCLK 不同步。

    实际上、我们在客户电路板上无 条件测试了代码、PWM1和 PWM2始终同步。 因此、很难知道为什么会有这种差异?  

    即使 同步输入脉冲延迟只有2个 TBCLK、但我们范围内它有 5个 TBCLK 延迟。 为什么会这样? 谢谢。

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

    尊敬的 Allison:

    您可以看到以下有关 EPWM2 INIT 的代码、客户也已设置 TBPHS。

    EPwm2Regs.TBPHS.half.TBPHS = 1; 我会让客户尝试 TBPHS = 2来验证问题。

    void InitEPwm2(void)
    {
    
           // EPWM2 config 
           EPwm2Regs.TBPRD = EPWM1_TIMER_TBPRD;
           EPwm2Regs.TBPHS.half.TBPHS = 1;
           EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;//TB_ENABLE;//lzy for TBPRDHR
           EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;    // Pass through 
           EPwm2Regs.TBCTL.bit.PHSDIR = TB_UP;          //Phase Direction Down
           
           EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;   // up/down Count
           EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
           //TBCLK=SYSCLKOUT/(HSPCLKDIV * CLKDIV)=SYSCLKOUT
           EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;                      //Timebase clock pre-scale
           EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;               //High speed time pre-scale
           EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_PRD;                // Select INT on Prd event
           EPwm2Regs.ETSEL.bit.INTEN = 0;// Disable INT
           EPwm2Regs.ETPS.bit.INTPRD = ET_1ST;                          // Generate INT on 1st event
           EPwm2Regs.ETCLR.all = 0x000F ;              //clear all ETFLAG 
           
           EPwm2Regs.CMPA.half.CMPA = EPWM1_MAX_CMPA;//lzy 20091228
           EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO_PRD;
           EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO_PRD;
           EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
           EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
           
    
           EPwm2Regs.AQCTLA.bit.CAU = AQ_SET    ;//for Piccolo HRPWM                              
           EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR; 
    
           //Setup Deadband  
           EPwm2Regs.DBCTL.bit.OUT_MODE = DBB_ENABLE;                     //S1=1,S0=0
        EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HI;                 //S3=0,S2=0
        EPwm2Regs.DBCTL.bit.IN_MODE = DBA_RED_DBB_FED;          //S5=1,S4=0
        EPwm2Regs.DBRED = DC_DB_TIME_300NS;                             //DC_DB_TIME_100NS;
    
    
        EPwm2Regs.HRCNFG.all = 0x0;//lzy 
        EPwm2Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO_PRD;
           EPwm2Regs.HRCNFG.bit.CTLMODE = HR_CMP;
           EPwm2Regs.HRCNFG.bit.EDGMODE = HR_BEP;//rising and falling edge
    
           EPwm2Regs.HRCNFG.bit.AUTOCONV = AUTOCONV_AUTO;  // Enable autoconversion
        EPwm2Regs.HRPCTL.bit.HRPE = 0x01; // Turn on high-resolution period control.
           EPwm2Regs.HRPCTL.bit.TBPHSHRLOADE = 1;      
    
    }
    

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

    您好、绍兴市

    很难判断负载条件下行为不同的确切原因、 但一种理论 可能是 5 TBLCK 延迟 在施加负载和控制环路频率期间与补偿器相关-或者可能存在一些加重的现有固有延迟、但很难确定确切的硬件设置。 无论如何、最好仍然将 TBCTR=0设置为初始化、并且如前所述、使用 TBPHS 与此项可省略固有延迟。 如果客户看到不同的 TBPHS 值结果、请告诉我、如果您在此处有进一步的查询、请告诉我。

    此致、

    艾里森

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

    尊敬的  Allison:

    实际上、我不知道这里的情况。 您能给我们更详细的信息吗?

    但有一个理论   可能是5 TBLCK 延迟在施加负载和控制环路频率期间可能与补偿器有关-或者可能存在现有固有延迟的某种加重[/引述]

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

    您好、绍兴市

    该理论只是我关于这方面的最初想法、但我不是很熟悉  电子负载 会影响 TBCLK 延迟的原因。 请允许我就此向其他 PWM 专家咨询、我会最迟在今天或周一结束前向您提供更多信息。

    此致、

    艾里森

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

    您好、绍兴市

     这里我还有几个问题、首先是为了得到一个更好的想法: 你是否能够 分享一些更多的软件 流/ISR 代码来了解程序中正在做的其他工作? 软件中是否有任何与负载相关的内容(即 在某些 负载条件下是否正在软件中执行任何操作)?

    此致、

    艾里森