TIM — 定時器

  定時器(Timer)最基本的功能就是定時了,好比定時發送 USART數據、定時採集 AD數據等等。若是把定時器與 GPIO 結合起來使用的話能夠實現很是豐富的功能,能夠測量輸入信號的脈衝寬度,能夠產生輸出波形。定時器產生 PWM 控制電機狀態是工業控制廣泛方法,這方面知識很是有必要深刻了解。編程

  STM32F42xxx 系列控制器有 2 個高級控制定時器、10 個通用定時器和 2 個基本定時器,還有 2 個看門狗定時器。控制器上全部定時器都是彼此獨立的,不共享任何資源。安全

基本定時器功能框圖:編碼

  定時器要實現計數必須有個時鐘源,基本定時器時鐘只能來自內部時鐘,高級控制定時器和通用定時器還能夠選擇外部時鐘源或者直接來自其餘定時器等待模式。咱們能夠經過 RCC專用時鐘配置寄存器(RCC_DCKCFGR)的 TIMPRE 位設置全部定時器的時鐘頻率,咱們通常設置該位爲默認值 0,使得表 31-1中可選的最大定時器時鐘爲 90MHz,即基本定時器的內部時鐘(CK_INT)頻率爲 90MHz。基本定時器只能使用內部時鐘,當 TIM6 和 TIM7 控制寄存器 1(TIMx_CR1)的 CEN 位置 1 時,啓動基本定時器,而且預分頻器的時鐘來源就是 CK_INT。對於高級控制定時器和通用定時器的時鐘源能夠來找控制器外部時鐘、其餘定時器等等模式,較爲複雜,咱們在相關章節會詳細介紹。spa

 

定時器控制器控制實現定時器功能,控制定時器復位、使能、計數是其基礎功能,基本定時器還專門用於 DAC轉換觸發。設計

基本定時器計數過程主要涉及到三個寄存器內容,分別是計數器寄存器(TIMx_CNT)、預分頻器寄存器(TIMx_PSC)、自動重載寄存器(TIMx_ARR),這三個寄存器都是 16位有效數字,便可設置值爲 0 至 65535。3d

 

 

 高級定時器:
blog

  高級控制定時器(TIM1 和 TIM8)和通用定時器在基本定時器的基礎上引入了外部引腳,能夠輸入捕獲和輸出比較功能。高級控制定時器比通用定時器增長了可編程死區互補輸出、重複計數器、帶剎車(斷路)功能,這些功能都是針對工業電機控制方面。接口

  高級控制定時器時基單元包含一個 16位自動重載計數器 ARR,一個 16 位的計數器CNT,可向上/下計數,一個 16位可編程預分頻器 PSC,預分頻器時鐘源有多種可選,有內部的時鐘、外部時鐘。還有一個 8位的重複計數器 RCR,這樣最高可實現 40 位的可編程定時。事件

 

1. ①時鐘源
高級控制定時器有四個時鐘源可選:
 內部時鐘源 CK_INT
 外部時鐘模式 1:外部輸入引腳 TIx(x=1,2,3,4)
 外部時鐘模式 2:外部觸發輸入 ETR資源

 內部觸發輸入
內部時鐘源(CK_INT)
內部時鐘 CK_INT即來自於芯片內部,等於 180M,通常狀況下,咱們都是使用內部
時鐘。當從模式控制寄存器 TIMx_SMCR的 SMS位等於 000 時,則使用內部時鐘。

外部時鐘模式 1

 

①:時鐘信號輸入引腳
當使用外部時鐘模式 1 的時候,時鐘信號來自於定時器的輸入通道,總共有 4 個,分
別爲 TI1/2/3/4,即 TIMx_CH1/2/3/4。具體使用哪一路信號,由 TIM_CCMx 的位 CCxS[1:0]
配置,其中 CCM1控制 TI1/2,CCM2 控制 TI3/4。
②:濾波器
若是來自外部的時鐘信號的頻率太高或者混雜有高頻干擾信號的話,咱們就須要使用
濾波器對 ETRP信號從新採樣,來達到降頻或者去除高頻干擾的目的,具體的由
TIMx_CCMx 的位 ICxF[3:0]配置。
③:邊沿檢測
邊沿檢測的信號來自於濾波器的輸出,在成爲觸發信號以前,須要進行邊沿檢測,決
定是上升沿有效仍是降低沿有效,具體的由 TIMx_CCER 的位 CCxP和 CCxNP配置。
④:觸發選擇
當使用外部時鐘模式 1 時,觸發源有兩個,一個是濾波後的定時器輸入 1(TI1FP1)
和濾波後的定時器輸入 2(TI2FP2),具體的由 TIMxSMCR的位 TS[2:0]配置。
⑤:從模式選擇
選定了觸發源信號後,最後咱們需把信號鏈接到 TRGI引腳,讓觸發信號成爲外部時
鐘模式 1 的輸入,最終等於 CK_PSC,而後驅動計數器 CNT計數。具體的配置
TIMx_SMCR的位 SMS[2:0]爲 000 便可選擇外部時鐘模式 1。
⑥:使能計數器
通過上面的 5 個步驟以後,最後咱們只需使能計數器開始計數,外部時鐘模式 1的配
置就算完成。使能計數器由 TIMx_CR1 的位 CEN 配置。

外部時鐘模式 2

①:時鐘信號輸入引腳
當使用外部時鐘模式 2 的時候,時鐘信號來自於定時器的特定輸入通道 TIMx_ETR,
只有 1 個。
②: 外部觸發極性
來自 ETR引腳輸入的信號能夠選擇爲上升沿或者降低沿有效,具體的由 TIMx_SMCR
的位 ETP配置。
③: 外部觸發預分頻器
因爲 ETRP的信號的頻率不能超過 TIMx_CLK(180M)的 1/4,當觸發信號的頻率很
高的狀況下,就必須使用分頻器來降頻,具體的由 TIMx_SMCR的位 ETPS[1:0]配置。
④: 濾波器
若是 ETRP的信號的頻率太高或者混雜有高頻干擾信號的話,咱們就須要使用濾波器
對 ETRP信號從新採樣,來達到降頻或者去除高頻干擾的目的。具體的由 TIMx_SMCR的
位 ETF[3:0]配置,其中的 f DTS 是由內部時鐘 CK_INT分頻獲得,具體的由 TIMx_CR1 的位
CKD[1:0]配置。
⑤:從模式選擇
通過濾波器濾波的信號鏈接到 ETRF引腳後,觸發信號成爲外部時鐘模式 2 的輸入,
最終等於 CK_PSC,而後驅動計數器 CNT計數。具體的配置 TIMx_SMCR的位 ECE 爲 1
便可選擇外部時鐘模式 2。
⑥:使能計數器
通過上面的 5 個步驟以後,最後咱們只需使能計數器開始計數,外部時鐘模式 2的配
置就算完成。使能計數器由 TIMx_CR1 的位 CEN 配置。
內部觸發輸入
內部觸發輸入是使用一個定時器做爲另外一個定時器的預分頻器。硬件上高級控制定時
器和通用定時器在內部鏈接在一塊兒,能夠實現定時器同步或級聯。主模式的定時器能夠對
從模式定時器執行復位、啓動、中止或提供時鐘。高級控制定時器和部分通用定時器
(TIM2 至 TIM5)能夠設置爲主模式或從模式,TIM9 和 TIM10 可設置爲從模式。

 

2. ②控制器
高級控制定時器控制器部分包括觸發控制器、從模式控制器以及編碼器接口。觸發控
制器用來針對片內外設輸出觸發信號,好比爲其它定時器提供時鐘和觸發 DAC/ADC 轉換。
編碼器接口專門針對編碼器計數而設計。從模式控制器能夠控制計數器復位、啓動、遞增/
遞減、計數。
3. ③時基單元

