prog:mcp560x:20250306-001:index
NXP RT1052 eFlexPWM—靈活的增強型PWM (2025-03-06)
Local Backup
eFlexPWM 簡介
eFlexPWM 是Enhanced Flex Pulse Width Modulator 的縮寫, 直譯為靈活的增強脈衝脈寬調變模組。
RT1052 具有4 個eFlexPWM(eFlexWM1~eFlex_PWM4)。每個eFlexPWM 可以產生四路互補PWM 即產生8 個PWM,也可以產生相互獨立的PWM 波。每個eFlexPWM 具有各自的故障檢電路,當故障發生時根據程式鎖定PWM 輸出引腳的電平狀態,這在逆變、整流及馬達控制應用中能夠有效的提高設備的安全性。
eFlexPWM 可以產生多種多樣的開關模式,包括非常複雜的波形。它可以用來控制所有已知的馬達類型,用於控制開關電源也非常理想。

eFlexPWM 功能框圖
①PWM 輸出
從圖中標號①處可以看出,該頻道可以輸PWM_A、 PWM_B 和PWM_X。 PWM_A 與PWM_B 可以獨立輸出也可以作為互補對輸出。 PWM_X 較為特殊,只有eFlex PWM1 擁有PWM_X 對應的外部輸出接腳可直接輸出PWM。其他eFlex PWM(eFlexWMM2~eFlex_PWM4)只能透過XBAR 映射到外部輸出引腳才能輸出PWM。
②時鐘源
③計數暫存器
④比較暫存器
比較暫存器用於產生PWM 波,每個FLEXPWM 擁有6 個比較暫存器,這6 個比較暫存器被分成了3 組

pwm 產生功能框圖
從圖中可以看出,比較暫存器0 和1 用來產生PWMX,比較寄存0 和1 的功能較多。
比較暫存器2 和3 用於產生PWM23,比較暫存器4 和5 用於產生PWM45,根據暫存器配置不同, PWM23 和PWM45 可以獨立輸出,也可以組成一對互補的PWM 波,這在半橋驅動電路中應用廣泛。因為每個PWM 波由兩個比較寄存控制,所以儘管這些比較暫存器使用相同的比較值(16 bit counter),但是可以產生相位不同和占空比不同的pwm 波。
⑤同步訊號

