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.

[参考译文] TMS320F28027:PWM 引脚 EPWM2B/GPIO3自动变为高电平

Guru**** 2535150 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1268527/tms320f28027-the-pwm-pin-epwm2b-gpio3-automatically-changes-to-high

器件型号:TMS320F28027
主题中讨论的其他器件:SysConfigC2000WARE

大家好、

使用 XDS100V3进行调试后、客户会发现 PWM 引脚(EPWM2B/GPIO3)在不运行时直接变为高电平、从而导致硬件损坏。 当程序运行时、状态恢复正常。 它将每次发生、并且可重现、区别是在使用 XDS100V3烧录之后、等待时间变化、约为15s 至30s。  

请参阅以下初始化代码:

 void devPWM_387pclk_handle myClk、PWM_Handle Ctrl_Init
{

   CLK_enablePwmClock (myClk、PWM_Number_2);

   //设置计时器周期
   PWM_setPeriod (myPwm2、HVCTRL_PWM_COUNT);
   PWM_setPhase (myPwm2、0x0000);  // Phase 为0
   PWM_setCount (myPwm2、0x0000);  //清除计数器

   //设置 TBCLK
   PWM_setCounterMode (myPwm2、PWM_Rac_ Mode_Up);
   PWM_disableCounterLoad (myPwm2);                    //禁用相位加载
   PWM_setHighSpeedClkDiv (myPwm2、PWM_HspClkDiv_By_1);//时钟与 SYSCLKOUT 的比率
   PWM_setClkDiv (myPwm2、PWM_ClkDiv_By_1);

   PWM_set4519200(myPwm2, Mode_Cmp PWM_i Mode_Shadow ); //每0加载一次
   PWM_set4519200(myPwm2, Mode_Cmp PWM_4519); Mode_Shadow
   PWM_set4519200(myPwm2, Mode_Cmp PWM_4519); Mode_Zero
   PWM_set4519200(myPwm2, Mode_Cmp PWM_4519); Mode_Zero

   //设置比较
   PWM_setCmpA (myPwm2、0);
   PWM_setCmpB (myPwm2、HVCTRL_PWM_COUNT);

   //设置操作
   PWM_setPWM_CMP_CP_PPwmA(myPwm2, Qual_Cnt PWM_387) Qual_Set;
   PWM_setPWM_CMP_CP_PPwmA(myPwm2, Qual_Cnt PWM_387) Qual_Clear;

   PWM_setPWM_cmp_387PwmB(myPwm2, Qual_Cnt Qual_Clear );
   PWM_setPWM_cmp_387PwmB(myPwm2, Qual_Cnt Qual_Set );


   //低电平有效 PWM -设置死区
   devPWM_DeadbandEnable (myPwm2、true);

void devPWM_DeadbandEnable (PWM_Handle myPwm1、bool Ben)
{
   如果(本)
   {

      EALLOW;

      EPwm2Regs.TZFLG.bit.CBC = 0;
      EPwm2Regs.TZFLG.bit.OST = 0;

      EPwm2Regs.TZCTL.bit.DCBEVT1 = 2;
      EPwm2Regs.TZCTL.bit.DCBEVT2 = 2;
      EPwm2Regs.TZCTL.bit.TZB = 2;

      EPwm2Regs.TZFRC.bit.DCBEVT1 = 1;
      EPwm2Regs.TZFRC.bit.DCBEVT2 = 1;
      EPwm2Regs.TZFRC.bit.CBC = 1;


      EDIS;


      //低电平有效 PWM -设置死区
      PWM_setDeadBandOutputMode (myPwm1、           PWM_DeadBandOutputMode_EPWMxA_RISING _EPWMxB_FALLING);
      PWM_setDeadBandPolarity (myPwm1、PWM_DeadBandPolarity_EPWMxB_Invered);

      PWM_setDeadBandInputMode (myPwm1、PWM_DeadBandInputMode_EPWMxA_Rising_and_FALLING);
      PWM_setDeadBandRisingEdgeDelay (myPwm1、EPWM1_MIN_DB);
      PWM_setDeadBandFallingEdgeDelay (myPwm1、EPWM1_MIN_DB);
   }
   否则
   {
      PWM_disableDeadBand (myPwm1);
   }

//======================================== //

客户还尝试在 CCS 中选择以下设置、但仍未得到改善:(实时选项)  

您能帮助检查这个案例吗? 谢谢。

此致、

切里

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

    您好、Cherry:

    他们的器件初始化是什么样子的? GPIO 配置、会怎么样? 他们是否使用 SysConfig 来帮助开发初始化代码? 他们是否检查过 GPIO 引脚的状态、以确保没有设置为该 GPIO 的初始值?

    此致!

    mA

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

    您好、Ma、

    感谢您发送编修。

    他们的设备初始化看起来像什么?

    您可以帮助指定初始化的哪个部分吗?

    是否还有他们的 GPIO 配置? [/报价]

    该软件在未运行时会自行更改。 客户想知道是否可以 对 初始设置执行此操作?

    谢谢。此致、

    切里

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

    您好、Cherry:

    主 C 代码中通常有一个名为 Device_init()的函数。 他们是否使用提供的此功能? 我希望他们的 GPIO 初始化、以确保他们没有将 GPIO 信号设置为高电平。  

    [报价 userid="496057" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1268527/tms320f28027-the-pwm-pin-epwm2b-gpio3-automatically-changes-to-high "]   clk_enablePwmClock (myClk、PWM_Number_2);
    [/报价]

    该函数调用似乎启用 PWM 时钟、这是否修改 TBCLKSYNC 位? 如果是、则应在初始化 irPWM 后调用该函数。

    此致!

    mA

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

    您好、Ma、

    主 C 代码中通常有一个名为 Device_init()的函数。 他们是否使用提供的此功能?

    不,它们不会在初始化中使用 Device_init()。

    我想查看其 GPIO 初始化以确保未将 GPIO 信号设置为高电平。  [/报价]

    如果您参考的 GPIO 是 PWM 的 GPIO 初始化、请参阅以下内容:

       GPIO_setMode (myGpio、GPIO_Number_2、GPIO_2_Mode_EPWM2A);
       GPIO_setMode (myGpio、GPIO_Number_3、GPIO_3_Mode_EPWM2B);

    此函数调用似乎启用了 PWM 时钟,这是否修改了 TBCLKSYNC 位? 如果是这样,则应在初始化 irPWM 后调用该函数。

    是的、 TBCLKSYNC 被修改。 "irPWM"指 PWM?

    谢谢。此致、

    切里

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

    您好、Cherry:

    它们的 PWM 初始化似乎没有问题。 我怀疑是其他因素导致了 PWM 输出设置为高电平的问题。

    这是 ePWM2A/B 的 GPIO 初始化示例、他们可以尝试一下吗?

    //
    // EPWM2_A - GPIO Settings
    //
    #define GPIO_PIN_EPWM2_A 2
    #define myEPWM2_EPWMA_GPIO 2
    #define myEPWM2_EPWMA_PIN_CONFIG GPIO_2_EPWM2_A
    //
    // EPWM2 -> myEPWM2 Pinmux
    //
    GPIO_setPinConfig(myEPWM2_EPWMA_PIN_CONFIG);
    GPIO_setPadConfig(myEPWM2_EPWMA_GPIO, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(myEPWM2_EPWMA_GPIO, GPIO_QUAL_SYNC);
    
    GPIO_setPinConfig(myEPWM2_EPWMB_PIN_CONFIG);
    GPIO_setPadConfig(myEPWM2_EPWMB_GPIO, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(myEPWM2_EPWMB_GPIO, GPIO_QUAL_SYNC);

    Unknown 说:
    不运行时直接升高

    当应用程序未运行时、这是否意味着应用程序会因软件/硬件断点而暂停? 如果您在 TBCLK 为 ePWM 运行时停止程序、PWM 输出将停留在某个状态、因为 TBCTR 不再递增。 具体取决于 TBCTL[FREE_SOFT]在仿真模式位中设置的内容。 默认情况下、它将在下一次时基计数器递增或递减后停止 TBCTR。

    为确保安全初始化、请务必遵循我们的 C2000WARE 示例、  

    1.设置设备初始化和 GPIO 初始化

    2.初始化所有的中断

    3.配置 ePWM/其他外设(确保在配置设置之前禁用 clk 到 ePWM)

    4.启用 TBCLKSYNC

    5.控制回路的其余部分

    此致!

    mA

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

    您好、Ma、

    当它未运行时,这是否意味着应用程序被软件/硬件断点停止?

    不可以、它会突然停止、并且在按下"Debug"后没有任何操作。

    XDS100V3是否存在问题?

    谢谢。此致、

    切里

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

    您好、Cherry:

    在探讨 XDS 可能出现的问题之前、您能否让他们先运行 C2000WARE PWM 示例、以查看它们是否出现与 ex13或 ex2相同的行为?  

    此致!

    mA