1、引言
STM32 的 Timer 種類眾多,有 High-resolution timer (HRTimer), Advanced-controltimers, General-purpose timers 等,雖然這些 Timer 都是各自獨(dú)立的模塊,但是它們之間是可以進(jìn)行同步以及組合使用的。
本文介紹了一種 High-resolution timer (HRTimer)同步 Advanced-control timer(TIM1)產(chǎn)生 4 路相移 PWM 的方法,即 HRTimer 產(chǎn)生 3 路相移 PWM,再用 TIM1 產(chǎn)生 1路相移 PWM,這四路 PWM 相位差為 90°。與此同時,HRTimer 產(chǎn)生的 3 路 PWM 觸發(fā)ADC 規(guī)則通道采樣,采樣結(jié)果用 DMA 搬運(yùn)到指定地址。
2、試驗(yàn)?zāi)康?
硬件方面,我們選用 ST 官方 NUCLEO-G474 板子作為測試板。軟件方面選用 CubeMx工具進(jìn)行配置并創(chuàng)建基于 HAL 庫的工程代碼,編譯器采用 ARM Keil。
2.1. 模塊框架
這里我們選用 STM32G474 芯片,其內(nèi)部擁有 HRTimer,以及 TIM1,ADC,DMA模塊。我們用 HRTimer 的 Master Timer 的比較器 Compare1,Compare2, Compare3分別去同步子 Timer(TimerA, TimerB, TimerC),從而來調(diào)整 3 個子 TimerTimerA/TimerB/TimerC 的相位。同時 HRTimer 發(fā)出同步信號給 TIM1,使得 TIM1 跟 HRTimer 的 Master Timer 同步。
另外,HRTimer 的子 Timer(TimerA, TimerB, TimerC)分別發(fā)出 Trigger 信號給ADC 采樣,這些 Trigger 信號是“或”的關(guān)系,通過 ADC_Trigger1 內(nèi)部信號去觸發(fā)ADC1 的規(guī)則通道采樣。ADC 的采樣結(jié)果用 DMA 再搬運(yùn)到內(nèi)存中。
3、CubeMX 軟件配置
4、試驗(yàn)結(jié)果
將程序下載到 NUCLEO-G474 板中,然后運(yùn)行,用示波器觀察。ADC 指示的窄脈沖(PC8)表示 ADC 采樣 3 路內(nèi)部模擬信號完成,并且將 ADC 采樣結(jié)果搬運(yùn)到adc_buf[3]這個數(shù)組里面。其時間是在 TA1/TB1/TC1 中心偏后的地方,這是由于觸發(fā)是在TA1/TB1/TC1 的中心,但是 ADC 轉(zhuǎn)換/DMA 搬運(yùn)都需要時間。
5、小結(jié)
移相 PWM 輸出在數(shù)字電源領(lǐng)域,尤其并聯(lián)輸入/輸出拓?fù)淅锓浅3R?,移?PWM 輸出可以減小總體輸入/輸出電流紋波。在此例程中,主要用到了以下知識點(diǎn):? Timer 之間的同步方法:在本例程中我們用到了內(nèi)部信號 tim_itr10 來同步 TIM1
啟動。