FLEXPWM 同步訊號選擇器結構圖
從圖中可以看出,每個eFlexPWM 擁有4 個同步訊號分別為Local Sync、 MasterReload、 Master Sync、 PWM_EXT_SYNC。所謂同步,實際上就是初始化計數暫存器(16 bitcounter)。 INIT_SEL 用於選擇同步訊號。
Local Sync(本地同步訊號),當計數暫存器(16 bit comparator)的計數值與比較暫存器VAL1 的設定值相等時產生本機同步訊號。如果選擇本地同步訊號作為計數器初始化訊號,那麼子模組中的比較暫存器(VAL1)將有效的控制定時器的週期(定時器的週期也與計數頻率有關),從而控制該子模組產生PWM 頻率。
Master Reload(主重載訊號)與Master Sync(主同步訊號)。每個eFlexPWM 擁有四個子模組(submod0 到submod3),其中子模組0(submod0)與其他子模組不同,它可以作為主模組產生控制訊號控制其他模組。例如子模組0 的同步訊號不僅可重設自己的16位元計數暫存器(16 bit counter),還可以作為Master Sync 訊號,用於重設其他子模組(submod1 到submod3) 的16 位元計數暫存器(16 bit counter)。同樣,子模組0 的重型裝填訊號也可以作為其他子模組的同步訊號。
PWM_EXT_SYNC(外部同步訊號)根據系統體系結構不同, PWM_EXT_SYNC 訊號產生於晶片上或晶片外,選擇此訊號作為同步訊號,可實現外部來源控制eFlexPWM 子模組輸出PWM 週期。
⑥輸出控制
可以看出比較暫存器產生的PWM23 與PWM45 經過一些控制模組之後轉變為PWM_A 和PWM_B。下面簡要講解這些模組的作用。
Comp vs Indep (獨立或互補控制模組)
PWM_A 和PWM_B 可以獨立輸出也可以作為一個互補pwm 對輸出。
-
當控制暫存器CTRL2[INDEP]=1,兩個PWM 相互獨立。當CTRL2[INDEP]=0 時,PWM_A 與PWM_B 做為互補對輸出,在該模式下只有其中一個PWM(PWM_A 或PWM_B)的配置參數起作用,我們暫且將其稱為主PWM 另外一個稱為從PWM。互補PWM 的佔空比由主PWM 的配置參數決定,修改從PWM 的配置參數無效。 MCTRL[IPOL]決定哪一個PWM(PWM_A 或PWM_B)為主PWM。
Dead Time Generator(死區時間)
當使用無死區的互補pwm 控制板橋驅動電路時如 圖所示, PWM_A 為高電平時PWM_B 為低電平,此時上方電晶體導通,下方電晶體截止,輸出端輸出高電平V+。之後PWM_A 變成低電平,同時PWM_B 變成高電平,此時上方電晶體截止,電晶體導通,輸出端輸出低電平GND。透過控制PWM_A 的佔空比即可調整輸出電壓。
但是在實際應用中電晶體不是理想的,電晶體從截止狀態變成導通狀態或從導通狀態變成截止狀態需要一定的時間。而且通常情況下開通時間與截止時間不相同。如果不插入死區時間,當PWM 狀態改變就很可能出現上下兩個電晶體同時導通的情況,這樣就會造成電路短路。
當使用加入死區的互補PWM 時首先PWM_B 為高電平, PWM_A 為低電平,上方電晶體截止,下方電晶體導通,之後PWM_B 變成低電平,此時由於死區時間的存在(DTCNT0) PWM_A 保持低電平不變,死區時間結束時(在這個時間段內變高電平)已完成電晶體1_3,死區時間後(在這個時間段內變高電平。截止狀態,此時輸出高電平V+。依序類推,選擇適當的死區時間就不會出現短路的狀況。死區插入邏輯比較複雜,
-
在實際編程過程中我們無需深入死區是如何插入的,我們只需要知道向DTCT0 和DTCNT1 暫存器寫入死區時間。在這裡,設定的是延時多少個計數週期,在程式設計中要講時間轉換為計數器的計數週期個數。
Mux Select Logic(多重化選擇邏輯)
Fault Protection(故障保護)
FLEXPWM 提供了強大的錯誤保護機制,當偵測到錯誤時能夠根據暫存器配置將PWM 輸出鎖定為高電平或低電平。 圖是PWM_A 的故障保護結構框圖。

PWM_A 故障保護結構圖
圖中使用標號標記了幾個運算符, 很明顯2 、 3、 5 、 6 是「或」邏輯運算符, 1 和4是與運算符。
標號為5 的或邏輯運算符,它的輸出為禁止PWM_A 訊號(DISABLE_PWM_A) ,輸入訊號為邏輯運算符6 和邏輯運算子2 的輸出,也就是說任一個輸入為真時,都會禁止PWM_A 輸出。
再來看或邏輯運算子6 的輸入連接,由下往上看, RT1052 工作在停止模式(StopMode)時PWM_A 禁止輸出,工作在等待模式(Waid Mode)或調試模式(Debug Mode)由控制寄存器位WAITEN 和DBGEN 決定是否禁止PWM_A 輸出。
或邏輯運算子2 有四條輸入支路,任何一個支路為「真」時都會導致禁止PWM_A 輸出。 DISA3 是故障輸通道3(FAULT3)的控制暫存器,當DISA0 到DISA3 全為0 時表示禁止了PWM_A 的故障偵測功能。 NOCOMB3 是故障通道3(FAULT3)的模式選擇暫存器,從圖中可以看出,當NOCOMB3 為0 且啟用故障偵測功能時,故障訊號會直接導致PWM_A 禁止輸出。當NOCOMB3 為1,故障訊號就無法透過標號為4 的與邏輯運算子觸發PWM_A 禁止輸出。故障訊號也可以透過FILT 模組進而觸發PWM_A 禁止輸出。 FILT 的作用是故障濾波,簡單理解就是將一些持續時間較短的故障訊號濾除掉,而那些持續時間較長故障訊號才能真正觸發PWM_A 禁止輸出。
⑦和⑧重裝載
標註⑦和⑧的內容, 它是重型裝填選擇器
-
FLEXPWM 某些寄存具有雙緩衝功能例如比較暫存器,同一個寄存分為外部寄存和內部寄存,我們在程式中只能修改外部暫存器的值,修改後的值只有載入到內部暫存器才真正的運作。重裝的作用就是將外部暫存器的值載入到內部暫存器。
從圖中可看出RELOAD_SEL 用來選擇重型裝填訊號源,可以選擇本地重載訊號(LocalReload),也可以選擇來自submod0 的Master Reload 訊號作為重載訊號。
使用本機重載訊號時,要設定本機重裝載允許暫存器位元LDOK 允許本機重裝載後,Mod Compare 和Half Comp 才能夠觸發重裝載。 Mod Compare 表示一個完整的pwm 週期後進行重裝載。 Half Compare 表示在一個PWM 週期的進行重裝載,半週期點由比較暫存器0(VAL0)指定,它不必恰好位於PWM 週期的中間。無論選擇Mod Compare 或選擇Half Compare,都可以使用CTRL[LDFQ]暫存器將重型裝填事假調整為n 個PWM 迴圈或n 個PWM 半週期。
prog/mcp560x/20250306-001/index.txt · Last modified: 2025/03/06 09:15 (external edit)