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: 使用XDS100V3進行Debug時,未按下執行功能等待約10秒左右後,PWM腳位EPWM2B / GPIO3 會自動變為High,當按下執行功能後腳位動作又恢復正常.

Part Number: TMS320F28027
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

當我在做測試的時候,很碰巧遇到一個情況,就是使用XDS100V3進行Debug後,

尚未執行Run功能,發現有一隻PWM 腳位(EPWM2B / GPIO3 )直接變成High…(因為這樣造成硬體損毀)

當進行程式執行時,狀態就又恢復正常了...

每一次都會發生,都可以重現.差別在使用XDS100V3燒錄後,等待的時間不同,時間大約都在15秒-30秒,

跟當地代理商FAE討論了一些時間都沒辦法解決...不知道有沒有人遇過或是可以給予建議,謝謝.

初始化代碼請參考下列 :

 void devPWM_HVCtrl_Init(CLK_Handle myClk, PWM_Handle myPwm2)
{

    CLK_enablePwmClock(myClk, PWM_Number_2);

    // Set timer period
    PWM_setPeriod(myPwm2, HVCTRL_PWM_COUNT);
    PWM_setPhase(myPwm2, 0x0000);   // Phase is 0
    PWM_setCount(myPwm2, 0x0000);   // Clear counter

    // Setup TBCLK
    PWM_setCounterMode(myPwm2, PWM_CounterMode_Up);
    PWM_disableCounterLoad(myPwm2);                     // Disable phase loading
    PWM_setHighSpeedClkDiv(myPwm2, PWM_HspClkDiv_by_1); // Clock ratio to SYSCLKOUT
    PWM_setClkDiv(myPwm2, PWM_ClkDiv_by_1);

    PWM_setShadowMode_CmpA(myPwm2, PWM_ShadowMode_Shadow);  // Load registers every ZERO
    PWM_setShadowMode_CmpB(myPwm2, PWM_ShadowMode_Shadow);
    PWM_setLoadMode_CmpA(myPwm2, PWM_LoadMode_Zero);
    PWM_setLoadMode_CmpB(myPwm2, PWM_LoadMode_Zero);

    // Setup compare
    PWM_setCmpA(myPwm2, 0);
    PWM_setCmpB(myPwm2, HVCTRL_PWM_COUNT);

    // Set actions
    PWM_setActionQual_CntUp_CmpA_PwmA(myPwm2, PWM_ActionQual_Set);
    PWM_setActionQual_CntUp_CmpB_PwmA(myPwm2, PWM_ActionQual_Clear);

    PWM_setActionQual_CntUp_CmpA_PwmB(myPwm2, PWM_ActionQual_Clear);
    PWM_setActionQual_CntUp_CmpB_PwmB(myPwm2, PWM_ActionQual_Set);


    // Active Low PWMs - Setup Deadband
    devPWM_DeadbandEnable(myPwm2, true);

}

void devPWM_DeadbandEnable(PWM_Handle myPwm1, bool bEn)
{
    if(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;


        // Active Low PWMs - Setup Deadband
        PWM_setDeadBandOutputMode(myPwm1,            PWM_DeadBandOutputMode_EPWMxA_Rising_EPWMxB_Falling);
        PWM_setDeadBandPolarity(myPwm1, PWM_DeadBandPolarity_EPWMxB_Inverted);

        PWM_setDeadBandInputMode(myPwm1, PWM_DeadBandInputMode_EPWMxA_Rising_and_Falling);
        PWM_setDeadBandRisingEdgeDelay(myPwm1, EPWM1_MIN_DB);
        PWM_setDeadBandFallingEdgeDelay(myPwm1, EPWM1_MIN_DB);
    }
    else
    {
        PWM_disableDeadBand(myPwm1);
    }

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

FAE有建議我在CCS可以勾選下列設定,但依然沒有改善 : (RealTime options)

  • Hi,

    您的问题我们需要升级到英文论坛寻求帮助,有答复尽快给到您。

  • 抱歉,我不小心按到問題已解決,後續您有得到回覆或是作法,再請更新訊息,

    如果真的都沒辦法解決,我們下一代產品公司可能要更換別家MCU了...謝謝您.

  • 您好,

    能否提供下器件初始化以及GPIO 配置的相关信息? 您是否使用 SysConfig 来帮助开发初始化代码? 请问是否检查过 GPIO 引脚的状态,来确保没有设置为该 GPIO 的初始值? 

  • 請問器件的初始化是指哪一個部分?

    另外關於GPIO的配置,我軟體都還沒按下RUN...它就自己變化...這會跟初始設定值有關係嗎?

  • 主 C 代码中通常有一个名为 Device_init()的函数。 请问您是否使用提供的此功能? 工程师希望能够看下您分享的 GPIO 初始化,以确保您没有将 GPIO 信号设置为高电平。

        CLK_enablePwmClock(myClk, PWM_Number_2);

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

  • 我不太確定您提的Device_init() 跟我認知相同,但我的初始化是沒有引用 Device_init() 的!

    您指的GPIO 是PWM的 GPIO初始化嗎 ? (如下)

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

    我有修改TBCLKSYNC ,請問 "irPWM" 就是指PWM嗎?

    感謝您的回覆!

  • 您好,

    您的PWM 初始化看起来没有问题。 可能是其他因素导致了 PWM 输出设置为高电平的问题。 以下是 ePWM2A/B 的 GPIO 初始化示例,您可以尝试一下:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    //
    // 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);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    尚未執行Run功能,發現有一隻PWM 腳位(EPWM2B / GPIO3 )直接變成High…(

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

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

    1. Set up device initializations and gpio initializations

    2. Initialize any interrupts

    3. Configure ePWMs / other peripherals (making sure the clk to ePWM is disabled before configuring the settings)

    4. Enable TBCLKSYNC

    5. rest of control loop

  • 您好,

    感謝您提供的詳細資訊!!

    我這邊的 当应用程序未运行时,是無使用任何件/硬件断点而暂停,您可以看到我上面的CCS圖示,僅按下Debug後,就無操作,無任何動作而產生的腳未變化,

    如果是因為您提到的 "軟件/硬件断点而暂停" 的情況下,我還能理解!

    看起來狀況是沒有改善,不知道是否跟 XDS100V3有關係?

  • 不知道是否跟 XDS100V3有關係?

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