DSP EPWM學習筆記2 - EPWM相關寄存器設置問題解析
彭會鋒
本篇主要針對不太熟悉的TZ 故障捕獲 和 DB 死區產生兩個子模塊進行學習研究
感覺TI的寄存器命名還是有一定規律可循的
SEL主要用於選擇位 CTL主要用於控制位 EINT主要用於使能中斷 FLG是標志查詢位 CLR中斷標志清除位 FRC 軟件強制使能設置位
1 TZ 故障捕獲子模塊
TZ子模塊可以工作在Cycle-by-Cycle、One-Shot兩種模式下,這兩種狀態的區別是:
- one-shot是永久起作用的,恢復它只有人工清除。
- 而Cycle-by-Cycle卻是本周期有用,下一周期自動恢復
外部觸發選擇寄存器TZSEL 寄存器設置選項如下:
TZCTL主要設置TZA 和TZB寄存器即可,主要定義當外部觸發事件發生時,定義EPWMxA和EPWMxB所采取的動作:
TZEINT 中斷使能寄存器 控制周期觸發和單次觸發的中斷標志使能
TZFLG 是外部觸發標志寄存器 TZCLR外部觸發清零寄存器 這兩個理解起來比較簡單,所以不再做過多說明,就是中斷的時候查詢標志位,然后中斷發生了就把標志位清零即可!
TZFRC 外部觸發強制寄存器
TZ寄存器配置代碼
EALLOW; EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_HI; // Forced Hi (EPWM1A = High state) EPwm1Regs.TZCTL.bit.TZB = TZ_FORCE_HI; // Forced Hi (EPWM1B = High state) EPwm1Regs.TZFRC.bit.OST = 1; // Forces a fault on the OST latch and sets the OSTFLG bit. EDIS;
2 DB 死區產生
2.1 DB寄存器設置
2.2 死區產生子模塊內部結構
結合上圖可以看出,DBCLT[IN_MODEL]就是選擇哪個作為輸入信號源進行延時控制;通過延時模塊之后,實現上升沿和下降沿的延時功能;
然后有一個反相器模塊,可以產生互補的輸出信號,是否反轉可以通過寄存器DBCTL[POLSEL]進行設置,感覺這個寄存器就是設置信號是否反轉的,如果是1就反轉,如果0就不反轉,就這樣子!
DBCTL[OUT_MODE]主要作用是選擇那個信號進行輸出,如果選擇0,那么之前的延時的信號就被旁路掉了,整個DB模塊就不起作用了,選擇1才會產生死區功能;
2.3 經典死區配置方案(感覺這里的后綴 C 就是互補的意思,沒后綴則無互補,這個在2.4的波形圖里面可以得到更好的體現)
2.4 加入死區延時的波形輸出 (對比着2.2看2.3和2.4的圖是最好明白寄存器配置的,也好理解輸出波形是怎么樣子的!)
2.5 寄存器配置代碼
// DBCTL (Dead-Band Control) //========================== // OUT MODE bits #define DB_DISABLE 0x0 #define DBB_ENABLE 0x1 #define DBA_ENABLE 0x2 #define DB_FULL_ENABLE 0x3 // POLSEL bits #define DB_ACTV_HI 0x0 #define DB_ACTV_LOC 0x1 #define DB_ACTV_HIC 0x2 #define DB_ACTV_LO 0x3 // IN MODE #define DBA_ALL 0x0 #define DBB_RED_DBA_FED 0x1 #define DBA_RED_DBB_FED 0x2 #define DBB_ALL 0x3
// Active Low PWMs - Setup Deadband
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; //這里基本上都是配置兩個波形都是有延時才輸出的,不會旁路掉延時波形
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LO; //低電平有效,這里會對電平進行一個反轉
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL; //選擇 epwmxa作為信號源作為延時依據
EPwm1Regs.DBRED = EPWM1_MIN_DB; //設置上升沿的延時
EPwm1Regs.DBFED = EPWM1_MIN_DB; //設置下降沿的延時
EPwm1_DB_Direction = DB_UP;