CCS Note 04: Using eCAP Module to Detect the PWM Duty

Hsueh-Ju Wu 吳學儒
TI Code Composer Studio
7 min readJul 12, 2022

教學

如何使用F2837xD eCAP模組操作在Capture Mode偵測PWM Duty Cycle

環境

本文使用
OS: Windows x64
Code Composer Studio Version: 11.1
開發板: LAUNCHXL-F28379D Development kit
C2000Ware_4_01_00_00 Example

教學文章列表

參考資料

TMS320F2837xD Dual-Core Delfino Microcontrollers Technical Reference Manual

https://www.ti.com/lit/ug/spruhm8h/spruhm8h.pdf

LAUNCHXL-F28379D Overview User’s Guide (Rev. C)

https://www.ti.com/lit/pdf/sprui77

The TMS320F2837xD Architecture: Achieving a New Level of High Performance

https://www.ti.com/lit/pdf/sprt720

Section 1. 原理

Section 1.1 eCAP模組用途與介紹

  1. 旋轉機械轉速測量(透過Hall Sensor)
  2. 位置感測器Pulse時間間隔測量
  3. 週期或Duty量測

以下為eCAP模組特點:

  1. 4個32bit序列時間郵戳暫存器(按順序紀錄事件觸發時間)
  2. 可設定事件觸發極性(正緣或負緣觸發)
  3. 有事件觸發中斷功能
  4. Single-shot 與 Continuous 模式
  5. 可操作在APWM模式,作為single-channel PWM輸出
  6. 任何腳位都可作為eCAP輸入
Capture Mode of Operation — Reference Manual p.1956
APWM Mode of Operation — Reference Manual p.1956

APWM 模式介紹:

APWM 模式下 CAP1/CAP2 作為 active registers,CAP3/CAP4 作為 shadow registers

Counter Compare and PRD Effects on the eCAP Output in APWM Mode — Reference Manual p.1957

Section 1.2 Capture 模式介紹

eCAP Block Diagram — Reference Manual p.1958

Capture 模式下輸入腳位之脈波可以經過除頻(高頻訊號降頻用,提高解析度,除頻倍率N可選擇2–62),再輸入到eCAP模組。

Event Prescale Control — Reference Manual p.1959
Prescale Function Waveforms — Reference Manual p.1959

Section 1.3 Capture One-shot / Continuous介紹

One-shot CEVT1–4觸發完,不重置凍結暫存器CAP1–4。可手動重置,繼續接受觸發。

Continuous CEVT1–4觸發完,自動重置暫存器CAP1–4,持續覆寫暫存器值。

Section 1.4 eCAP中斷介紹

有7項中斷觸發,CEVT1, CEVT2, CEVT3, CEVT4, CNTOVF, CTR=PRD, CTR=CMP

ECFLG顯示中斷Flag

需打開ECEINT暫存器,使用ECCLR清除中斷,ECFRC可強制進入中斷。

Section 1.5 eCAP偵測Duty與Peroid概念

須將計數器週期數值(tick)換算,才是週期(s)及頻率(Hz)
須將計數器週期數值(tick)換算,才是週期(s)及頻率(Hz)
須將計數器週期數值(tick)換算,才是週期(s)及頻率(Hz)
Section 1.6 會介紹換算方式

Absolute Time-Stamp Operation (絕對值模式)

紀錄絕對時間點(暫存器數值)

計算範例:

Period1 = t3 — t1 (計數器週期數值(tick))

Period2 = t5 — t3 (計數器週期數值(tick))

Duty Cycle1 (on-time %) = (t2 — t1) / Period1 x 100%

Duty Cycle1 (off-time %) = (t3 — t2) / Period1 x 100%

Time Difference (Delta) Operation (差值模式)

紀錄時間差(暫存器差)

計算範例:

Period1 = T1+T2 (計數器週期數值(tick))

Period2 = T3+T4 (計數器週期數值(tick))

Duty Cycle1 (on-time %) = T1 / Period1 x 100%

Duty Cycle1 (off-time %) = T2 / Period1 x 100%

Section 1.6 計數器週期值換算真實時間

基本上沒有特殊設定SYSCLK就等於CPU頻率

以 F28379D 操作在 200MHz下

頻率(Hz) = 200MHz / 計數器週期值
週期(s) = 計數器週期值 / 200MHz

Section 2. 程式講解

Step 1. eCAP 腳位初始化

使用以下程式碼來初始化eCAP GPIO輸入腳位(透過X-bar)

InitECap1Gpio(PIN);
GPIO_SetupPinOptions(PIN, GPIO_INPUT, GPIO_ASYNC);

Step 2. eCAP 模組設定

設定終止觸發事件
ECap1Regs.ECCTL2.bit.STOP_WRAP = 2; // Stop at 3rd event

設定事件觸發條件
ECap1Regs.ECCTL1.bit.CAP1POL = 0; // Rising edge

設定CAP暫存器模式
ECap1Regs.ECCTL1.bit.CTRRST1 = 1; // Difference operation

Cap1 自動為 Absolute Time-Stamp Operation (絕對值模式)

自動重載(重置暫存器)
ECap1Regs.ECCTL1.bit.CAPLDEN = 1; // Enable CAP1-CAP4 register loads
需在重載時間點(可放於中斷結束前),使用以下代碼重載
ECap1Regs.ECCTL2.bit.REARM = 1;

啟用事件觸發中斷
ECap1Regs.ECEINT.bit.CEVT3 = 1; // 3rd event = __interrupt

Step 3. eCAP Time-stamp讀取

在程式中使用ECapXRegs.CAPY 就可以將CAP1–4之值讀取出來了
使用範例如下,計算一PWM之duty cycle(相應Step2設定)

溫馨提醒,用於數值運算記得轉型
因為本身暫存器值可能為integer資料型態
若無轉型可能會出現運算結果異常

使用" (float) " 可強制轉型

--

--