單脈沖輸出模式是定時器比較輸出應用中的一種特殊情況或者特殊應用,是一種特殊的PWM輸出模式。既然這么說,要想了解單脈沖模式話題,我們就有必要先對比較輸出功能,尤其是PWM輸出模式有所了解。
比較輸出【Compare Output】功能:定時器通過對預設的比較值與計數器的值做匹配比較之后,依據比較結果結合相應的輸出模式從而實現各類輸出。如PWM輸出、電平翻轉、單脈沖輸出、強制輸出等。一般來講,STM32的通用定時期和高級定時器都具有輸入捕獲、比較輸出功能,不同的定時器可能通道數量上有差異。
這里提到的比較值就是指放在CCR寄存器中的值,計數器的值當然就是CNT寄存器的值。一般來講,在計數過程中,CNT寄存器的值往往是連續動態變化并呈現周期性,其變化規律跟我們設置的計數器的計數模式有關,比如向上計數模式、向下計數模式或者中心對齊計數模式等。這里的比較結果無非三種情況:
圖[1]
①CCR = CNT ②CCR > CNT ③CCR < CNT
那輸出模式呢?基本的比較輸出模式有3種:【這里是說的基本的,有些STM32系列的定時器輸出模式已做了拓展】
1、強制輸出模式;
2、匹配輸出模式
3、PMW輸出模式
圖[2]
結合上表我們不難看出:
強制輸出模式;無視比較結果,直接根據配置指令輸出相應電平;
匹配輸出模式:只關注CCR=CNT值的時候,做相應電平的輸出;
PWM輸出模式:根據CCR是小于CNT還是CCR不小于CNT的比較結果做不同的輸出;
[各種模式輸出特性細節可以看看上面表格】
比較輸出的大致流程以及幾個術語【OCxREF 、OCx 、輸出極性】
圖[3]
上面提到的輸出信號,其中多次提到有效信號,無效信號,是指比較輸出控制器輸出的信號,我們稱之為中間參考信號,即OcxREF信號。該OCxREF源于輸出模式控制器,并硬件約定高電平為有效信號,低電平為無效信號。它經過極性選擇后,再經輸出控制電路輸出到芯片管腳Ocx端。當極性選擇位CCxP=0時,高電平作為Ocx的有效輸出信號,當CCxP=1時,低電平作為Ocx的有效輸出。 或者說,當極性選擇位CCxP=0時,Ocx輸出與OcxREF信號同相;當CCxP=1時,Ocx輸出與OcxREF信號反相;
下圖是當CCxP=0時 Ocx 與 OcxRef信號的相位情況【二者同相】
圖[4]
下圖是當CCxP=1時 Ocx 與 OcxRef信號的相位情況【二者反相】
圖[5]
也就是說,OCXref信號只是個中間參考信號,并非最終輸出信號。最終輸出端OCX的active state【有效狀態】/inactive state【無效狀態】所對應的電平取決于極性選擇控制位CCxP/CCxNP。
當然,如果是高級定時器的互補輸出,最后的輸出波形形狀除了與極性選擇有關外,輸出波形還跟插入的死區有關。即對于互補輸出時 Ocx =OCxREF + 極性 + 死區
PWM比較輸出模式實現原理及相應波形
前面已經說了,單脈沖輸出模式是一種特殊的PWM輸出模式。這里我們重點看看PWM輸出模式的實現原理及相應輸出特性。
從前面介紹中我們了解到PWM輸出模式可以分兩種,即PMW模式1與模式2,結合不同的計數模式可以實現多種輸出組合。我們不妨以PWM模式1、計數器向上計數、極性選擇高有效【CCxP=0】為例來看看比較輸出過程中輸出PWM波形的實現原理。
圖[6]
上面圖【6】由兩部分組成,上面部分是計數器周期性計數的示意圖。深紅色斜線表示計數器從0開始計數,記到ARR后重裝,再重新計數,這樣循環。下面綠色方波是依據PWM模式1基于某個CCR值經過比較輸出而得到PWM波形。
根據上面介紹,我們知道在PWM輸出模式1的前提下,當計數器的值小于CCR的值時輸出有效電平,即高電平,當計數器值大于或等于CCR的值時輸出無效電平,即低電平。由于計數器計數會發生周期性地溢出和重裝,使得計數器的值可以周期性地循環計數,當CCR的值固定的時候,CNT與CCR的值二者的比較結果也往往呈現出周期性,此時也就輸出規律性、周期性的PWM波形。
不難理解,當我們修改CCR的值,其它不動的時候,PWM輸出波形會相應變化。
圖[7]
圖【7】的波形是在圖【6】的基礎上講CCR值往上調大以后所得到的比較輸出波形。
看到這里,我們不禁會想:既然PWM輸出模式的輸出結果取決于CCR與CNT的比較結果的周期性變化,那么,當我們把CCR的值設置為0或者比ARR的值還大的時候,此時CCR與CNT的比較結果將不再變化,因為這里CNT的值不可能比0還小或比ARR還大。此時,自然就不會有變化的PWM波形輸出,而是輸出固定的電平,具體什么電平取決于CCR與CNT的比較結果與當前所選擇的PWM輸出模式。
不妨用個具體的案例來理解。比如,在PWM模式1的前提下:
當CCR=0時,由于計數器CNT的值永遠不會小于CCR,此時將始終輸出無效電平。
當CCR=ARR+n【N不小于1】時,因CNT的值總小于CCR的值,此時始終輸出有效電平。
上面主要是基于PWM輸出模式1、計數器向上計數模式來理解定時器比較輸出中的PWM輸出原理。至于PWM輸出模式1、計數器向下計數模式或者PWM輸出模式2等其它情形,我們可以結合STM32參考手冊自行分析。
結合上面的分析,我們不難看出,定時器之所以能輸出PWM波形,原因在于定時器的計數器的計數的動態連續性和周期性,具體到這里,從0開始計數到ARR,溢出重裝,再從0開始從新計數,循環往復,導致計數器與CCR的比較結果也具有周期性,從而產生周期性的PWM輸出。
根據定時器時基單元相關介紹,我們知道計數器計數發生溢出后,可以觸發更新事件。對于通用定時器,每次溢出都可以產生更新事件;對于高級定時器,每發生RCR+1次溢出就可以產生更新事件。
如果說,在PWM輸出模式下,當定時器發生溢出產生更新事件時,通過硬件機制令計數器停止計數,既然計數器被停止計數了,計數器【CNT】的值將不再變化,之后的CNT與CCR的比較結果將維持不變,自然也就沒有后續變化的的PWM波形輸出了。這時我們就可以實現單個或幾個PWM脈沖的輸出了。
基于上述原理或應用場景,便衍生出了單脈沖輸出模式。所以,我們說單脈沖輸出模式是一種特殊的PWM輸出模式。
單脈沖輸出模式的實現原理:計數器啟動后,在更新事件來臨之前的時間段內實現一定個數的脈沖輸出,當發生更新事件時計數器停止計數,導致后續不再有變化的PWM波形輸出。輸出的脈沖個數可以一個或幾個。如果是通用計數器就是1個,如果是高級定時器,脈沖個數與RCR數值和計數模式二者有關。
圖[8]
圖【8】是個單脈沖輸出實現的示意圖。定時器工作在從模式,在外部觸發信號【TI2】的作用下開啟計數器,輸出一個脈沖后發生更新事件并停止計數。
關于單脈沖輸出模式應用的提醒:
1、使用單脈沖輸出模式時,計數器的使能啟動可以通過軟件使能啟動,也可以將定時器配置在觸發從模式經過信號觸發啟動.
2、單脈沖輸出模式是PWM輸出模式的特例,利用該模式并不一定只是輸出單個脈沖。如果是通用定時器,每次使能計數器后只輸出一個PWM脈沖,如果是高級定時器,每次使能計數器后可能輸出多個PWM脈沖,具體多少除了與RCR寄存器的值有關外,還跟計數器的計數模式有關;
3、要用好定時器的單脈沖輸出模式,需了解下面三方面的知識點:
A:了解基本的PMW輸出模式的基本特性;
B:了解定時器的更新事件;
C:了解計數器的溢出與重裝;
好,下面一起來看看幾個基于單脈沖輸出模式的實例以加深理解。
下面案例都是基于高級定時器的。因為高級定時器可以使用單脈沖輸出模式輸出1到N個脈沖,如果使用通用定時器每次觸發后就只能產生1個脈沖,產生多個脈沖就不那么方便。
案例一:使用高級定時器,單脈沖輸出模式,借助RCR寄存器實現3個PWM脈沖輸出
條件:UP counting + PWM1, RCR=2; 極性:高有效[CCxP=0]
圖[9]
程序運行,使能計數器后輸出上述波形。
RCR=2,意味著發生RCR+1次溢出時產生更新事件,計數器停止計數,后續不再輸出PWM波形。從上面來看輸出基本是正確的,不過最后電平停在高電平,結尾這個地方怎么感覺不符合PWM1的輸出特性呢?
一起來看看,現在計數器是向上計數模式,它在第3個周期計到ARR時產生溢出,觸發更新事件,計數器停止計數了,那計數器的值不是應該停留在ARR嗎?如果計數器的值停在ARR,那此時CNT>CCR的值,按照PWM模式1的輸出特性,輸出應該停留在低電平,那怎么是高電平呢?
前面提到過,要用好定時器的單脈沖輸出模式,還得了解計數器溢出與重裝。
具體到這里,當計數器在第3個周期計到ARR時發生溢出,產生更新事件,計數器不再計數。但計數器溢出后重裝還是照例執行,此時計數器被重裝為0,因為計數器被停止,所以該0值保持不變。這樣的話,后續的比較結果總是CNT
好,那我們基于上面的條件,換成PWM輸出模式2看看結果。
案例二:使用高級定時器,單脈沖模式,借助RCR寄存器實現3個PWM脈沖輸出
條件:UP counting + PWM2, RCR=2; 極性高有效[CCxP=0]
圖[10]
這次跟上面的案例1只是PWM模式做了變更,使用PWM輸出模式2。仍然是輸出3個PWM脈沖,跟上面輸出波形相比,第3個脈沖最后停留的電平不一樣,這里是低電平。分析過程跟上面一樣,當計數器發生第3次溢出時,計數器依然重裝為0,此時CNT
至于其它不同的組合模式,這里就不一一分析了。我下面再放幾副圖進來,大家可以自行分析。
案例三:使用高級定時器,單脈沖模式,借助RCR寄存器實現3個PWM脈沖輸出。
條件:Down counting + PWM1,RCR=2; 極性選擇高有效 [CCxP=0]
圖[11]
案例四、使用高級定時器,單脈沖模式,借助RCR寄存器實現3個PWM脈沖輸出。
條件:Down counting + PWM2,RCR=2; 極性選擇高有效[CCxP=0]
圖[12]
案例五、使用高級定時器,單脈沖模式,借助RCR寄存器實現PWM脈沖輸出
條件:Center counting / pwm1/ RCR=6 極性選擇:高有效[CCxP=0]
圖[13]
最后小結下:
在使用定時器單脈沖輸出模式做指定個數PWM波形輸出時,我們要根據實際需求來選擇合適的pwm輸出模式、計數模式以及RCR寄存器的值。比方上面案例1與案例2的輸出波形不能說誰對誰錯,關鍵看你需要的是哪種輸出結果。另外,一種輸出結果可以有多種實現方案,比方上面案例2與案例3雖是不同的方案,但產生了相同的效果,此時我們可以根據具體的應用場景來選擇合適的方案。
好,關于定時器的單脈沖輸出模式的應用就介紹到這里,大致介紹了單脈沖輸出模式的來龍去脈以及實現原理。我們常常使用單脈沖模式是輸出指定個數的PWM脈沖,當然還有別的方式可以靈活使用,比方通過通過統計比較事件或更新事件后修改CCR等。
-
定時器
+關注
關注
23文章
3255瀏覽量
115366 -
STM
+關注
關注
1文章
557瀏覽量
42576
原文標題:STM32定時器單脈沖輸出模式話題
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
COMP2在STM32L1上觸發單脈沖模式
STM32——高級定時器、通用定時器、基本定時器的區別 精選資料推薦
STM32定時器單脈沖模式的相關資料分享
請問如何生成可重復的單脈沖波形?
如何使用MxCube設置可重觸發的單脈沖定時器呢?
有什么方法可以在一種脈沖模式下啟動定時器嗎?
STM32定時器單脈沖模式及其應用
![STM32<b class='flag-5'>定時器</b><b class='flag-5'>單脈沖模式</b>及其應用](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論