<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 電源與新能源 > 設(shè)計(jì)應(yīng)用 > 在變頻多相拓?fù)渲惺褂肨ype 4 EPWM 全局加載功能的注意事項(xiàng)

          在變頻多相拓?fù)渲惺褂肨ype 4 EPWM 全局加載功能的注意事項(xiàng)

          作者: 時(shí)間:2023-12-20 來(lái)源:TI 收藏

          變頻多相交錯(cuò)拓?fù)湓诖蠊β蕬?yīng)用場(chǎng)景有廣泛的應(yīng)用場(chǎng)景,而采用數(shù)字控制時(shí)需要重點(diǎn)考慮PWM發(fā)波控制的靈活性和可靠性。本文介紹了在多相變頻拓?fù)渲惺褂眯乱淮鶦2000的Type 4  全局加載和一次加載功能的注意事項(xiàng),并針對(duì)邊界情況提出一種簡(jiǎn)單的解決方案。

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

          在應(yīng)用文檔Leverage New Type ePWM Features for Multiple Phase Control中介紹了針對(duì)多相交錯(cuò)拓?fù)涞腜WM 發(fā)波配置推薦方法,但由于相位寄存器TBPHS本身不支持影子模式,因此一般在實(shí)際變頻拓?fù)鋺?yīng)用中,不建議使用TBPHS來(lái)實(shí)現(xiàn)不同PWM模塊之間的相位交錯(cuò)關(guān)系,而是利用不同PWM模塊的CMPA/CMPB比較寄存器的大小關(guān)系來(lái)實(shí)現(xiàn)。例如,針對(duì)三相交錯(cuò)LLC, 應(yīng)用文檔Implement Three-Phase Interleaved LLC on C2000 Type-4 PWM推薦的PWM發(fā)波配置如圖1所示,其中三路LLC對(duì)應(yīng)的模塊選擇同一個(gè)時(shí)基,圖示只給出EPWMxA的發(fā)波動(dòng)作配置,而EPWMxB通過(guò)死區(qū)模塊以EPWMxA作為輸入源在插入死區(qū)后產(chǎn)生??紤]到LLC是開(kāi)關(guān)頻率變化的拓?fù)洌瑸榱舜_保不同PWM模塊的周期寄存器和比較寄存器的值在同一時(shí)刻點(diǎn)從影子寄存器生效到實(shí)際的PWM寄存器,需配合Type-4 EPWM的全局加載和一次加載功能。

          圖 1 三相交錯(cuò)LLC  PWM配置

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

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

          圖 2 邊界情況

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

          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 中,有新的硬件機(jī)制也可以解決這個(gè)問(wèn)題,具體可以參考對(duì)應(yīng)的應(yīng)用手冊(cè)。

          參考文獻(xiàn):

          [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



          關(guān)鍵詞: TI EPWM

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();