有人利用STM32G474芯片的高精度定時(shí)器實(shí)現(xiàn)兩對(duì)互補(bǔ)輸出,即用到TIMA和TIMB兩個(gè)定時(shí)單元分別輸出兩對(duì)互補(bǔ)信號(hào)。
可是他發(fā)現(xiàn)兩個(gè)定時(shí)器單元輸出的同頻PWM波形存在著明顯的相位差,就像下面的截圖一樣。
但是他希望二者的輸出完全同步且無(wú)相位差,那有沒(méi)有辦法做到呢?
這是可以的。我們讓HRTIM的定時(shí)單元基于某個(gè)觸發(fā)事件來(lái)同步啟動(dòng)。對(duì)于HRTIM來(lái)說(shuō),可以利用外部觸發(fā)輸入信號(hào)或通用定時(shí)器TIM1的觸發(fā)輸出信號(hào)來(lái)同步HRTIM各定時(shí)單元的啟動(dòng)。這里就如何使用TIM1的觸發(fā)輸出作為HRTIM的同步信號(hào)讓HRTIM的定時(shí)器單元同步啟動(dòng)做下簡(jiǎn)單介紹。
HRTIM的各個(gè)單元間的同步操作是通過(guò)HRTIM里的Master TIMER進(jìn)行管理的,所以要實(shí)現(xiàn)HRTIM各單元間的同步就必須啟用Master TIMER,顯然,除了啟用TIMA/TIMB外,還得使能Master TIMER。
關(guān)于同步配置可以參考下面截圖:
這里對(duì)Master TIMER的配置主要是開(kāi)啟它,讓它能工作,能管理同步事件即可。
經(jīng)過(guò)上面的配置,再對(duì)TIMA/TIMB做“同步事件啟動(dòng)定時(shí)器的配置”后,二者就能做到同步啟動(dòng)了,加上二者配置了相同的PER周期值,這樣就可以輸出如下圖所示的同步同相信號(hào)了。
如果說(shuō)除了TIMA/TIMB的輸出保持同步同相外,還希望中途不時(shí)修改周期及占空比且不破壞同相,那又怎么辦呢? 即如何在輸出頻率和占空比可調(diào)的情況下仍然保持著兩個(gè)定時(shí)器的輸出同步呢?
我們可以開(kāi)啟TIMA或TIMB的更新中斷,在其中任意一個(gè)定時(shí)器的更新中斷服務(wù)程序里同時(shí)修改兩個(gè)定時(shí)器的計(jì)數(shù)周期值和比較值,并開(kāi)啟預(yù)裝功能,讓參數(shù)在下一個(gè)溢出更新事件到來(lái)時(shí)生效,這樣就可以做到既能調(diào)整定時(shí)器的周期值和比較值,又能保證二者的輸出同步。
下面簡(jiǎn)單介紹下實(shí)現(xiàn)過(guò)程。
Master TIMER的配置沒(méi)啥特別的,主要是讓它工作起來(lái),能讓HRTIM的定時(shí)單元的同步起作用。TIMA和TIMB的配置這里基本一樣,二者的配置差別主要體現(xiàn)在比較值不一樣而已。
來(lái)看看TIMA的相關(guān)配置。重點(diǎn)留意下面截圖中下劃線標(biāo)識(shí)的地方。主要配置內(nèi)容包括設(shè)置PER、CMP1的參數(shù),開(kāi)啟同步啟動(dòng)、使能預(yù)裝功能、啟用TIM更新中斷,對(duì)TIMA-TA1/TA2的輸出進(jìn)行配置。
上面是TIMA的基本配置,因?yàn)門(mén)IMB的配置跟TIMA的相比,除了CMP值不同外,其它基本一樣,這里就不重復(fù)貼圖了。
配置完成后,生成HAL類(lèi)初始化代碼。然后添加如下用戶代碼。
HAL_HRTIM_WaveformCountStart_IT(&hhrtim1,HRTIM_TIMERID_TIMER_A);//使能TIMA
HAL_HRTIM_WaveformOutputStart(&hhrtim1 , HRTIM_OUTPUT_TA1);
HAL_HRTIM_WaveformOutputStart(&hhrtim1 , HRTIM_OUTPUT_TA2);
HAL_HRTIM_WaveformCountStart_IT(&hhrtim1, HRTIM_TIMERID_TIMER_B); //使能TIMB
HAL_HRTIM_WaveformOutputStart(&hhrtim1 , HRTIM_OUTPUT_TB1);
HAL_HRTIM_WaveformOutputStart(&hhrtim1 , HRTIM_OUTPUT_TB2);
HAL_TIM_Base_Start(&htim1);//讓TIM1產(chǎn)生同步觸發(fā)信號(hào)
上面的黃色代碼行,基本功能就是開(kāi)啟TIM1,它的TRGO輸出信號(hào)作為HRTIM-TIMA/TIMB的同步啟動(dòng)信號(hào)。如果沒(méi)有這行代碼,此時(shí)的TIMA/TIMB是不會(huì)工作的。
我在TIMA的更新中斷服務(wù)程序里修改TIMA/TIMB的PER/CMP的值,查看輸出結(jié)果。
extern uint16_t Interrupt_Count;
#define HRTIMReg (HRTIM1-》sTimerxRegs)
void HRTIM1_TIMA_IRQHandler(void)
{
/*USER CODE BEGIN HRTIM1_TIMA_IRQn 0 */
/*USER CODE END HRTIM1_TIMA_IRQn 0 */
HAL_HRTIM_IRQHandler(&hhrtim1,HRTIM_TIMERINDEX_TIMER_A);
/*USER CODE BEGIN HRTIM1_TIMA_IRQn 1 */
Interrupt_Count++;
if(Interrupt_Count 《 20000)
{
HRTIMReg[HRTIM_TIMERINDEX_TIMER_A].PERxR= 0xa000;
HRTIMReg[HRTIM_TIMERINDEX_TIMER_A].CMP1xR= 0x2000;
HRTIMReg[HRTIM_TIMERINDEX_TIMER_B].PERxR= 0xa000;
HRTIMReg[HRTIM_TIMERINDEX_TIMER_B].CMP1xR= 0x3000;
}
else if(Interrupt_Count 《 40000)
{
HRTIMReg[HRTIM_TIMERINDEX_TIMER_A].PERxR= 0x9000;
HRTIMReg[HRTIM_TIMERINDEX_TIMER_A].CMP1xR= 0x4000;
HRTIMReg[HRTIM_TIMERINDEX_TIMER_B].PERxR= 0x9000;
HRTIMReg[HRTIM_TIMERINDEX_TIMER_B].CMP1xR= 0x5000;
}
else
{
HRTIMReg[HRTIM_TIMERINDEX_TIMER_A].PERxR= 0x7000;
HRTIMReg[HRTIM_TIMERINDEX_TIMER_A].CMP1xR= 0x2000;
HRTIMReg[HRTIM_TIMERINDEX_TIMER_B].PERxR= 0x7000;
HRTIMReg[HRTIM_TIMERINDEX_TIMER_B].CMP1xR= 0x5000;
}
}
經(jīng)過(guò)測(cè)試,即使修改了兩個(gè)定時(shí)器單元的計(jì)時(shí)周期和占空比,二者的同步一直都可以保持得很好。關(guān)于這個(gè)話題就交流到這里,分享以上內(nèi)容供有需要的人士參考,祝君好運(yùn)!
編輯:jq
-
定時(shí)器
+關(guān)注
關(guān)注
23文章
3298瀏覽量
118794 -
CMP
+關(guān)注
關(guān)注
6文章
156瀏覽量
26658 -
Tim
+關(guān)注
關(guān)注
0文章
84瀏覽量
18343
原文標(biāo)題:STM32高精度定時(shí)器定時(shí)單元間的同步問(wèn)題
文章出處:【微信號(hào):aidanpianji,微信公眾號(hào):?jiǎn)纹瑱C(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
STM32G474如何實(shí)現(xiàn)Buck變換器的COT控制模式?
有一個(gè)關(guān)于STM32G474雙BANK的測(cè)試問(wèn)題求解答
求助,關(guān)于STM32G474雙BANK的測(cè)試問(wèn)題求解
STM32G474高精度定時(shí)器HRTIM配置死區(qū)互補(bǔ)PWM極端輸出問(wèn)題求解
求助,關(guān)于STM32G474高精度定時(shí)器HRTIM配置死區(qū)互補(bǔ)PWM極端輸出問(wèn)題求解
MCU定時(shí)器/計(jì)數(shù)器
求助,關(guān)于STM32G474高精度定時(shí)器HRTIM配置死區(qū)互補(bǔ)PWM極端輸出問(wèn)題求解
stm32G474的flash模式如何判定?
stm32g474 hrtim中怎么使用dual channel DAC trigger?
STM32G474利用高精度HRTIM怎么捕獲外部波形計(jì)算波形頻率?
STM32G474的DAC4無(wú)輸出怎么解決?
如何在MSP430?上實(shí)現(xiàn)內(nèi)置振蕩器的高精度定時(shí)器

評(píng)論