DSP EPWM學習筆記2 - EPWM相關寄存器設置問題解析


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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM