AT32定時器說明
定時器框架介紹
定時器由一個16位的自動裝載計數(shù)器組成(TMR2和TMR5較為特殊,其自動裝載計數(shù)器為32位),它由一個可編程的預(yù)分頻器驅(qū)動。它適合多種用途,包含測量輸入信號的脈沖寬度(輸入捕獲),或者產(chǎn)生輸出波形(輸出比較、PWM、嵌入死區(qū)時間的互補PWM等)。
使用定時器預(yù)分頻器和CRM時鐘控制預(yù)分頻器,可以實現(xiàn)脈沖寬度和波形周期從幾個微秒到幾個毫秒的調(diào)節(jié)。
圖1. 通用定時器的框圖
定時器由四個主要部分組成(見圖1)。第一部分時鐘單元。此單元提供定時器的時鐘驅(qū)動。第二部分時鐘基單元,此單元提供定時器計數(shù)功能。第三部分輸入捕獲,此單元允許輸入信號進入定時器模塊。第四部分輸出比較,此單元將定時器整合后的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ù)模式(向上,向下,中央對齊)。特別地,增強模式是TMR2和TMR5獨有的功能。tmr_32_bit_function_enable()為增強模式使能(Plus Mode Enable)函數(shù)。開啟TMRx增強模式,該模式下TMRx_CVAL,TMRx_PR,TMRx_CxDT由16位擴展為32位。void tmr_32_bit_function_enable(tmr_type *tmr_x, confirm_state new_state);
當需要配置時鐘除頻參數(shù)時(注意和 TMR_DIV 的區(qū)別,配置濾波、死區(qū)時間時需配置該參數(shù)),會使用到tmr_clock_source_div_set()函數(shù);當需要配置重復(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ù),使用另一個定時器做時鐘基準,例如每隔1s,獲取TMR2的Counter變化值,則TMR2的變化值即為高頻信號的頻率值。
使用兩個定時器,其中一個定時器為TMR2(這里選取TMR2的原因在于其可以通過設(shè)置TMRx_CTRL1中的PMEN位,開啟TMRx增強模式,該模式下TMRx_CVAL,TMRx_PR,TMRx_CxDT由16位擴展為32位),測試高頻時,有利于Counter計數(shù),不容易產(chǎn)生溢出。這樣做的好處在于,既可以測試高頻信號:最高50MHz(受限于I/O口的最高頻率),且沒有頻繁產(chǎn)生中斷,代碼也有冗余,去處理客戶任務(wù)。
使用此方法測試的頻率范圍在:50MHz到1Hz(TMR2的工作頻率為240MHz)。
注意:增強模式是TMR2和TMR5獨有的功能,使用不支持增強模式的其他TMR,或使用不含有增強模式TMR的AT32時,測試頻率會受限。
AT32 PWM低頻測試說明
圖3. 低頻測試原理框圖
測試低頻信號時,將低頻信號輸入作為定時器TMR2的捕獲輸入(如上圖所示),觸發(fā)TMR2的輸入捕獲中斷,利用TMR2工作時鐘除以兩次輸入捕獲之間Counter變化值,即可得到低頻信號頻率值。
這里定時器為TMR2(這里選取TMR2的原因在于其可以通過設(shè)置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計數(shù)。一個定時器在輸入信號的高電平階段計數(shù),另一個定時器在輸入信號的低電平階段計數(shù),使用第三個定時器作為時間基準,例如產(chǎn)生1s的中斷,在中斷內(nèi),獲取這段時間內(nèi),兩定時器Counter計數(shù)值,將兩值做比值即可獲取當前的PWM占空比。
這里定時器為TMR2和TMR5(這里選取TMR2、TMR5的原因在于其可以通過設(shè)置TMRx_CTRL1中的PMEN位,開啟TMRx增強模式,該模式下TMRx_CVAL,TMRx_PR,TMRx_CxDT由16位擴展為32位),有利于測試。
這樣做的好處在于,可以測量較高頻率的占空比值,例如10MHz內(nèi),誤差在1%以內(nèi)。且沒有頻繁產(chǎn)生中斷,代碼也有冗余,去處理客戶任務(wù)。
注意:增強模式是TMR2和TMR5獨有的功能,使用不支持增強模式的其他TMR,或使用不含有增強模式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。也可使用其他串口工具進行測試結(jié)果的輸出。
若測試高頻信號時:
1)打開pwm output源程序宏定義:#define Output_High_Frequency,PA8產(chǎn)生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產(chǎn)生500mHz PWM。編譯下載到實驗板1。
2) 打開pwm input test程序宏定義:#define low_frequency_test,編譯下載到實驗板2。
3) 將實驗板1的PA8接入到實驗板2的PA0,USART1通過PA9輸出當前的PWM頻率信息。
串口打印信息如下(應(yīng)將第一個數(shù)據(jù)舍棄):
圖7. 測試低頻信號,串口打印信息
若測試PWM占空比時,
1) 打開pwm output源程序宏定義:#define Output_PWM_Duty_Ration_10,PA8產(chǎn)生6MHzPWM,占空比為10%。編譯下載到實驗板1。
2) 打開pwm input test程序宏定義:#define duty_ration_test,編譯下載到實驗板2。
3) 將實驗板1的PA8接入到實驗板2的PA0,USART1通過PA9輸出當前的PWM占空比信息。
串口打印信息如下:圖8. 測試 PWM 占空比,串口打印信息關(guān)于雅特力雅特力科技于2016年成立,是一家致力于推動全球市場32位微控制器(MCU)創(chuàng)新趨勢的芯片設(shè)計公司,專注于ARM Cortex-M4/M0+的32位微控制器研發(fā)與創(chuàng)新,全系列采用55nm先進工藝及ARM Cortex-M4高效能或M0+低功耗內(nèi)核,締造M4業(yè)界最高主頻288MHz運算效能,并支持工業(yè)級別芯片工作溫度范圍(-40°~105°)。雅特力目前已累積相當多元的終端產(chǎn)品成功案例:如微型打印機、掃地機、光流無人機、熱成像儀、激光雷達、工業(yè)縫紉機、伺服驅(qū)控、電競周邊市場、斷路器、ADAS、T-BOX、數(shù)字電源、電動工具等終端設(shè)備應(yīng)用,廣泛地覆蓋5G、物聯(lián)網(wǎng)、消費、商務(wù)及工控等領(lǐng)域。
-
mcu
+關(guān)注
關(guān)注
146文章
16888瀏覽量
349929
發(fā)布評論請先 登錄
相關(guān)推薦
評論