DSP_ePWM Module
Ref:TMS320x2833x, 2823x Enhanced Pulse Width Modulator (ePWM) Module
Multiple ePWM Modules
Submodules and Signal Connections for an ePWM Module(ePWM模塊的子模塊和信號連接)
ePWM Submodules and Critical Internal Signal Interconnects(Epwm內部結構圖)
Time-Base (TB) Submodule(時間基準子模塊)
時鐘預分頻器(寄存器TBCTL,位12至7)可用於將輸入計數頻率除以1和1792之間的可選因數。
寄存器TBPRD定義了輸入信號周期的長度,以輸入信號的時間週期的倍數為單位。
F2833x的另一個獨特功能是其操作寄存器的“影子”功能,在ePWM單元可用於比較寄存器A,B和周期寄存器的情況下。對於某些應用程序,有必要在每個週期修改比較或週期寄存器內的值。後台寄存器的優點是我們可以為當前的下一個時段準備值。如果沒有後台功能,我們必須等待當前時段的結束,然後觸發高優先級的中斷。有時這種安排形式將錯過它的最後期限......
影子寄存器的內容被傳送到活動寄存器。這可以防止由於軟件異步修改寄存器而導致的損壞或虛假操作。
ePWM Phase Synchronisation
時基同步方案連接設備上的所有ePWM模塊。每個ePWM模塊都有一個同步輸入(EPWMxSYNCI)和一個同步輸出(EPWMxSYNCO)來使ePWM單元彼此同步。
例如,我們可以將一個ePWM單元定義為“主”,每次計數器等於週期時生成一個輸出信號“SYNCO”。
可以初始化兩個ePWM單元以將此信號識別為“SYNCI”,並在每次收到此信號時立即開始計數。
以這種方式,我們已經建立了3個ePWM信道的同步集合。但我們可以做得更好。
通過使用另一個名為“TBPHS”的寄存器,我們可以在主站,從站1和從站2之間引入相移,這是三相控制系統的絕對必要條件。
Example:
ePWM2和ePWM3的寄存器TBCNT分別預加載了一個對應於120°和240°的起始值。在這個例子中,每當計數器寄存器等於零時,ePWM1就被初始化為主器件來產生SYNCO。
通過使能ePWM2和ePWM3的相位輸入功能,兩個通道將作為從器件1和從器件2運行,並將其計數器寄存器TBCNT加載到存儲在相應相位寄存器TBPHS中的數字中。
- ePWM1 counts from 0 to 6000. TBPRD = 6000
- ePWM2 register TBPHS = 2000*2 (上下數)
- ePWM3 register TBPHS = 4000*2 (上下數)
Time-Base ClockSynchronization(時基時鐘同步)
置位時,所有啟用的ePWM模塊時鐘都將在TBCLK的第一個上升沿對齊的情況下啟動。對於完美同步的TBCLK,每個ePWM模塊的預分頻器必須設置相同。
啟用ePWM時鐘的正確過程如下所示:
- 在PCLKCRx寄存器中啟用ePWM模塊時鐘
- Set TBCLKSYNC= 0
- Configure ePWM modules
- Set TBCLKSYNC=1
void Setup_ePWM(void) { EPwm1Regs.TBCTL.bit.CLKDIV = 0; // CLKDIV = 1 EPwm1Regs.TBCTL.bit.HSPCLKDIV = 1; // HSPCLKDIV = 2 EPwm1Regs.TBCTL.bit.CTRMODE = 2; // up - down mode EPwm1Regs.AQCTLA.all = 0x0006; // ZRO = set, PRD = clear EPwm1Regs.TBPRD = 37500; // 1KHz - PWM signal EPwm2Regs.TBCTL.bit.CLKDIV = 0; // CLKDIV = 1 EPwm2Regs.TBCTL.bit.HSPCLKDIV = 1; // HSPCLKDIV = 1 EPwm2Regs.TBCTL.bit.CTRMODE = 2; // up - down mode EPwm2Regs.AQCTLA.all = 0x0006; // ZRO = set, PRD = clear EPwm2Regs.TBPRD = 37500; // 1KHz - PWM signal EPwm3Regs.TBCTL.bit.CLKDIV = 0; // CLKDIV = 1 EPwm3Regs.TBCTL.bit.HSPCLKDIV = 1; // HSPCLKDIV = 1 EPwm3Regs.TBCTL.bit.CTRMODE = 2; // up - down mode EPwm3Regs.AQCTLA.all = 0x0006; // ZRO = set, PRD = clear EPwm3Regs.TBPRD = 37500; // 1KHz - PWM signal EPwm1Regs.TBCTL.bit.SYNCOSEL = 1; // generate a syncout if CTR = 0 EPwm2Regs.TBCTL.bit.PHSEN = 1; // enable phase shift for ePWM2 EPwm2Regs.TBCTL.bit.SYNCOSEL = 0; // syncin = syncout EPwm2Regs.TBPHS.half.TBPHS = 25000; // 1/3 phase shift EPwm3Regs.TBCTL.bit.PHSEN = 1; // enable phase shift for ePWM3 EPwm3Regs.TBCTL.bit.SYNCOSEL = 0; // syncin = syncout EPwm3Regs.TBPHS.half.TBPHS = 50000; // 2/3 phase shift if Epwm2Regs的SYNCOSEL=1 這邊可以設為25000 }
Timer Operating Modes
每個ePWM模塊都能夠以3種不同的計數模式中的一種進行操作,由寄存器TBCTL的位1和位0選擇:
- count up mode
- count down mode
- count up and down mode
Time Base Registers
要使用C編程語言訪問這些寄存器,我們可以利用源代碼文件“DSP2833x_GlobalVariableDefs.c”,該文件將所有內存映射的硬件寄存器定義為全局變量。
有變量均基於結構和聯合數據類型,也已由德州儀器定義,並包含在主頭文件“DSP2833x_headers.h”中。
Time Base Control Register TBCTL
FREE_SOFT:
- 控制DSC和JTAG仿真器之間的交互。
- 如果代碼的執行順序碰到斷點,我們可以指定該ePWM單元應該發生什麼。
PHSDIR:
- 指定在看到SYNCIN脈沖之後,此ePWM單元是開始向上還是向下計數。
- 如果單個ePWM設置中禁用了同步功能,則該位為“不關心”
CLKDIV and HSPCLKDIV:
- 可降低輸入頻率“SYSCLKOUT”
- 對於100MHz系統,每個脈沖轉換成10ns,對於150MHz-系統轉換成6.667ns。
SWFSYNC:
- 設置該位的指令將立即從該ePWM單元產生一個“SYNCO”脈衝
SYNCOSEL:
- 選擇SYNCO信號的來源。
- 如果未使用通道同步,請關閉此功能。
PRDLD:
- 啟用(0)或禁用(1)TBPRD的影子寄存器功能。如果禁用,所有寫入TBPRD的指令將直接改變週期寄存器。 如果啟用,寫入指令將在陰影中存儲新值。在下一個事件CTR = 0時,陰影值將自動加載到TBPRD中。
PHSEN:
- 通過“SYNCIN”觸發器啟用(1)從TBPHS預加載寄存器TBCTR
CTRMODE:
- 定義此ePWM單元的操作模式
Time Base Status Register TBSTS
該寄存器標記了ePWM單元的當前狀態
CTRDIR
- 如果ePWM向上計數(1)或向下計數(0)
SYNCI:
- 如果此ePWM單元已經看到SYNCI事件,則該位為1,否則為0.
- 注意:要清除此位,必須向其中寫入1!
CTRMAX:
- 如果由於某種原因16位計數器寄存器TBCTR溢出,位“CTRMAX”將被設置為1.在正常情況下,這不應該發生,所以我們可以將此位作為安全警報信號。
- 注意:要清除這一點,必須寫入1!
Counter-Compare (CC) Submodule
除了0或TBPRD觸發以外又多了CMPA與CMPB,每個週期最多使用4個點來觸發一個動作。
ePWM Compare Module Registers
ePWM Compare Control Register
LOADxMODE:
- 定義硬件事件,它將從後台複製一個值到活動的前台寄存器中
SHDWxMODE:
- 啟用(0)或禁用(1)後台更新模式。如果禁用,所有寫入指令將立即更改寄存器CMPA或CMPB中的值
SHDWxFULL:
- 只讀狀態字段。如果陰影已滿(1)並且硬件將該值複製到前景中,則該位將自動清除
Action-Qualifier (AQ) Submodule
Action Qualifier Registers
Action Control Register A and B
Software Forcing Registers
該寄存器允許強制輸出線進入定義狀態。“一次”代表當前PWM頻率週期的持續時間。
Dead-Band Generator (DB) Submodule
死區單元的設置基於六個開關S0至S5。
更經典的模式假定S4 = 0且S5 = 0 [IN_MODE]被配置為使得“EPWMxA-IN”此訊號是下降沿延遲或是上升沿延遲。
Dead Band Unit Registers
死區控制寄存器結合了開關S0到S5的位域:
ePWM Chopper Module
暫不討論
Chopper Mode Control Registers
Trip-Zone (TZ) Submodule
Trip Trip--Zone Module Features
- Trip Trip - Zone具有快速,獨立於時鐘的高邏輯邏輯路徑,具有與EPWMxA EPWMxA / B輸出引腳/ B輸出引腳高阻抗阻抗快速,時鐘獨立的邏輯路徑
- 中斷延遲可能無法在響應ov時保護硬件當通過ISR軟件響應超過當前條件或短路條件或通過ISR軟件電路短路時,中斷延遲可能無法保護硬件
- Supports:
- 對於主要短路或過電流條件下的主要短路或過電壓跳閘 = 一次性跳閘(one shot trip)
- 通過循環跳閘來限制電流循環 (cycle byby cycle)
ePWM Trip - Zone Registers
寄存器TZCTL用於定義在過電流信號情況下線路ePWMxA和ePWMxB的狀態。
使用寄存器TZSEL,我們可以指定應該將哪個輸入信號TZx用作逐週期或作為永久(單次)關閉信號。
TZEINT可用於在閉環控制系統中出現過電流情況下請求中斷服務請求。
們可以使用逐週期或單次過電流中斷請求,具體取決於寄存器TZSEL中的選擇。
樣的中斷事件中應該做什麼?那麼這取決於應用和故障的嚴重性。
Event-Trigger (ET) Submodule
Event-Trigger-Sub模塊由一組寄存器初始化:
- ETSEL - 該暫存器選擇哪些可能的事件觸發中斷或開始ADC轉換。
- ETPS - 該暫存器程序用於對上述事件預處理選項進行編程。
- ETFLG - 用標誌位註冊以指示所选和預分頻事件的狀態。
- ETCLR - 這些位允許您通過軟件清除ETFLG寄存器中的標誌位。
- ETFRC - 這些位允許軟件強制執行事件。用於調試或s / w干預。
下圖顯示了事件觸發器的中斷生成邏輯。中斷週期(ETPS [INTPRD])位指定了引起中斷脈衝產生所需的事件數量。可用的選擇是:
- 不要產生中斷。
- 在每個事件上產生一次中斷
- 每兩個事件產生一次中斷
- 每三個事件產生一次中斷
也解釋哪個事件可以引起中斷由中斷選擇,由(ETSEL [INTSEL])位配置。
Event-Trigger SOCA Pulse Generator (用SOCA的脈衝觸發事件)
ePWM Event Trigger Module Registers
EPwm2Regs.TBCTL.bit.SYNCOSEL = 0;
https://common.cnblogs.com/images/loading.gif