STM32G474 系列晶片功能強大,除了提供了高解析的 Timer ( HRTIM, High-resolution timer ),另外也提供了通用型 Timer ( General-purpose timer ) 可以來做 PWM 輸出使用。
此篇博文來說明如何使用 STM32G474 通用型 Timer計算出 500 KHz的 PWM 輸出,並要注意的細節。
功能說明 :
使用 ST 開發板 ( NUCLEO-G474RE ) TIM8 的 CH1 ( PC6 ) 輸出 500 KHz 的 PWM。編譯軟體工具 :
a. STM32CubeIDE 1.14.1 ( 軟體編譯工具軟體 )
硬體工具 :
型號 : NUCLEO-G474RE ( STM32G474 開發版 )2. CubeMX設定說明 ( TIM clock source )
這邊要設定 STMM32G474 TIM clock source 來源為 170 MHz
APB1 timer clocks : 170 MHz3. CubeMX設定說明 ( TIM8 )
這邊要設定 STM32G474 內部 TIM8_CH1 功能,Pin 腳 PC6 輸出500KHz PWM。
3.1 點選 STM32G474 方塊圖腳位 PC6,再點選 TIM8_CH1。
3.2 點選 Pinout & Configuration -> TIM8 -> Counter Settings ->
Counter Period ( AutoReload Register – 16 bits value ) : 設定 339計算說明 :
Timer module 的 Counter Period 暫存器為 TIM1->ARR,
要設定頻率 500KHz, 公式如下:
Counter Period = Clock source / Timer module頻率
= 170M / 500K
=340但是如果要寫入暫存器 TIM8->ARR 必須要減 1, 所以填入參數如下
TIM1->ARR = Counter Period -1 = 340-1 = 339
TIM1->ARR 設定 339 就是 500KHz
4. PWM duty 計算方式
這邊說明 Timer 的50% PWM duty 計算方式與暫存器。
4.1 點選 Pinout & Configuration -> TIM8 -> PWM Generation -> Pulse 設定170
計算說明 :
設定 PWM pulse width 的暫存器為 TIM-> CCR1, 50% duty 計算如下
TIM->CCR1 = Period * 50% = 340 * 50% = 170
TIM1->CCR1 設定 170 就是 500KHz 50% duty
5. EVM 硬體設定
5.1 STM32G474RET6 MCU 腳位定義規劃如下
PA13 : SWDIO ( 燒錄 Debug PIN )
PA14 : T_SWCLK ( 燒錄 Debug PIN )
PC6 : TIM8_CH1 ( PWM 輸出 PIN )
5.2 開發板 NUCLEO-G474RE 訊號接線圖
示波器訊號連接 PC6 ( TIM8_CH1 ) PWM 輸出 PIN6. 編輯程式
這邊要注意,在 CubeMX 設定好的 TIM 模組後,但 TIM模組還尚未啟動,在 CubeIDE 編輯程式下就要用程式代碼來啟動 TIM模組的 PWM 輸出功能。
6.1 在程式中的 Main() 裡面,初始化程式後與 while(1) 迴圈之前加上啟動 TIM8 Channel 1 的PWM 輸出程式。
6.2 接著 Build ( Compiler ) 專案,確認專案沒有問題
7. 驗證 TIM8 Channel 1 PWM 功能
7.1 燒錄程式進入 Debug mode,並執行程式。
7.2 用邏輯分析儀或示波器來抓取輸出 PWM 波形,可以看到輸出結果如下 :
PWM 頻率 : 500KHz
PWM Duty : 50%
評論