1. 目的
STM32G474 系列晶片功能強大,提供了高解析的 Timer ( HRTIM, High-resolution timer ),可靈活產生 PWM 用於各種數位電源拓樸控制,或是各種馬達應用控制。
當然電源與馬達相關的應用控制,有時會發生過電壓或過電流的情況,這時候保護的機制就不可少。STM32G474 除了高解析的 HRTIM,內部 HRTIM 也連結了 DAC、Comparator 模組,當遇到過電壓或是過電流的情況時,內部的比較器能即時產生觸發信號,連結 HRTIM來即時的關閉 PWM輸出信號,做到過電壓與過電流保護。
本篇博文會用到 STM32G474內部的 HRTIM ( 高解析 Timer 模組 ) 來輸出 PWM,另外也會用到DAC 與比較器模組模組來與 HRTIM 作連動設定。由於功能複雜,這邊會讓使用者了解怎麼使用 ST 的 CubeMX 來設定這些相關模組與注意事項。
功能說明 :
這邊會設定三個 Channel HRTIM 的PWM ( HRTIM1_CHA1,HRTIM1_CHB1 ) 輸出,再用一支 MCU Pin ( COMP1_INP ) 設定成比較器,輸入外部電壓,當外部電壓頂到內部 DAC設定保護的電壓值時,會即時的關閉 HRTIM 的 PWM 輸出。
編譯軟體工具 :
a. STM32CubeIDE 1.8.0 ( 軟體編譯工具軟體 )
b. STM32CubeMX 6.7.0 (圖形介面設定 & 產生程式軟體)
硬體工具 :
a. NUCLEO-G474RE ( STM32G474 開發版 )
2. CubeMX設定說明 ( DAC1 )
這邊要設定 STMM32G4內部 DAC 功能。CubeMX 裡面,設定 DAC1,作為比較器的比較電壓。
2.1 OUT1 mode : Connected to external pin and to chip-peripherals
( 設定連接外部腳與晶片內部周邊,可觀察 DAC 輸出與連接到內部比較器)
2.2 Mode selected : Normal Mode
2.3 設定完成後,可以看到右邊晶片已設定好腳位 DAC1_OUT1 (PA4),可用示波器量測此 pin 腳觀察 DAC 輸出變化。
3. CubeMX設定說明 ( COMP1 )
這邊要設定 STM32G474 內部比較器功能。CubeMX 裡面,設定比較器 COMP1,當比較器COMP1 有事件發生時 ( 例如 OVP,OCP ),比較結果的信號輸出到 HRTIM 模組。
3.1 勾選 Input [+] ,設定輸入的 DAC 來源為剛剛設定的 DAC1 OUT1
3.2 Trigger Mode : 設定為 Rising Edge Event ( 當外部電壓頂到 DAC 電壓時,輸出上升沿事件 )
3.3 設定完成後,可以看到右邊晶片已設定好腳位 DAC1_OUT1 ( PA4 ),外部輸入電壓由此腳位輸入,這邊會用可變電阻分壓來做輸入電壓的改變。
4. CubeMX設定說明 ( HRTIM1 )
這邊要設定 STM32G474 的 HRTIIM ( High-resolution timer ) PWM輸出功能,在 CubeMX 裡除了設定 PWM輸出,並且設定比較器觸發信號發生時,及時關閉 PWM。
4.1 在HRTIM1 設定 Timer A 的PWM TA1、Timer B TB1 輸出 PWM。
4.2 設定 HRTIM Timer A PWM 輸出參數重點 ( 1 )
Prescaler Ratio : HRTIM Clock Multiplied by 32 ( 設定除頻 170M/32 )
Period : 54400 ( 設定 PWM 頻率 = 100KHz )
Up Down Mode : Timer counter is operating in up-counting mode ( 上數模式 )
Mode : The timer operates in continuous (free-running) mode ( 連續模式 )
4.3 設定 HRTIM Timer A PWM 輸出參數重點 ( 2 )
Preload Enable : 設定Preload enable ( 啟動預載寫入 )
Repetition Update: 設定 Update on repetition enabled ( 啟動更新事件 )
4.4 設定 HRTIM Timer A PWM 輸出參數重點 ( 3 )
Number of Faults to enable : 1 ( 設定一個 fault 訊號 )
1st Fault Source : Fault 4 enabled ( 設定 fault 4 為來源訊號 )
( 這邊要注意 fault 的來源設定 )
4.5 設定 HRTIM Timer A PWM 輸出參數重點 ( 4 )
設定 Timer A Compare Unit 1,這邊要啟動設定 Timer A 的 compare 的點,整個 Timer 週期 Period 為 54400 ( 100KHz ),compare 1 value 設定 27200,表示 PWM duty 為 50%。
4.6 設定 HRTIM Timer A PWM 輸出參數重點 ( 5 )
Polarity : Output is active HIGH ( 設定 PWM 輸出動作為高準位 )
Set Source Selection : 1 ( 一個set來源 )
1st Set Source : Timer period event forces the out to its active state ( 設定 PWM 當 Timer A 的 period 起始為 high )
Reset Source Selection : 1 ( 一個reset來源 )
1st Reset Source : Timer compare 1 event forces the output to its inactive state ( 設定PWM 當 count 數到 compare 1 時為 Low )
Idle Mode : The output is not affected by the burst mode operation ( 設定當在 Idle mode 的時候不受 burst mode 影響 )
Idle Level : Output at inactive level when in IDLE state ( 設定在 Idle mode 的時候,PWM輸出為 Low 信號 )
Fault Level : Output at inactive level when in FAULT state ( 設定當發生 Fault 的情況時,PWM 輸出為 Low信號 )
4.7 設定 HRTIM Timer A PWM 輸出參數重點 ( 6 )
( 這邊注意 fault 與 Event 的來源 )
External Event 4
Event Configuration : Enable External Event 4 ( 啟動 外部 Event 4 )
Source : External Event Source 2 – COMP1 ( Event 4 來源為 比較器 1 )
Event Polarity : External event is active high ( 事件發生時為 high 信號 )
Event Sensitivity : External event is active on Rising edge ( 比較器信號為上升沿觸發 )
Event Fast Mode : External Event is re-synchronized by the HRTIM logic before acting on output ( 外部信號會在輸出之前重新同步 )
4.8 設定Timer B PWM 輸出
Timer B 的設定內容與 Timer A 一樣。驗證 Fault 發生時,可以關閉 Timer A 與 Timer B。
4.9 完成 CubeMX設定後,點選 GENERATE CODE 產生初始代碼成
-> 點選 Open Project 就可以開啟 CubeIDE 進入程式編輯介面
5. EVM 硬體設定
5.1 MCU Pin 腳規劃如下 ( 範例 )
HRTIM1_CHA1 (PA8) : PWM輸出,Timer A 的 Ch1
HRTIM1_CHB1 (PA10) : PWM輸出,Timer B 的 Ch1
COMP1_INP (PA1) : 外部電壓輸入,這邊用可變電阻調整外部電壓 (0~3V)
DAC1_OUT1(PA4) : DAC 信號輸出,可以觀察設定輸出DAC 電壓,同時輸出到內部比較器1
5.2 開發板 NUCLEO-G474RE 訊號接線圖
這邊要注意,在 CubeMX 設定好的 HRTIM、DAC、Comparator模組,但是這些模組還尚未啟動,在 CubeIDE 編輯程式下就要用程式代碼來啟動這些模組功能。
6.1 在程式中的 Main() 裡面,在初始化程式後請加上設定 DAC 與啟動DAC 程式
//設定 DAC 輸出電壓參數與資料對其方式:
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 1241);
//DAC_ALIGN_12B_R : DAC 的 Data 為 12bit 靠右對其
參數 1241 : DAC 輸出電壓為1V
計算公式如下:
//啟動 DAC1 的 Channel1:
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
6.2 在程式中的 Main() 裡面,在初始化程式後請加上啟動 Comparator 1 程式
// 啟動 Comparator 1
HAL_COMP_Start(&hcomp1);
6.3 在程式中的 Main() 裡面,在初始化程式後請加上啟動 HRTIM1 & Output 程式
//啟動 HRTIM1 的 TimerA & TimerB
HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_A);
HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_B);
//啟動 TimerA 的 TA1 & TimerB 的 TB1 輸出
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1 + HRTIM_OUTPUT_TB1 );
7. 驗證 HRTIM Fault 功能
完成硬體接線與程式後,燒錄程式到開發板的主晶片 STM32G474 驗證 HRTIM 功能,驗證結果如下。
7.1 未發生 Fault 時,HRTIM 的 PWM 皆正常輸出。
Ch1 : TimerA 的 TA1 輸出 PWM
Ch2 : TimerB 的 TB1 輸出 PWM
Ch3 : 可變電阻輸入電壓進入 MCU 比較器腳位
Ch4 : DAC 輸出電壓值為 1V
7.2 透過外部可變電阻,把輸入電壓調整超過 1V,當超過 1V 時,內部比較器會觸發 Fault,關閉 PWM 訊號輸出。在電源或馬達的應用上可以做到,如下圖。
Ch1 : TimerA 的 TA1 輸出 PWM ( PWM 已停止動作 )
Ch2 : TimerB 的 TB1 輸出 PWM ( PWM 已停止動作 )
Ch3 : 可變電阻輸入電壓進入 MCU 比較器腳位,輸入電壓超過 1V
Ch4 : DAC 輸出電壓值為 1V
7.3 當發生 Fault 關閉 HRTIM PWM,輸入電壓回覆到正常狀態( 1V 以下 )時,如果想要回復 HRTIM PWM 啟動狀態,就可以在程式中在下啟動 HRTIM PWM 程式指令如下:
// 重新啟動 HRTIM TimerA TA1 & HRTIM TimerB TB1 輸出
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1 + HRTIM_OUTPUT_TB1 )。
評論
辰亦
4 個月前
Neil_M
5 個月前
ybbbbb
2023年8月26日