高級控制定時器時基單元包括四個寄存器,分別是計數器寄存器(CNT)、預分頻器寄
存器(PSC)、自動重載寄存器(ARR)和重複計數器寄存器(RCR)。其中重複計數器 RCR是高
級定時器獨有,通用和基本定時器沒有。前面三個寄存器都是 16 位有效,TIMx_RCR寄存
器是 8 位有效。
器 預分頻器 PSC
預分頻器 PSC,有一個輸入時鐘 CK_PSC 和一個輸出時鐘 CK_CNT。輸入時鐘
CK_PSC 就是上面時鐘源的輸出,輸出 CK_CNT則用來驅動計數器 CNT計數。經過設置
預分頻器 PSC的值能夠獲得不一樣的 CK_CNT,實際計算爲:f CK_CNT 等於
f CK_PSC /(PSC[15:0]+1),能夠實現 1 至 65536 分頻。

計數器 CNT
高級控制定時器的計數器有三種計數模式,分別爲遞增計數模式、遞減計數模式和遞
增/遞減(中心對齊)計數模式。
(1) 遞增計數模式下,計數器從 0 開始計數,每來一個 CK_CNT 脈衝計數器就增長 1,直
到計數器的值與自動重載寄存器 ARR值相等,而後計數器又從 0 開始計數並生成計數
器上溢事件,計數器老是如此循環計數。若是禁用重複計數器,在計數器生成上溢事
件就立刻生成更新事件(UEV);若是使能重複計數器,每生成一次上溢事件重複計數
器內容就減 1,直到重複計數器內容爲 0 時纔會生成更新事件。
(2) 遞減計數模式下,計數器從自動重載寄存器 ARR 值開始計數,每來一個 CK_CNT 脈
衝計數器就減 1,直到計數器值爲 0,而後計數器又從自動重載寄存器 ARR 值開始遞
減計數並生成計數器下溢事件,計數器老是如此循環計數。若是禁用重複計數器,在
計數器生成下溢事件就立刻生成更新事件;若是使能重複計數器,每生成一次下溢事
件重複計數器內容就減 1,直到重複計數器內容爲 0時纔會生成更新事件。
(3) 中心對齊模式下,計數器從 0開始遞增計數,直到計數值等於(ARR-1)值生成計數器上
溢事件,而後從 ARR值開始遞減計數直到 1 生成計數器下溢事件。而後又從 0 開始計
數,如此循環。每次發生計數器上溢和下溢事件都會生成更新事件。
器 自動重載寄存器 ARR
自動重載寄存器 ARR用來存放與計數器 CNT比較的值,若是兩個值相等就遞減重複
計數器。能夠經過 TIMx_CR1 寄存器的 ARPE 位控制自動重載影子寄存器功能,若是
ARPE 位置 1,自動重載影子寄存器有效,只有在事件更新時才把 TIMx_ARR值賦給影子
寄存器。若是 ARPE 位爲 0,則修改 TIMx_ARR值立刻有效。
器 重複計數器 RCR
在基本/通用定時器發生上/下溢事件時直接就生成更新事件,但對於高級控制定時器
卻不是這樣,高級控制定時器在硬件結構上多出了重複計數器,在定時器發生上溢或下溢
事件是遞減重複計數器的值,只有當重複計數器爲 0時纔會生成更新事件。在發生 N+1 個
上溢或下溢事件(N 爲 RCR的值)時產生更新事件。

4. ④輸入捕獲

