AT32定時器說明
定時器框架介紹
定時器由一個16位的自動裝載計數(shù)器組成(TMR2和TMR5較為特殊,其自動裝載計數(shù)器為32位),它由一個可編程的預(yù)分頻器驅(qū)動。它適合多種用途,包含測量輸入信號的脈沖寬度(輸入捕獲),或者產(chǎn)生輸出波形(輸出比較、PWM、嵌入死區(qū)時間的互補(bǔ)PWM等)。
使用定時器預(yù)分頻器和CRM時鐘控制預(yù)分頻器,可以實現(xiàn)脈沖寬度和波形周期從幾個微秒到幾個毫秒的調(diào)節(jié)。
圖1. 通用定時器的框圖
定時器由四個主要部分組成(見圖1)。第一部分時鐘單元。此單元提供定時器的時鐘驅(qū)動。第二部分時鐘基單元,此單元提供定時器計數(shù)功能。第三部分輸入捕獲,此單元允許輸入信號進(jìn)入定時器模塊。第四部分輸出比較,此單元將定時器整合后的PWM輸出。
定時器一般配置步驟
1) 時鐘使能。
crm_periph_clock_enable(CRM_TMR2_PERIPH_CLOCK, TRUE);
2) 初始化定時器參數(shù),設(shè)置自動重裝值,分頻系數(shù),計數(shù)方式等。
在庫函數(shù)中,定時器的初始化參數(shù)是通過初始化函數(shù)tmr_base_init()及tmr_cnt_dir_set()實現(xiàn)的:
void tmr_base_init(tmr_type* tmr_x, uint32_t tmr_pr, uint32_t tmr_div);
其中,第一個參數(shù)是確定是哪個定時器,這個比較容易理解。第二個參數(shù)tmr_pr是定時器計數(shù)的周期值。第二個參數(shù)tmr_div是定時器的分頻系數(shù)。
void tmr_cnt_dir_set(tmr_type *tmr_x, tmr_count_mode_type tmr_cnt_dir);
其中,第一個參數(shù)是確定是哪個定時器,第二個參數(shù)tmr_cnt_dir為定時器的計數(shù)模式(向上,向下,中央對齊)。
特別地,增強(qiáng)模式是TMR2和TMR5獨有的功能。tmr_32_bit_function_enable()為增強(qiáng)模式使能(Plus Mode Enable)函數(shù)。開啟TMRx增強(qiáng)模式,該模式下TMRx_CVAL,TMRx_PR,TMRx_CxDT由16位擴(kuò)展為32位。
void tmr_32_bit_function_enable(tmr_type *tmr_x, confirm_state new_state);
當(dāng)需要配置時鐘除頻參數(shù)時(注意和 TMR_DIV 的區(qū)別,配置濾波、死區(qū)時間時需配置該參數(shù)),會使用到tmr_clock_source_div_set()函數(shù);當(dāng)需要配置重復(fù)周期寄存器時(高級定時器TMR1/TMR8/TMR15才有),會使用到tmr_repetition_counter_set()函數(shù)。本例程不使用這兩個函數(shù),僅做簡要介紹。
void tmr_clock_source_div_set(tmr_type *tmr_x, tmr_clock_division_type tmr_clock_div);
void tmr_repetition_counter_set(tmr_type *tmr_x, uint8_t tmr_rpr_value);
3) 設(shè)置TMRx_ IDEN允許更新中斷。
void tmr_interrupt_enable(tmr_type *tmr_x, uint32_t tmr_interrupt, confirm_state new_state);
這里著重描述參數(shù)tmr_interrupt,它是用來指明我們使能的定時器中斷的類型,定時器中斷的類型有很多種,包括更新中斷,觸發(fā)中斷,以及輸入捕獲中斷等等。
4) TMRx中斷優(yōu)先級設(shè)置。
調(diào)用nvic_irq_enable()函數(shù)即可。
5) 允許TMRx工作,也就是使能TMRx。
void tmr_counter_enable(tmr_type *tmr_x, confirm_state new_state);
6) 編寫中斷服務(wù)函數(shù)。
規(guī)格說明
AT32 PWM高頻測試說明
圖2. 高頻測試原理框圖
測試高頻信號時,將高頻信號輸入作為定時器TMR2的時鐘源(如上圖所示),驅(qū)動定時器TMR2的 Counter計數(shù),使用另一個定時器做時鐘基準(zhǔn),例如每隔1s,獲取TMR2的Counter變化值,則TMR2的變化值即為高頻信號的頻率值。
使用兩個定時器,其中一個定時器為TMR2(這里選取TMR2的原因在于其可以通過設(shè)置TMRx_CTRL1中的PMEN位,開啟TMRx增強(qiáng)模式,該模式下TMRx_CVAL,TMRx_PR,TMRx_CxDT由16位擴(kuò)展為32位),測試高頻時,有利于Counter計數(shù),不容易產(chǎn)生溢出。這樣做的好處在于,既可以測試高頻信號:最高50MHz(受限于I/O口的最高頻率),且沒有頻繁產(chǎn)生中斷,代碼也有冗余,去處理客戶任務(wù)。
使用此方法測試的頻率范圍在:50MHz到1Hz(TMR2的工作頻率為240MHz)。
注意:增強(qiáng)模式是TMR2和TMR5獨有的功能,使用不支持增強(qiáng)模式的其他TMR,或使用不含有增強(qiáng)模式TMR的AT32時,測試頻率會受限。
AT32 PWM低頻測試說明
圖3. 低頻測試原理框圖
測試低頻信號時,將低頻信號輸入作為定時器TMR2的捕獲輸入(如上圖所示),觸發(fā)TMR2的輸入捕獲中斷,利用TMR2工作時鐘除以兩次輸入捕獲之間Counter變化值,即可得到低頻信號頻率值。
這里定時器為TMR2(這里選取TMR2的原因在于其可以通過設(shè)置TMRx_CTRL1中的PMEN位,開啟TMRx增強(qiáng)模式,該模式下TMRx_CVAL,TMRx_PR,TMRx_CxDT由16位擴(kuò)展為32位),有利于低頻測試。
使用此方法測試的最低頻率為:56mHz。(TMR2的工作頻率在240MHz)。
注意:增強(qiáng)模式是TMR2和TMR5獨有的功能,使用不支持增強(qiáng)模式的其他TMR,或使用不含有增強(qiáng)模式TMR的AT32時,測試頻率會受限。
AT32 PWM占空比測試說明
圖4. 占空比測試原理框圖
測試PWM占空比時,利用門控模式(Hang Mode)方式來測量(如上圖所示),將輸入信號同時作為兩個定時器的輸入信號,利用輸入信號來控制定時器的Counter計數(shù)。一個定時器在輸入信號的高電平階段計數(shù),另一個定時器在輸入信號的低電平階段計數(shù),使用第三個定時器作為時間基準(zhǔn),例如產(chǎn)生1s的中斷,在中斷內(nèi),獲取這段時間內(nèi),兩定時器Counter計數(shù)值,將兩值做比值即可獲取當(dāng)前的PWM占空比。
這里定時器為TMR2和TMR5(這里選取TMR2、TMR5的原因在于其可以通過設(shè)置TMRx_CTRL1中的PMEN位,開啟TMRx增強(qiáng)模式,該模式下TMRx_CVAL,TMRx_PR,TMRx_CxDT由16位擴(kuò)展為32位),有利于測試。
這樣做的好處在于,可以測量較高頻率的占空比值,例如10MHz內(nèi),誤差在1%以內(nèi)。且沒有頻繁產(chǎn)生中斷,代碼也有冗余,去處理客戶任務(wù)。
注意:增強(qiáng)模式是TMR2和TMR5獨有的功能,使用不支持增強(qiáng)模式的其他TMR,或使用不含有增強(qiáng)模式TMR的AT32時,測試頻率會受限。
PWM Test快速使用方法
硬件資源
1) AT-START-F403A實驗板
圖5. AT-START-F403A實驗板
注意:該Demo是基于AT32F403A的硬件條件,若使用者需要在AT32其他型號上使用,請修改相應(yīng)配置即可。
pwm input test demo使用
打開pwm input test project源程序,其中,在at32f403a_407_clock.h里面有三個宏定義:
分別用于測試高頻信號,低頻信號,PWM占空比,打開需要測試的宏【注意:每次只開一個宏】。
打開pwm output源程序,其中,在at32f403a_407_clock.h中有三個宏定義:
分別產(chǎn)生高頻信號,低頻信號,PWM占空比用于測試。
AT-START板載的AT-LINK-EZ自帶串口輸出功能,它可以將USART1_TX口PA9輸出至PC。也可使用其他串口工具進(jìn)行測試結(jié)果的輸出。
若測試高頻信號時:
1) 打開pwm output源程序宏定義:#define Output_High_Frequency,PA8產(chǎn)生60MHz PWM
(I/O口已超頻工作,可適當(dāng)降低主頻)。編譯下載到實驗板1。
2) 打開pwm input test程序宏定義:#define high_frequency_test,編譯下載到實驗板2。
3) 將實驗板1的PA8接入到實驗板2的PA0,USART1通過PA9輸出當(dāng)前的PWM頻率信息。
串口打印信息如下:
圖6. 測試高頻信號,串口打印信息
若測試低頻信號時:
1) 打開pwm output源程序宏定義:#define Output_Low_Frequency,PA8產(chǎn)生500mHz PWM。編譯下載到實驗板1。
2) 打開pwm input test程序宏定義:#define low_frequency_test,編譯下載到實驗板2。
3) 將實驗板1的PA8接入到實驗板2的PA0,USART1通過PA9輸出當(dāng)前的PWM頻率信息。
串口打印信息如下(應(yīng)將第一個數(shù)據(jù)舍棄):
圖7. 測試低頻信號,串口打印信息
若測試PWM占空比時,
1) 打開pwm output源程序宏定義:#define Output_PWM_Duty_Ration_10,PA8產(chǎn)生6MHz PWM,占空比為10%。編譯下載到實驗板1。
2) 打開pwm input test程序宏定義:#define duty_ration_test,編譯下載到實驗板2。
3) 將實驗板1的PA8接入到實驗板2的PA0,USART1通過PA9輸出當(dāng)前的PWM占空比信息。
串口打印信息如下:
圖8. 測試 PWM 占空比,串口打印信息
來源:AT32 MCU 雅特力科技
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進(jìn)行處理
審核編輯 黃宇
-
mcu
+關(guān)注
關(guān)注
146文章
17149瀏覽量
351224 -
測試
+關(guān)注
關(guān)注
8文章
5303瀏覽量
126665 -
PWM
+關(guān)注
關(guān)注
114文章
5186瀏覽量
213971 -
定時器
+關(guān)注
關(guān)注
23文章
3248瀏覽量
114832
發(fā)布評論請先 登錄
相關(guān)推薦
評論