stm32高級定時器


stm32高級定時器

高級定時器時基單元:

包含一個16位自動重裝載寄存器 ARR

一個16位的計數器CNT,可向上/下計數

一個16位可編程預分頻器PSC,預分頻器時鍾源有多種可選,有內部的時鍾、外部時鍾。

一個8位的重復計數器 RCR,最高可實現40位的可編程定時。

STM32F103ZET6的高級/通用定時器的IO分配:

在這里插入圖片描述

高級控制定時器功能框圖

在這里插入圖片描述

時鍾源

高級控制定時器有四個時鍾源:

內部時鍾源 CK_INT

外部時鍾模式1:外部輸入引腳TIx(x=1,2,3,4)

外部時鍾模式 2:外部觸發輸入ETR

內部觸發輸入(ITRx)

內部時鍾源

CK_INT來自於芯片內部,72M,

模式控制寄存器TIMx_SMCR的SMS位=000時,使用內部時鍾。

外部時鍾模式1

在這里插入圖片描述

時鍾信號輸入引腳:

時鍾信號來自於定時器的輸入通道,共4個,分別為TI1/2/3/4,即TIMx_CH1/2/3/4。

使用哪一路信號由TIM_CCMRx的位CCxS[1:0]配置,CCMR1控制TI1/2,CCMR2控制TI3/4。

濾波器:

來自外部的時鍾信號頻率過高、混雜有高頻干擾信號,需要用濾波器對信號重新采樣,達到降頻、去除高頻干擾的目的。

由 TIMx_CCMRx 的位 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。

使能計數器:

使能計數器開始計數,外部時鍾模式1的配置完成。

使能計數器由TIMx_CR1的位CEN配置。

外部時鍾模式2

在這里插入圖片描述

時鍾信號輸入引腳:

時鍾信號來自於定時器的輸入通道TIMx_ETR,僅有1個。

外部觸發極性:

來自ETR引腳的輸入信號可選擇為上升沿或者下降沿有效。

由TIMx_SMCR位ETP配置。

外部觸發預分頻器:

ETRP信號的頻率不能超過TIMx_CLK(72M)的1/4。

觸發信號的頻率很高的情況下,須使用分頻器降頻。

由TIMx_SMCR的位ETPS[1:0]配置。

濾波器:

ETRP信號的頻率過高或、混雜有高頻干擾信號,要用濾波器對ETRP信號重新采樣。

由TIMx_SMCR位ETF[3:0]配置。

fDTS由內部時鍾CK_INT分頻得到,由TIMx_CR1位CKD[1:0]配置。

從模式選擇:

經濾波器濾波的信號,連接到ETRF引腳,觸發信號成為外部時鍾模式2的輸入。

最終等於 CK_PSC,驅動計數器CNT計數。

TIMx_SMCR的位ECE為1,即可選擇外部時鍾模式2。

接下來配置TIMx_CR1的位CEN,使能計數器開始計數,完成外部時鍾模式2的配置。

內部觸發輸入

使用一個定時器作為另一個定時器的預分頻器

高級控制定時器和通用定時器在內部連接在一起。

可實現定時器同步或級聯。

主模式定時器可對從模式定時器執行復位、啟動、停止、提供時鍾。

控制器

包括觸發控制器、從模式控制器、編碼器接口。

觸發控制器:

對片內外設輸出觸發信號,為其它定時器提供時鍾、觸發DAC/ADC轉換。

從模式控制器:

控制計數器復位、啟動、遞增/遞減、計數。

編碼器接口:

編碼器計數。

時基單元

在這里插入圖片描述

時基單元包括四個寄存器:

計數器寄存器(CNT)、預分頻器寄存器(PSC)、自動重載寄存器(ARR)、重復計數器寄存器(RCR)。前三個寄存器16位有效,TIMx_RCR寄存器8位有效。

預分頻器PSC:

輸入時鍾CK_PSC,輸出時鍾CK_CNT。

輸出時鍾CK_CNT用來驅動計數器CNT計數。

設置預分頻器PSC的值可得到不同的CK_CNT。

fCK_CNT=fCK_PSC/(PSC[15:0]+1),實現1至65536分頻。

計數器CNT:

三種計數模式:

遞增計數模式、遞減計數模式、遞增/遞減(中心對齊)計數模式。

遞增計數模式:

計數器從0開始計數,每來一個CK_CNT脈沖,計數器加1,直到計數器的值=自動重載寄存器 ARR的值,計數器從0開始計數並生成計數器上溢事件。

若禁用重復計數器,計數器生成上溢事件時生成更新事件(UEV)。

若使能重復計數器,生成一次上溢事件,重復計數器內容減1,直到重復計數器內容=0 ,才會生成更新事件。

遞減計數模式:

從自動重載寄存器ARR的值開始計數。

每來一個CK_CNT脈沖,計數器減1,直到計數器值=0。

然后,計數器又從自動重載寄存器ARR的值開始遞減,並生成計數器下溢事件。

若禁用重復計數器,計數器生成下溢事件時生成更新事件(UEV)。

