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