輸入捕獲能夠對輸入的信號的上升沿,降低沿或者雙邊沿進行捕獲,經常使用的有測量輸
入信號的脈寬和測量 PWM 輸入信號的頻率和佔空比這兩種。
輸入捕獲的大概的原理就是,當捕獲到信號的跳變沿的時候,把計數器 CNT的值鎖存
到捕獲寄存器 CCR中,把先後兩次捕獲到的 CCR寄存器中的值相減,就能夠算出脈寬或
者頻率。若是捕獲的脈寬的時間長度超過你的捕獲定時器的週期,就會發生溢出,這個我
們須要作額外的處理。
①輸入通道
須要被測量的信號從定時器的外部引腳 TIMx_CH1/2/3/4 進入,一般叫 TI1/2/3/4,在後
面的捕獲講解中對於要被測量的信號咱們都以 TIx 爲標準叫法。
②輸入濾波器和邊沿檢測器
當輸入的信號存在高頻干擾的時候,咱們須要對輸入信號進行濾波,即進行從新採樣,
根據採樣定律,採樣的頻率必須大於等於兩倍的輸入信號。好比輸入的信號爲 1M,又存
在高頻的信號干擾,那麼此時就頗有必要進行濾波,咱們能夠設置採樣頻率爲 2M,這樣
能夠在保證採樣到有效信號的基礎上把高於 2M的高頻干擾信號過濾掉。
濾波器的配置由 CR1 寄存器的位 CKD[1:0]和 CCMR1/2 的位 ICxF[3:0]控制。從 ICxF
位的描述可知,採樣頻率 f SAMPLE 能夠由 f CK_INT 和 f DTS 分頻後的時鐘提供,其中是 f CK_INT 內
部時鐘,f DTS 是 f CK_INT 通過分頻後獲得的頻率,分頻因子由 CKD[1:0]決定,能夠是不分頻,
2 分頻或者是 4 分頻。
邊沿檢測器用來設置信號在捕獲的時候是什麼邊沿有效,能夠是上升沿,降低沿,或
者是雙邊沿,具體的由 CCER 寄存器的位 CCxP和 CCxNP決定。

③捕獲通道
捕獲通道就是圖中的 IC1/2/3/4,每一個捕獲通道都有相對應的捕獲寄存器 CCR1/2/3/4,
當發生捕獲的時候,計數器 CNT的值就會被鎖存到捕獲寄存器中。
這裏咱們要搞清楚輸入通道和捕獲通道的區別,輸入通道是用來輸入信號的,捕獲通
道是用來捕獲輸入信號的通道,一個輸入通道的信號能夠同時輸入給兩個捕獲通道。好比
輸入通道 TI1 的信號通過濾波邊沿檢測器以後的 TI1FP1 和 TI1FP2 能夠進入到捕獲通道
IC1 和 IC2,其實這就是咱們後面要講的 PWM輸入捕獲,只有一路輸入信號(TI1)卻佔
用了兩個捕獲通道(IC1 和 IC2)。當只須要測量輸入信號的脈寬時候,用一個捕獲通道即
可。輸入通道和捕獲通道的映射關係具體由寄存器 CCMRx 的位 CCxS[1:0]配置。
④的預分頻器
ICx 的輸出信號會通過一個預分頻器,用於決定發生多少個事件時進行一次捕獲。具
體的由寄存器 CCMRx 的位 ICxPSC 配置,若是但願捕獲信號的每個邊沿,則不分頻。
⑤捕獲寄存器
通過預分頻器的信號 ICxPS是最終被捕獲的信號,當發生捕獲時(第一次),計數器
CNT的值會被鎖存到捕獲寄存器 CCR中,還會產生 CCxI中斷,相應的中斷位 CCxIF(在
SR寄存器中)會被置位,經過軟件或者讀取 CCR中的值能夠將 CCxIF清 0。若是發生第
二次捕獲(即重複捕獲:CCR 寄存器中已捕獲到計數器值且 CCxIF 標誌已置 1),則捕獲
溢出標誌位 CCxOF(在 SR寄存器中)會被置位,CCxOF只能經過軟件清零。
5. ⑤輸出比較

