STM32如何使用輸入捕獲功能

關鍵字 :STM32定時器捕獲

引言

 

輸入捕獲是STM32微控制器上可用的高級定時器功能之一。本文將指導您了解輸入捕獲的理論部分,提供一個實際範例,並討論常見問題的故障排除。在本文中,我們使用STM32H563微控制器。

 

1,輸入捕獲基礎

 

輸入捕捉是一項允許定時器記錄外部事件發生時間的功能。這對於測量輸入信號的頻率、週期或脈衝寬度特別有用。定時器在特定輸入引腳上檢測到邊緣(上升沿或下降沿)的時刻,會捕捉其計數器的值。

 

2,關鍵元件

  • 定時器計數器 (Timer counter):一個根據定時器時鐘遞增(或遞減)的暫存器。
  • 捕獲/比較暫存器 (CCR):存儲輸入捕獲事件發生時計數器的值。
  • 輸入捕獲通道(Input capture channel):用於檢測輸入信號的特定引腳及相關電路。

 

3,配置參數

  • 邊沿選擇 (Edge selection):確定捕捉發生在上升沿、下降沿,還是兩者都捕捉。
  • 預分頻器 (Prescaler):分頻定時器時鐘以調整計數器頻率。
  • 濾波器 (Filter):透過在捕捉前要求信號在指定持續時間內保持穩定來過濾噪聲。

 

4,實際範例

 

本範例旨在使用STM32H563上的定時器2測量外部信號的頻率

硬體設定:將外部訊號連接到定時器2通道1的輸入腳位 (PA0)。

 

步驟 1:設定時鐘

在本範例中,HCLK時鐘設定為125MHz。定時器2連接到APB1(請參考數據手冊中的框圖來檢查定時器時鐘)。

 

步驟 2:設定計時器

  • 點擊「Configuration(配置)」選項卡。
  • 選擇TIM2並為Channel 1(通道1)選擇Input capture direct mode(輸入捕獲直接模式)。

以下公式確定計時器的計數器時鐘頻率 (CK_CNT):

CK_CNT = HCLK / (PSC + 1)

其中:

  • HCLK是系統時鐘頻率(本例中為125MHz)。
  • PSC 是預分頻器值。

計時器週期由自動重載暫存器 (ARR) 值和計數器時鐘頻率決定,公式為:

周期 = (ARR + 1) ∗ (1 / CKCNT)

其中:

  • ARR是自動重載暫存器值。
  • CK_CNT 是計數器時鐘頻率。

例如,對於期望的1 ms週期,且CK_CNT=1MHz,我們可以選擇PSC=124,這將時鐘除以125。使用週期公式,ARR=1000-1=999。

 

步驟 3:啟用計時器中斷

 

步驟 4:配置 GPIO 引腳

  • 在 Pinout & Configuration(引腳分配和配置)選項卡中,選擇連接到輸入信號的引腳(TIM2_CH1 的 PA0)。
  • 確保引腳配置為Alternate Function PP(複用功能推挽),並設置為正確的定時器通道。

步驟 5:生成專案程式碼

在中斷模式下啟動輸入捕獲

 

void TIM2_Start_IC(void)
{
    HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);
}

我們使用的變數是:

captureValue:儲存計時器計數器的當前捕捉值

previousCaptureValue:儲存計時器計數器的先前捕獲值。用於計算兩次連續捕獲事件之間的時間差。

頻率:根據捕獲值存儲計算出的輸入信號頻率

處理輸入捕獲中斷

 

uint32_t captureValue = 0;
uint32_t previousCaptureValue = 0;
uint32_t frequency = 0;

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
    if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {
        captureValue = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
        frequency = HAL_RCC_GetPCLK1Freq() / (captureValue - previousCaptureValue);
        previousCaptureValue = captureValue;
    }
}

 

5,已知問題故障排除

 

以下是使用者最可能遇到的問題及其最可能的原因。

5.1. 未偵測到捕獲事件

  • 檢查引腳配置確保輸入引腳已正確配置為定時器的多工功能。
  • 驗證信號完整性確保輸入信號乾淨且符合微控制器要求的電壓水平。如果信號有雜訊,請考慮使用濾波器。

5.2. 頻率測量不正確

  • 調整預分頻器如果測量的頻率過高或過低,請調整預分頻器以使計數值處於可測量範圍內。
  • 對輸入信號進行去抖動使用輸入濾波器功能對噪聲信號進行去抖動。

5.3. 中斷未觸發

  • 啟用 NVIC確保 NVIC 已配置為處理計時器中斷。
  • 檢查定時器時鐘驗證定時器時鐘已啟用且正在運行。

5.4. 溢出和回繞

  • 處理溢出:如果輸入信號的週期長於計時器的週期,則需要實現邏輯來處理計數器溢出。

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

:

評論