• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 電源與新能源 > 設計應用 > 在變頻多相拓撲中使用Type 4 EPWM 全局加載功能的注意事項

    在變頻多相拓撲中使用Type 4 EPWM 全局加載功能的注意事項

    作者: 時間:2023-12-20 來源:TI 收藏

    變頻多相交錯拓撲在大功率應用場景有廣泛的應用場景,而采用數字控制時需要重點考慮PWM發波控制的靈活性和可靠性。本文介紹了在多相變頻拓撲中使用新一代C2000的Type 4  全局加載和一次加載功能的注意事項,并針對邊界情況提出一種簡單的解決方案。

    本文引用地址:http://www.czjhyjcfj.com/article/202312/454099.htm

    在應用文檔Leverage New Type ePWM Features for Multiple Phase Control中介紹了針對多相交錯拓撲的PWM 發波配置推薦方法,但由于相位寄存器TBPHS本身不支持影子模式,因此一般在實際變頻拓撲應用中,不建議使用TBPHS來實現不同PWM模塊之間的相位交錯關系,而是利用不同PWM模塊的CMPA/CMPB比較寄存器的大小關系來實現。例如,針對三相交錯LLC, 應用文檔Implement Three-Phase Interleaved LLC on C2000 Type-4 PWM推薦的PWM發波配置如圖1所示,其中三路LLC對應的模塊選擇同一個時基,圖示只給出EPWMxA的發波動作配置,而EPWMxB通過死區模塊以EPWMxA作為輸入源在插入死區后產生。考慮到LLC是開關頻率變化的拓撲,為了確保不同PWM模塊的周期寄存器和比較寄存器的值在同一時刻點從影子寄存器生效到實際的PWM寄存器,需配合Type-4 EPWM的全局加載和一次加載功能。

    圖 1 三相交錯LLC  PWM配置

    針對LLC的應用,一般建議將不同EPWM模塊的周期寄存器TBPRD、比較寄存器CMPA/CMPB、死區寄存器DBRED/DBFED都選擇使能全局加載功能,這樣可以確保多個寄存器在設定的全局加載事件到來時在單周期全部加載完畢。此外,一次加載功能是指在手動刷新完畢所有EPWM寄存器后,使能一次加載開關寄存器GLDCTL2[OSHTLD],以確保在一次加載開關打開后,目標寄存器方可從影子寄存器生效,而且只刷新一次。由于每個PWM模塊都有單獨的GLDCTL2[OSHTLD]寄存器,建議采用EPWMXLINK[GLDCTL2LINK] 寄存器將其他的EPWM模塊的關聯到主相EPWM模塊,從而只需要使能主相PWM模塊的GLDCTL2[OSHTLD]寄存器,其他從相PWM模塊的一次加載功能會同時打開。

    在大部分工況,通過以上機制可以規避多個PWM寄存器不同步刷新的風險,但仍需要注意如下的情況,當控制中斷頻率和開關頻率不同步,且中斷頻率高于開關頻率時,則有可能出現小概率事件,如圖2 所示。假設在一個開關周期內觸發兩次中斷,由于在第一次中斷中使能了一次加載開關,則在第二次中斷進行手動刷新PWM寄存器時,一次加載開關保持使能狀態,如果在此過程碰到了全局加載事件(如CNT=0),就可能出現寄存器加載不同步的風險。圖2中,假如在CNT=0前第三相PWM的周期沒有及時更新寫入,則在新的開關周期生效后,第三相PWM的頻率和前兩相的頻率出現不同步現象。同樣的情況,假設前后頻率變化范圍很大,頻率增大后,如果對應的比較寄存器沒有同步更新,甚至可能會導致在新的開關周期內無法產生比較匹配事件出現常高風險。

    圖 2 邊界情況

    為了規避此邊界情況,如下參考代碼提供了一種解決思路,以三相交錯LLC的EPWM寄存器更新為例,當環路計算得到新的開關周期值后,在手動更新PWM寄存器的步驟中,增加一個判斷條件,即如果當前時刻十分接近周期結束點,則在手動更新寄存器前插入一個固定的延時(延時時間取決于手動更新寄存器所需的時間),以確保手動更新寄存器的過程不會跨越全局加載事件。如下示例代碼中,考慮到盡可能縮短手動刷新寄存器的時間,已將相關的比較寄存器的計算過程和寄存器的更新過程分開單獨處理。

    static inline void LLC_HAL_updatePWM(float32_t periodSet_pu)

    {

        static uint16_t tbprd_ticks = 0;

        static uint16_t cmpa_1_ticks =0, cmpa_2_ticks = 0, cmpb_2_ticks = 0, cmpa_3_ticks = 0, cmpb_3_ticks = 0;


        tbprd_ticks = LLC_PERIOD_MAX_CKS * periodSet_pu;

        cmpa_1_ticks = tbprd_ticks>>1;            //phase 1 Compare A value


        cmpa_2_ticks = tbprd_ticks*0.333333333;   //phase 2 Compare A value

        cmpb_2_ticks = tbprd_ticks*0.833333333;   //phase 2 Compare B value


        cmpa_3_ticks = tbprd_ticks*0.666666667;   //phase 3 Compare A value

        cmpb_3_ticks = tbprd_ticks*0.166666667;   //phase 3 Compare B value

        

        // Update the relevant PWM values for the actuation: TBPRD, CMPA, CMPB,

        if(EPWM_getTimeBaseCounterValue(LLC_PRI1_PWM_BASE)< (EPWM_getTimeBasePeriod (LLC_PRI1_PWM_BASE) -20))

        {

         

            EPWM_setTimeBasePeriod(LLC_PRI1_PWM_BASE, tbprd_ticks);  // Already enable EPWMLINK for TBPRD

            EPWM_setCounterCompareValue(LLC_PRI1_PWM_BASE, EPWM_COUNTER_COMPARE_A, cmpa_1_ticks);

            

            EPWM_setCounterCompareValue(LLC_PRI2_PWM_BASE, EPWM_COUNTER_COMPARE_A, cmpa_2_ticks);

            EPWM_setCounterCompareValue(LLC_PRI2_PWM_BASE, EPWM_COUNTER_COMPARE_B, cmpb_2_ticks);

            

            EPWM_setCounterCompareValue(LLC_PRI3_PWM_BASE, EPWM_COUNTER_COMPARE_A, cmpa_3_ticks);

            EPWM_setCounterCompareValue(LLC_PRI3_PWM_BASE, EPWM_COUNTER_COMPARE_B, cmpb_3_ticks);


            EPWM_setGlobalLoadOneShotLatch(LLC_PRI1_PWM_BASE);


        }

        else

        {

    __asm(" RPT #20 || NOP") ;     //create 20 cycles delay      


    EPWM_setTimeBasePeriod(LLC_PRI1_PWM_BASE, tbprd_ticks);

            EPWM_setCounterCompareValue(LLC_PRI1_PWM_BASE, EPWM_COUNTER_COMPARE_A, cmpa_1_ticks);


            EPWM_setCounterCompareValue(LLC_PRI2_PWM_BASE, EPWM_COUNTER_COMPARE_A, cmpa_2_ticks);

            EPWM_setCounterCompareValue(LLC_PRI2_PWM_BASE, EPWM_COUNTER_COMPARE_B, cmpb_2_ticks);


            EPWM_setCounterCompareValue(LLC_PRI3_PWM_BASE, EPWM_COUNTER_COMPARE_A, cmpa_3_ticks);

            EPWM_setCounterCompareValue(LLC_PRI3_PWM_BASE, EPWM_COUNTER_COMPARE_B, cmpb_3_ticks);


            EPWM_setGlobalLoadOneShotLatch(LLC_PRI1_PWM_BASE);


        }


    }

    值得一提的是,在F28P65x提供的Type 5 中,有新的硬件機制也可以解決這個問題,具體可以參考對應的應用手冊。

    參考文獻:

    [1] Texas Instruments: Implement three-phase interleaved LLC on C2000 Type-4 PWM

    [2] Texas Instruments: Leverage New Type ePWM Features for Multiple Phase Control



    關鍵詞: TI EPWM

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 炉霍县| 阳江市| 浮梁县| 黄梅县| 温州市| 徐汇区| 鹤峰县| 珲春市| 琼结县| 四平市| 武穴市| 修文县| 阿荣旗| 克山县| 稻城县| 伊宁县| 新津县| 浦县| 青阳县| 遂平县| 贺州市| 河津市| 西丰县| 女性| 余庆县| 淮南市| 新龙县| 同仁县| 阿拉善盟| 华宁县| 黄冈市| 宁阳县| 汉源县| 罗平县| 安达市| 清水县| 德庆县| 瑞金市| 信宜市| 桃园县| 开化县|