若使能重復計數器,生成一次下溢事件,重復計數器內容減1,直到重復計數器內容=0 ,才會生成更新事件。

遞增/遞減(中心對齊)計數模式:

從0開始遞增計數,直到計數值=(ARR-1)值,生成計數器上溢事件。然后,從ARR值開始遞減計數,直到計數值=1,生成計數器下溢事件。

然后又從0開始計數,循環。

每次發生上溢、下溢事件,都會生成更新事件。

自動重載寄存器ARR:

存放與計數器CNT比較的值。

兩個值相等就遞減重復計數器。

TIMx_CR1寄存器的ARPE位,控制自動重載影子寄存器功能。

ARPE位=1,自動重載影子寄存器有效。在事件更新時,才把TIMx_ARR值賦給影子寄存器。

ARPE位=0,修改TIMx_ARR值馬上有效。

重復計數器RCR:

基本/通用定時器,發生上/下溢事件時,直接生成更新事件。

高級控制定時器多出了重復計數器。

定時器發生上溢、下溢事件時,遞減重復計數器的值。

當重復計數器為0時,才會生成更新事件。

發生N+1個上溢、下溢事件(N 為 RCR 的值)時,產生更新事件。

輸入捕獲

在這里插入圖片描述

可以對輸入的信號的上升沿、下降沿、雙邊沿進行捕獲。

測量輸入信號的脈寬、測量PWM輸入信號的頻率和占空比。

捕獲到信號的跳變沿時,把計數器CNT的值鎖存到捕獲寄存器CCR中。

將前后兩次捕獲到的CCR寄存器中的值相減,可以算出脈寬或頻率。

捕獲的脈寬的時間長度超過捕獲定時器的周期,會發生溢出。

輸入通道

需要被測量的信號,從定時器外部引腳TIMx_CH1/2/3/4進入,通常叫TI1/2/3/4。

輸入濾波器和邊沿檢測器

輸入的信號存在高頻干擾,需要對輸入信號進行濾波,進行重新采樣。

采樣的頻率必須大於等於兩倍的輸入信號。

輸入信號為1M,設置采樣頻率為2M,可以在采樣到有效信號的基礎上,把高於2M的高頻干擾信號過濾掉。

由CR1寄存器的位CKD[1:0]和CCMR1/2的位ICxF[3:0]配置濾波器。

采樣頻率fSAMPLE可以由fCK_INT和fDTS分頻后的時鍾提供。

fCK_INT是內部時鍾,fDTS是fCK_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只能通過軟件清零。

輸出比較

在這里插入圖片描述

通過定時器的外部引腳,對外輸出控制信號。

有凍結、將通道X(x=1,2,3,4)設置為匹配時輸出有效電平、匹配時輸出無效電平、翻轉、強制變為無效電平、強制變為有效電平、PWM1、PWM2八種模式。

具體使用哪種模式,由寄存器CCMRx的位OCxM[2:0]配置。

比較寄存器

計數器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都導通了,電路會短路。

所以需要死區時間。

帶死區插入的互補輸出,死區時間要根據MOS管的工藝來調節。

輸出控制

在這里插入圖片描述

參考信號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。

斷路功能

斷路功能是電機控制的剎車功能。

使能斷路功能時,根據相關控制位狀態,修改輸出信號電平。

在任何情況下,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。

輸入捕獲應用

脈寬/頻率測量示意圖

在這里插入圖片描述

測量頻率

捕獲通道TIx上出現上升沿時,發生第一次捕獲。

計數器CNT的值,被鎖存到捕獲寄存器CCR中,進入捕獲中斷。

在中斷服務程序中記錄一次捕獲(可以用一個標志變量來記錄),並把捕獲寄存器中的值讀取到value1中。

當出現第二次上升沿時,發生第二次捕獲。

計數器CNT的值,再次被鎖存到捕獲寄存器CCR中,再次進入捕獲中斷。

在捕獲中斷中,把捕獲寄存器的值讀取到value3中,清除捕獲記錄標志。

利用value3和value1的差值,可以算出信號的周期(頻率)。

測量脈寬

當捕獲通道TIx上出現上升沿時,發生第一次捕獲。

計數器CNT的值,被鎖存到捕獲寄存器CCR中,進入捕獲中斷。

在中斷服務程序中記錄一次捕獲(用一個標志變量來記錄),並把捕獲寄存器中的值讀取到value1中。

然后,把捕獲邊沿改變為下降沿捕獲,目的是捕獲后面的下降沿。

當下降沿到來的時候,發生第二次捕獲。

計數器CNT的值會再次被鎖存到捕獲寄存器CCR中,再次進入捕獲中斷。

在捕獲中斷中,把捕獲寄存器的值讀取到value3中,並清除捕獲記錄標志。

然后把捕獲邊沿設置為上升沿捕獲。

在測量脈寬過程中,需要來回切換捕獲邊沿的極性。

如果測量的脈寬時間比較長,定時器就會發生溢出。

溢出的時候,會產生更新中斷,可以在中斷里面對溢出進行記錄處理。

PWM輸入模式

可以使用PWM輸入模式測量脈寬和頻率。