輸出比較就是經過定時器的外部引腳對外輸出控制信號,有凍結、將通道 X(x=1,2,3,4)設置爲匹配時輸出有效電平、將通道 X設置爲匹配時輸出無效電平、翻轉、強制變爲無效電平、強制變爲有效電平、PWM1和 PWM2 這八種模式,具體使用哪一種模式由寄存器 CCMRx 的位 OCxM[2:0]配置。其中 PWM模式是輸出比較中的特例,使用的也最多。
①比 較寄存器
當計數器 CNT的值跟比較寄存器 CCR的值相等的時候,輸出參考信號 OCxREF的信號的極性就會改變,其中 OCxREF=1(高電平)稱之爲有效電平,OCxREF=0(低電平)稱之爲無效電平,而且會產生比較中斷 CCxI,相應的標誌位 CCxIF(SR寄存器中)會置位。而後 OCxREF再通過一系列的控制以後就成爲真正的輸出信號 OCx/OCxN。
②死區發生器
在生成的參考波形 OCxREF 的基礎上,能夠插入死區時間,用於生成兩路互補的輸出信號 OCx 和 OCxN,死區時間的大小具體由 BDTR寄存器的位 DTG[7:0]配置。死區時間的大小必須根據 與輸出信號相鏈接的器件及其特性來調整。下面咱們簡單舉例說明下帶死區的
PWM信號的應用,咱們以一個板橋驅動電路爲例。

在這個半橋驅動電路中,Q1導通,Q2截止,此時我想讓 Q1截止 Q2導通,確定是要先讓Q1截止一段時間以後,再等一段時間才讓 Q2導通,那麼這段等待的時間就稱爲死區時間,因爲 Q1關閉須要時間(由 MOS管的工藝決定)。若是 Q1關閉以後,立刻打開 Q2,那麼此時一段時間內至關於 Q1和 Q2都導通了,這樣電路會短路。

③輸出控制

 

在輸出比較的輸出控制中,參考信號 OCxREF在通過死區發生器以後會產生兩路帶死區的互補信號 OCx_DT和 OCxN_DT(通道 1~3 纔有互補信號,通道 4 沒有,其他跟通道1~3 同樣),這兩路帶死區的互補信號而後就進入輸出控制電路,若是沒有加入死區控制,那麼進入輸出控制電路的信號就直接是 OCxREF。
進入輸出控制電路的信號會被分紅兩路,一路是原始信號,一路是被反向的信號,具體的由寄存器 CCER 的位 CCxP和 CCxNP控制。通過極性選擇的信號是否由 OCx引腳輸出到外部引腳 CHx/CHxN 則由寄存器 CCER 的位 CxE/CxNE 配置。
若是加入了斷路(剎車)功能,則斷路和死區寄存器 BDTR的 MOE、OSSI和 OSSR這三個位會共同影響輸出的信號。
④輸出引腳
輸出比較的輸出信號最終是經過定時器的外部 IO來輸出的,分別爲 CH1/2/3/4,其中前面三個通道還有互補的輸出通道 CH1/2/3N。更加詳細的 IO 說明還請查閱相關的數據手冊。

 

6. ⑥斷路功能
斷路功能就是電機控制的剎車功能,使能斷路功能時,根據相關控制位狀態修改輸出信號電平。在任何狀況下,OCx 和 OCxN 輸出都不能同時爲有效電平,這關係到電機控制經常使用的 H橋電路結構緣由。
斷路源能夠是時鐘故障事件,由內部復位時鐘控制器中的時鐘安全系統(CSS)生成,也能夠是外部斷路輸入 IO,二者是或運算關係。
系統復位啓動都默認關閉斷路功能,將斷路和死區寄存器(TIMx_BDTR)的 BKE 爲置 1,使能斷路功能。可經過 TIMx_BDTR 寄存器的 BKP位設置設置斷路輸入引腳的有效電平,設置爲 1 時輸入 BRK爲高電平有效,不然低電平有效。
發送斷路時,將產生如下效果:
 TIMx_BDTR 寄存器中主輸出模式使能(MOE)位被清零,輸出處於無效、空閒或
復位狀態;
 根據相關控制位狀態控制輸出通道引腳電平;當使能通道互補輸出時,會根據情
況自動控制輸出通道電平;
 將 TIMx_SR 寄存器中的 BIF位置 1,並可產生中斷和 DMA傳輸請求。
 若是 TIMx_BDTR 寄存器中的 自動輸出使能(AOE)位置 1,則 MOE位會在發生下
一個 UEV事件時自動再次置 1。

3 輸入捕獲應用

輸入捕獲通常應用在兩個方面,一個方面是脈衝跳變沿時間測量,另外一方面是 PWM輸入測量