CubeIDE Note 09: Lesson 6. Tutorial of using HRTIM to generate SPWM

Hsueh-Ju Wu 吳學儒
STM32CubeIDE
Published in
6 min readJun 17, 2021

實作

如何使用 HRTIM產生SPWM

環境

本文使用
OS: Windows x64
STM32CubeIDE Version: 1.6.1
開發板: NUCLEO-F334R8(STM32F334R8)
Low-Layer (LL) Library

教學文章列表

參考資料

UM2570. Description of STM32G4 HAL and low-layer drivers

https://www.st.com/resource/en/user_manual/dm00610707-description-of-stm32g4-hal-and-lowlayer-drivers--stmicroelectronics.pdf

RM0364. STM32F334xx advanced Arm®-based 32-bit MCUs

https://www.st.com/resource/en/reference_manual/dm00093941-stm32f334xx-advanced-armbased-32bit-mcus-stmicroelectronics.pdf

Datasheet. STM32F334x4 STM32F334x6 STM32F334x8

https://www.st.com/resource/en/user_manual/dm00108524--discovery-kit-for-stm32f3-series-with-stm32f334c8-mcu-stmicroelectronics.pdf

Section 1. 測驗題

以不同方式產生SPWM (Sinusoidal Pulse Width Modulation)波形。

A.

設定訊號產生器產生一60Hz之弦波訊號,
其振幅為0~3V(offset電壓為1.5V),並使用ADC1_IN1接收此訊號。
此外,利用HRTIM Timer Master作為中斷之觸發訊號,中斷頻率為20kHz。接下來,利用ADC1_IN1讀取外部弦波,經過計算後,
使HRTIM Timer A模組輸出SPWM訊號,
其Duty最大為90% (對應至弦波波峰),
最小為10% (對應至弦波波谷);
而Timer Master, A模組之頻率為20kHz,
CHA1與CHA2為互補訊號,deadtime為1μs。示意圖如下圖所示。

圖源:https://news.21dianyuan.com/detail/47752

B.

不使用任何外部訊號輸入,直接由DSP內部之程式設定與撰寫,
分別輸出下列要求之SPWM訊號於CHA1與CHA2。

i. 頻率為 30Hz之 SPWM
ii. 頻率為 60Hz之 SPWM
iii. 頻率為 120Hz之 SPWM

Section 1.1 CubeMX 設定

A. 參考資料

CubeIDE Note 05: Lesson 3. HRTIM PWM Setting And Application

CubeIDE Note 06: Lesson 4. ADC Setting And Application

B. ioc檔與設定報告

- ioc檔 (for F334R8) https://drive.google.com/file/d/1aIMNGufgrGj8r0qZGsFcsuHQaNkrwy95/view?usp=sharing

- 設定報告 ( pdf )
https://drive.google.com/file/d/18ofhHn2YeyVbPZ4Tbkyv3vxyQH6AOqUT/view?usp=sharing

Section 1.2 程式撰寫

題目A

main.c

stm32f3xx_it.c

由於 fPWM 宣告在main.c裡面
如果要共用變數,必須使用extern關鍵字宣告一次

對ADC值做了縮放跟平移是為了讓duty介於 0.1 ~ 0.9 之間。

題目B

main.c

stm32f3xx_it.c

因為用到 PI 及 sin 所以要引入 math.h 函數庫
sin回傳值為double
接著利用Timer Master的中斷函數(1/20000 s觸發一次)來計時,
令一整數i來計數觸發次數,
以便重置(不重置好像也能動,只是有一天資料會溢位),
一個完整週期會觸發20000次(1s),
所以用i除以20000即可得出比例時間,
題目要求30、60、120Hz,就等於週期變為1/30、1/60、1/120,
用時間i乘上頻率即可縮短週期,
一個完整週期為2π,至於那個3π,
筆者也不知道怎麼來的,
就測量後發現用2π 做出來頻率會只有 2/3 倍,所以要修正
歡迎知道為甚麼的同學告訴我,感謝

對sin值做了縮放跟平移是為了讓duty介於 0.1 ~ 0.9 之間。

Section 1.3 實驗結果

題目A

題目B

使用低通濾波器對SPWM濾波可得到調變訊號(低頻弦波)
筆者是直接對 CHA1 並聯1顆 470uF 電容

i. 30Hz

ii. 60Hz

iii. 120Hz

原波形展示

--

--