該模式是輸入捕獲的特例,只能使用通道1和通道2,通道3和通道4無法使用。

與上面只使用一個捕獲寄存器測量脈寬和頻率的方法相比,PWM輸入模式需占用兩個捕獲寄存器。

在這里插入圖片描述

使用PWM輸入模式時,一個輸入通道(TIx)會占用兩個捕獲通道(ICx),所以,一個定時器使用PWM輸入的時候最多只能使用兩個輸入通道(TIx)。

以輸入通道TI1工作在PWM輸入模式為例:

PWM信號由輸入通道TI1進入,因為是PWM輸入模式,信號被分為兩路。

一路是TI1FP1,另一路是TI2FP2。

其中一路是周期,另一路是占空比。

作為觸發輸入的那一路信號,對應的就是周期,另一路對應占空比。

作為觸發輸入的那一路信號,還需設置極性,上升沿還是下降沿捕獲。

設置好觸發輸入的極性,另外一路硬件就會自動配置為相反的極性捕獲,無需軟件配置。

總之,選定輸入通道,確定觸發信號,設置觸發信號的極性。

因為是PWM輸入,另一路信號由硬件配置,無需軟件配置。

當使用PWM輸入模式時,必須將從模式控制器配置為復位模式(配置寄存器 SMCR 的位 SMS[2:0]來實現),當啟動觸發信號,開始進行捕獲時,把計數器CNT復位清零。

PWM輸入模式時序圖如下。

在這里插入圖片描述

PWM信號由輸入通道TI1進入,配置TI1FP1為觸發信號,上升沿捕獲。

當上升沿的時候,IC1、IC2同時捕獲,計數器CNT清零。

下降沿的時候,IC2捕獲,計數器CNT的值,被鎖存到捕獲寄存器CCR2中,到了下一個上升沿的時候,IC1捕獲,計數器CNT的值,被鎖存到捕獲寄存器CCR1中。

CCR2+1測量的是脈寬,CCR1+1測量的是周期。

CCR2和CCR1的值在計算占空比和頻率時,都必須加1。

因為計數器是從0開始計數的。

從軟件上來說,用PWM 輸入模式測量脈寬和周期更容易,代價是需要占用兩個捕獲寄存器。

輸出比較應用

輸出比較模式共有8種,由寄存器CCMRx的位OCxM[2:0]配置。

PWM輸出模式

PWM 輸出,就是對外輸出脈寬(即占空比)可調的方波信號,信號頻率由自動重裝寄 存器ARR的值決定,占空比由比較寄存器CCR的值決定。

PWM模式分為兩種,PWM1、PWM2。

在這里插入圖片描述

以PWM1模式為例。

以計數器CNT計數的不同方向,分為邊沿對齊模式、中心對齊模式。

PWM信號主要用來控制電機,一般的電機控制用的是邊沿對齊模式,FOC電機一般用中心對齊模式。

下面分析這兩種模式信號波形的區別。

PWM邊沿對齊模式

邊沿對齊模式PWM1波形如下(ARR=8)

在這里插入圖片描述

遞增計數模式下,計數器從0計數到自動重裝載值(TIMx_ARR寄存器的內容),然后重新從0開始計數,生成計數器上溢事件。

邊沿對齊模式下,計數器CNT只工作在一種模式,遞增或者遞減模式。

這里以CNT工作在遞增模式為例,上圖,ARR=8,CCR=4,CNT從0開始計數.

當CNT<CCR,OCxREF為有效的高電平,同時,比較中斷寄存器CCxIF置位。

CCR<=CNT<=ARR,OCxREF為無效的低電平。CNT又從0開始計數,並生成計數器上溢事件,循環往復。

PWM中心對齊模式

中心對齊模式PWM1波形如下(ARR=8)。
在這里插入圖片描述

中心對齊模式,計數器CNT工作在遞增/遞減模式下。

開始時,計數器CNT從0開始,計數到自動重載值減1(ARR-1),生成計數器上溢事件;

然后從自動重載值開始,向下計數到1,生成計數器下溢事件。

然后從0開始重新計數。

上圖,ARR=8,CCR=4。

第一階段,計數器CNT工作在遞增模式下,從0開始計數。

當CNT<CCR的值時,OCxREF為有效的高電平。

CCR<=CNT<ARR,OCxREF為無效的低電平。

第二階段,計數器CNT工作在遞減模式,從ARR的值開始遞減。

CNT>CCR時,OCxREF為無效的低電平。

CCR=>CNT>=1時,OCxREF為有效的高電平。

把波形分為兩個階段,第一個階段1,2是計數器CNT工作在遞增模式的波形。

第二個階段3,4是計數器CNT工作在遞減模式的波形。

中心對齊模式下的波形特征:

1,3階段的時間相等,2,4階段的時間相等。

中心對齊模式又分為中心對齊模式1/2/3。

由寄存器CR1位CMS[1:0]配置。

區別在於中斷標志位CCxIF置1的條件。

模式1在CNT遞減計數時置1,模式2在CNT遞增計數時置1,模式3在CNT遞增和遞減計數時都置1。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM