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.

[参考译文] TMS320F2.8027万:HRPWM占空比的限制

Guru**** 2528000 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/640265/tms320f28027-limitation-of-hrpwm-duty-cycle

部件号:TMS320F2.8027万

               我使用TI piccolo TMS320F2.8027万。 我有一个问题,如果没有您的帮助,我还无法解释。 我认为是占空比范围限制导致了我的问题:
               我的方案是由MCU控制的降压转换器。 我尝试将占空比设置为0以确保抑制降压。 我处于待机模式。 在我们生产的所有产品(超过3万个)中,我没有看到我的问题,只有一个产品有问题。 我看到的占空比为每0.5毫秒50毫秒(2KHz)。 我的开关频率为100KHz。 我不理解这个2KHz的小脉冲。 它可能来自占空比范围限制,其中前三个周期是ePWMxA输出上未定义的行为。
               因此,当我需要0 % 时,此占空比范围限制是否会产生重复的占空比? 是可重复还是随机?

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

    如果禁用此设备上的HRPWM功能,是否仍会出现故障?
    您如何将占空比设置为0 % ?
    您的SYSCLK频率是多少?
    您是否正在使用死区等其他功能? 对配置进行一般性概述会很有帮助。

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

     您好,Kris:

      我的问题仅出现在一个产品上。 在3万相同的其他产品上,当我将PWM置于0 % 待机模式时,我看不到此脉冲。

    我只是想知道,如果PWM打开并且值为0,是否可能在2KHz创建此脉冲,因为在前三个周期中占空比未知? 我的PWM为100KHz。

      要设置占空比,我使用带变量的PID回路。 我为循环的设定点输入IQ (- 0.2):   

     RampeSoftStart_Buck1.targetValue = init_Rampe;   
      RampeSoftStart_Buck1.SetpointValue = init_Rampe;

     为了确保PID不会导致此脉冲,我们在PWM输出未改变的情况下对ADC电压测量值短路,因此不存在干扰。

     PWM的配置为(2个PWM交错,因此它仅为下面PWM1的配置)

    void HRPWM1_Config (UINT16第1段)

     /*使用HRPWM的ePWM1寄存器配置
     ePWM1A在上升沿上使用MEP控制切换低/高
     设置TBCLK */
     EALLOW;

     EPwm1Regs.TBCTL.bit.PRDLD  = TB_immediate;  /*设置立即加载*/
     EPwm1Regs.TBPRD    =周期1 - 1;  /* PWM频率= 1 /周期*/
     /*设置比较值*/
     EPwm1Regs.CMPA.Halt.CMPA  = 0U;    /*最初设置占空比50 % */
       EPwm1Regs.CMPA.Half.CMPAHR  = 0U;    /*初始化HRPWM扩展*/
     EPwm1Regs.CMBB     = 0U;    /* Set Duty 50 % initially */(初始设定占空比)
     EPwm1Regs.TBPHS.ALL   = 0U;
     EPwm1Regs.TBCTR    = 0U;

     /*设置计数器模式*/
     EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
     EPwm1Regs.TBCTL.bit.PHSEN  = TB_DISABLE;
     EPwm1Regs.TBCTL.bit.SYNCOSEL = ET_CTR_PRD;   
     EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
     EPwm1Regs.TBCTL.bit.CLKDIV  = TB_DIV1;

     /*设置阴影*/
     EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
     EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
     EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
     EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADO;


     /*设置操作PWM切换低/高*/
     EPwm1Regs.AQCTLA.bit.ZRO  = AQ_SET;  /* PWM切换低/高*
     EPwm1Regs.AQCTLA.bit.CAU  = AQ_CLEAR;

     EPwm1Regs.AQCTLB.bit.ZRO  = AQ_SET;
     EPwm1Regs.AQCTLB.bit.CBU  = AQ_CLEAR;

     EDIS;
    }

    系统控制配置为:

    /*------------------
     InitSysCtrl:
    ----------------------------------
     此函数将系统控制寄存器初始化为已知状态。
     -禁用看门狗
     -设置PLLCR以获得正确的SYSCLKOUT频率
     -设置高频和低频外设时钟的预定标器
     -启用外围设备的时钟*/

    void InitSysCtrl(void)

       /*禁用看门狗*/
     DisableDog ();

       /**重要*
        Device_cal函数,用于复制ADC和振荡器校准值
        从TI预留OTP自动进入相应的微调寄存器
        在引导ROM中。 如果在调试过程中绕过引导ROM代码,则
        必须调用以下函数,ADC和振荡器才能根据函数工作
        符合规格。 必须先启用ADC的时钟,然后才能调用此功能
        功能。
        请参阅设备数据手册和/或ADC参考
        手册了解更多信息。 */

       EALLOW;
       SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1U;/*启用ADC外设时钟*/
       (*Device_cal)();
       SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 0U;/*将ADC时钟返回到原始状态*/
       EDIS;

       /*选择内部振荡器1作为时钟源(默认值),并将所有未使用的时钟关闭至
        节能。*/
       IntOscar 1Sel();

       /*初始化PLL控制:PLLCR和DIVSEL
        DSP28_PLLCR和DSP28_DIVSEL在DSP2802x_examples.h*/中定义
       InitPll (DSP28_PLLCR,DSP28_DIVSEL);

       /*初始化外设时钟*/
       InitPeripheralClocks();
    }

    PLL配置的初始化:

    此函数初始化PLLCR寄存器。*/

    Void InitPll (UINT16 PLLCR,UINT16 clkindiv)

     易失性UINT16 iVol;

       /*确保PLL未在跛行模式*/下运行
       如果(SysCtrlRegs.PLLSTS.bit.MCLKSTS !=0U)
       {
          EALLOW;
          /* OSCCLKSRC1检测到故障。 PLL在跛行模式下运行。
           重新启用缺少的时钟逻辑。*/
          SysCtrlRegs.PLLSTS.bit.MCLKCLR = 1U;
          EDIS;
          /*用对相应系统关机功能的调用替换此线路*/
          /*出于调试目的取消注释  */
          ASM ("       ESTOP0");     
       }

       /* DIVSEL必须为0,然后才能更改PLLCR
        0x0000。 通过外部重置XRSn将其设置为0
        这让我们进入1/4*/
       如果(SysCtrlRegs.PLLSTS.bit.DIVSEL !=0U)
       {
        EALLOW;
           SysCtrlRegs.PLLSTS.bit.DIVSEL = 0U;
           EDIS;
       }

       /*更改PLLCR*/
       如果(SysCtrlRegs.PLLCR.bit.DIV != PLLCR)
       {
          EALLOW;
          /*在设置PLLCR之前,请关闭缺少时钟检测逻辑*/
          SysCtrlRegs.PLLSTS.bit.MCLKFF = 1U;
          SysCtrlRegs.PLLCR.bit.DIV = PLLCR;
          EDIS;

          /*可选:等待PLL锁定。
           在此期间,CPU将切换到OSCCLK/2,直到
           PLL稳定。  PLL稳定后,CPU将保持稳定
           切换到新的PLL值。
         
           此锁定时间由PLL锁定计数器监控。
         
           等待PLL锁定时不需要密码。
           但是,如果代码执行任何对时间至关重要的操作,
           并要求锁定正确的时钟,则最好是
           等待此切换完成。

           等待PLL锁定位设置。

           在该回路之前,应禁用看门狗,或在内部馈入看门狗
           通过ServiceDog的循环()。

           取消注释以禁用监视程序
           */
          DisableDog ();

          while (SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1U)
          {
              /*取消注释以维护看门狗ServiceDog ()。 */
          }

          EALLOW;
          SysCtrlRegs.PLLSTS.bit.MCLKFF = 0U;
          EDIS;
     }

       /*如果切换到1/2*/
       IF ((clkindiv == 1u)||(clkindiv == 2u))
      {
        EALLOW;
           SysCtrlRegs.PLLSTS.bit.DIVSEL = clkindiv;
           EDIS;
       }

       /*如果切换到1/1
        *先到1/2,让动力稳定下来
          所需时间取决于系统,这只是一个示例
        *然后切换到1/1*/
     IF (clkindiv == 3U)
       {
           EALLOW;
           SysCtrlRegs.PLLSTS.bit.DIVSEL = 2U;
           DSP28x_usDelay (300U);
           SysCtrlRegs.PLLSTS.bit.DIVSEL = 3U;
           EDIS;
       }
    }

    外设时钟初始化

    OID InitPeripheralClocks(void)

      EALLOW;

     /* LOSPCP预分段寄存器设置,通常将其设置为默认值*/

       GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 3U; /* GPIO18 = XCLKOUT*/
       SysCtrlRegs.LOSPPCP.ALL = 0x0002U;

     /* XCLKOUT与SYSCLKOUT比率。  默认情况下,XCLKOUT =1/4 SYSCLKOUT*/
       SysCtrlRegs.XCLK.bit.XCLKOUTDIV=2U;/* SET XCLKOUT = SYSCLKOUT/1*/

     /*外设时钟为所选外设启用设置。
      如果您不使用外围设备,请关闭时钟
      节省电量。

      注:并非所有外设都可在所有2802x衍生产品上使用。
      请参阅特定设备的数据表。

      此函数不是作为有效代码的示例编写的。*/

       SysCtrlRegs.PCLKCR0.bit.ADCENCLK  = 1U;  /* ADC  */
       SysCtrlRegs.PCLKCR3.bit.COMP1ENCLK  = 1U;   /* COMP1 */
       SysCtrlRegs.PCLKCR3.bit.COMP2ENCLK  = 1U;   /* Comp2 */
       SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1U;  /* CPU Timer-0 */
       SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1U;  /* CPU Timer-1*/
       SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK = 1U;  /* CPU Timer-2 */
       SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK  = 0U;   /* eCAP1 */
       SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK  = 1U;   /* EPWM1 */
       SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK  = 1U;   /* EPWM2 */
       SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK  = 1U;   /* EPWM3 */
       SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK  = 1U;   /* EPWM4 */
       SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1U;    /* GPIO */
       SysCtrlRegs.PCLKCR0.bit.HRPWMENCLK  = 1U;   /* HRPWM */
        SysCtrlRegs.PCLKCR0.bit.SCIANCLK  = 1U;/*   SCI-A */
       SysCtrlRegs.PCLKCR0.bit.SPIANCLK  = 0U;   /* SPI-A */

       SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC  = 1U;   /*在ePWM */中启用TBCLK

       EDIS;
    }

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

    您是否能够在设备未处于待机模式时重现此问题? 例如,您可以禁用中断并执行while (1)循环,还是在保持处理器唤醒状态的同时模拟它?

    我想看看脉冲是仅在待机状态下发生,还是只是在您看到它们时才发生。

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

    您好,Kris,

    我有3万款产品,没有问题。 仅在3万产品的"运行寿命"期间出现此问题。 目前我无法更改此产品的任何设置。 我需要保留此默认值以尝试正确地低估它。 正是我们的汽车流程迫使我不做任何改变。

    所以我不能说,如果我禁用中断,我是否能看到脉冲。

    我只能说,我在其他产品上看不到相同配置的这种脉冲。

    我在数据表上看到HRPWM的限制表明未定义PWM期间的前3个循环指令(SPRUGE8E-2009年2月- 2011年10月修订版第21页§2.3 ................................3工作周期范围限制)。

    我只是想知道在周期开始后的3个SYSCLK周期期间,我是否可以有逻辑高输出状态,就像我请求0占空比? 如果可能,我在2个期间(期间1处于高水平,期间2处于低水平,期间3处于低水平,期间4处于高水平...)之间的3 SYSCLK期间有不同的状态?

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

    您好,BARSANGES Arnaud,

    这可能与HRPWM周期限制有关,但如果不能执行更多测试,就很难说。 我们需要能够进行设备上建议的实验,以进一步确定原因。

    此致,

    克里斯

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

    您好,Kris,

    我知道很难说它来自HRPWM限制而不进行测试。 我从客户那里回来,与他讨论测试此功能的可能性。

    此致。

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

    您好,Kris,

    祝你新年快乐,健康。

    MCU1 = MCU,存在故障

    MCU2 =其他卡上的新MCU,无故障

    我在以前的MCU1上读取并保存内存。 我使用SAVE Hex加载另一个无法导致我的问题的MCU2。 我看不到相同内存的新卡上的脉冲。 我将与我的客户讨论,以了解我是否可以在卡1上更换此MCU1,并更换为新的MCU1,以确保问题来自MCU1。 如果是,我是否可以将MCU1发送给您以获取专业知识?

    我认为这不是一个故障,而只是导致我问题的MCU的局限性...

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

    当客户返回测试时,我将检查我们是否可以接受此操作。 我将向您提供有关如何执行此操作的信息。

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

    我们希望在返回设备之前尝试一些其他测试。 客户更换设备后,也请让他们在另一个主板上尝试故障设备。 请告诉我们问题出在主板还是设备上。

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

    您好,Kris,

    我今天还进行了其他测试:

    我在发现问题的主板上更换新的设备。 使用程序刷新装置后,我没有找到HRPWM输出上的脉冲。 我认为问题出在设备上。

    我的客户不想检查其他主板上的设备以查看默认设备是否跟随该设备。 他希望尽量减少对设备的操作。

    我想我需要派你来获得专业知识。 如何执行此操作?

    此致,

    Arnaud BARSANGES

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

    我们建议您在退回设备之前在另一个板上试用该设备。 但是,如果您准备退回设备,请通过购买该设备的渠道退回。 在退货文档中,请包含指向此E2E线程的链接。

    谢谢!
    克里斯