本文作者是milershao 不論STM8還是STM32的定時(shí)器它們的結(jié)構(gòu)大體差不多,都分為三類。高級(jí)定時(shí)器、通用定時(shí)器、基本時(shí)基時(shí)鐘。其中高級(jí)定時(shí)器與通用定時(shí)器相比,主要多了馬達(dá)控制方面的互補(bǔ)輸出通道,帶剎車功能和死區(qū)控制,有HALL接口。那基本時(shí)基時(shí)鐘就是單純的一個(gè)定時(shí)器,沒(méi)那些IC、OC通道等。這里以stm32 MCU為例,跟大家分享下有關(guān)通用或高級(jí)定時(shí)器的輸出比較應(yīng)用中如下幾個(gè)常見(jiàn)話題。
1、OCxREF與OCx關(guān)系問(wèn)題 2、OCx極性選擇問(wèn)題 3、帶互補(bǔ)輸出時(shí)的幾個(gè)概念及相關(guān)寄存器介紹 4、帶剎車功能的互補(bǔ)通道的控制位及輸出對(duì)照表的解讀
一、OCxREF與OCx關(guān)系的話題 OCxREF信號(hào)就是在選定輸出比較模式后,在某種條件下輸出模式控制器產(chǎn)生的一個(gè)中間參考信號(hào)。說(shuō)它屬于中間參考,是因?yàn)樵撔盘?hào)跟對(duì)應(yīng)的OCx通道輸出信號(hào)之間存在一個(gè)極性選擇器,即下方紅色方框部分。經(jīng)過(guò)極性選擇后的信號(hào)最終輸出還得受輸出使能電路的控制。 
上面提到輸出比較模式指如下幾種模式【以某定時(shí)器通道1為例】: 
前面提到的“某種條件”在上面的幾種模式中都提到,無(wú)須多解釋了。 其中凍結(jié)模式就是CCRx與Timx_CNT寄存器的值對(duì)輸出沒(méi)影響,此時(shí)可以一般作普通計(jì)數(shù)器來(lái)用。其它幾種模式可以劃分為強(qiáng)制輸出、比較輸出、PWM輸出三類。 要注意的是,這里的輸出比較結(jié)果只說(shuō)到OCxREF信號(hào),至于OCx端的信號(hào),還取決于極性選擇。另外,這里有個(gè)重要約定:ORxREF信號(hào)為高電平時(shí)稱為有效電平,反之為無(wú)效電平。
順帶提下,經(jīng)常有人在使用PWM輸出模式或切換模式時(shí),希望讓輸出通道OCx端的電平在某時(shí)刻或某時(shí)段臨時(shí)切換為想要的電平。一般有兩種辦法,一種是使用上面提到的強(qiáng)制輸出模式;如果是PWM輸出模式,可以通過(guò)修改CCR的值等于0或大于等于ARR來(lái)實(shí)現(xiàn)。具體怎么配置要結(jié)合你的模式選擇、極性選擇及OCx端所期望的電平。當(dāng)采用修改CCR值方式時(shí),如果希望立即生效的話,記得將相應(yīng)通道的預(yù)裝載使能功能禁用掉。
二、OCx極性選擇問(wèn)題 從上面第一幅圖可以直觀的看出OCxREF跟后面的OCx信號(hào)可能是同相或者反相關(guān)系,由寄存器TIMx_CCER 的CCxP位確定。下面是高級(jí)定時(shí)器有關(guān)極性配置的文字截圖。  當(dāng)CCxP=0時(shí),OCx輸出高電平有效,為1時(shí)OCx低電平有效。 如果單獨(dú)看這個(gè)地方,多少顯得有些突兀。對(duì)于一個(gè)電平高低本無(wú)所謂,這里硬加上個(gè)有效無(wú)效,有些讓人費(fèi)解。我們基于上面第一幅圖和關(guān)于OCxREF電平的重要約定來(lái)探討下。 當(dāng)CCxP=0時(shí),OCxREF直達(dá)OCx端。因約定OCxREF為高時(shí)算有效電平,那OCx信號(hào)的高電平也就對(duì)應(yīng)著ORxREF的有效電平。所以約定OCx端的高電平為有效電平。 而當(dāng)CCxP=1時(shí),OCxREF反相后到達(dá)OCx端。有效高電平OCxREF經(jīng)極性選擇器反相到達(dá)OCx端變?yōu)榈碗娖,此時(shí)OCx信號(hào)的低電平就對(duì)應(yīng)著OCxREF的有效電平。所以約定此時(shí)的OCx端的低電平為有效電平。 做極性選擇的實(shí)質(zhì)其實(shí)是做OCx/OCxN端有效電平的選擇。至于如何選擇有效電平,那得結(jié)合具體外部驅(qū)動(dòng)需要。當(dāng)OCx或OCxN端輸出無(wú)效電平時(shí)的狀態(tài)為無(wú)效狀態(tài)。 結(jié)合極性選擇的配置和有效電平的定義,我們可以得出兩個(gè)推論: 1、對(duì)于某OCx通道,當(dāng)OCx端的電平與其極性選擇位【0或者1】一致時(shí),該電平一定是無(wú)效電平。 2、對(duì)于某正常運(yùn)行的OCx通道,OCx端電平可看作極性選擇位【0或者1】跟OCxREF電平異或后的結(jié)果。即 OCx=OCxREF xor CCxP【這里沒(méi)考慮死區(qū)】 理解上面2個(gè)推論很重要,不然在看那張“帶剎車功能的互補(bǔ)通道的控制位及輸出對(duì)照表”的相關(guān)描述時(shí)可能就很費(fèi)解。 對(duì)于通用定時(shí)器,是沒(méi)有互補(bǔ)輸出功能的。通用定時(shí)器的標(biāo)準(zhǔn)OCx輸出通道的電平輸出狀態(tài)相對(duì)比較簡(jiǎn)單。 
當(dāng)OCx通道的輸出使能被禁止時(shí),其輸出固定為0,當(dāng)開(kāi)啟后OCx端電平由OCxREF與極性選擇器共同確定。如果是高級(jí)定時(shí)器啟用互補(bǔ)輸出通道時(shí),OCX/OCXN端的電平確認(rèn)要比通用定時(shí)器復(fù)雜,它往往跟多個(gè)控制位有關(guān)。
三、帶互補(bǔ)輸出時(shí)的幾個(gè)概念及相關(guān)寄存器介紹 在ST MCU里面只有高級(jí)定時(shí)器帶互補(bǔ)輸出。高級(jí)定時(shí)器里有幾個(gè)概念和專有的寄存器需要了解下。一般來(lái)說(shuō),定時(shí)器做互補(bǔ)輸出使用驅(qū)動(dòng)馬達(dá)設(shè)備,為安全起見(jiàn),控制電路往往配有死區(qū)控制、剎車控制。在高級(jí)定時(shí)器里有個(gè)關(guān)于剎車及死區(qū)控制的寄存器。 
其中有三個(gè)位MOE,OSSR,OSSI需要特別了解下。 MOE:當(dāng)發(fā)生剎車時(shí),該位被硬件清零。OCx和OCxN將呈無(wú)效狀態(tài)或空閑狀態(tài)或輸出禁止狀態(tài)。 
OSSR:運(yùn)行模式【run mode】下關(guān)閉狀態(tài)的輸出選擇位。 此時(shí)MOE=1。針對(duì)開(kāi)啟了互通輸出通道但其中某一通道的輸出使能被禁止的情形,比方雖然TimX_CH1和TimX_CH1N的比較輸出模式都開(kāi)啟了,而CH1的輸出使能被禁止了。該位決定OC1端運(yùn)行模式下的最后輸出狀態(tài)。 強(qiáng)調(diào):OSSR針對(duì)運(yùn)行模式下互補(bǔ)輸出通道才有效。 
這里提醒下: 對(duì)于一對(duì)互補(bǔ)通道OCx/OCxN,如果同時(shí)輸出使能并均為高電平有效極性選擇時(shí),OCx跟OCxREF是同相的,OCxN跟OCxREF是反相的。如果說(shuō)只使能其中一個(gè)通道,并做高電平有效極性選擇,不論OCX還是OCXN都跟OCXREF同相。 OSSI:空閑模式【idle mode】下關(guān)閉狀態(tài)【off state】的輸出選擇。 空閑模式是相對(duì)運(yùn)行模式而言,發(fā)生剎車事件時(shí)MOE=0。對(duì)于已經(jīng)配置為比較輸出模式而其輸出使能被禁止的通道,該位決定OCx或OCxN在空閑模式下的最后輸出狀態(tài)。 強(qiáng)調(diào):OSSI針對(duì)空閑模式下的輸出通道有效。 
***上面提到的“inactive”理解為某通道的輸出控制使能被禁用的情形。 還有兩個(gè)寄存器位OISx、OISxN需要了解下,是有關(guān)空閑狀態(tài)【MOE=0】下OCx/OCxN端的空閑電平的選擇問(wèn)題。 
四、帶剎車功能的互補(bǔ)通道的控制位及輸出對(duì)照表的解讀 STM32各系列參考手冊(cè)的定時(shí)器介紹部分都有一張表格,即帶剎車功能的互補(bǔ)通道的控制位及輸出對(duì)照表。說(shuō)實(shí)話咋看這個(gè)表真不太好懂。 為了便于介紹,我把那張表截成了兩部分,一部分是運(yùn)行模式下【MOE=1】各控制位與通道輸出情況的對(duì)應(yīng)關(guān)系表;另一部分是空閑模式下【MOE=0】各控制位與通道輸出狀態(tài)的對(duì)應(yīng)表。 表格里多處標(biāo)注Output Disabled和Off-state,這里簡(jiǎn)單說(shuō)明下。 **Output Disabled:通道輸出禁止?fàn)顟B(tài)。此時(shí)該通道不受TIMER驅(qū)動(dòng)。相應(yīng)的OCX或OCXN輸出使能禁止,輸出端的電平為0!緞e把輸出禁止?fàn)顟B(tài)跟通道的輸出使能控制混淆了】 下面兩幅圖中橢圓形紅色圓圈配置的地方,CCxE或CCxNE=0,OCx或OCxN=0,都是輸出禁止?fàn)顟B(tài)的情形。 **Off-state:通道關(guān)閉狀態(tài)。相應(yīng)通道輸出使能,但輸出無(wú)效狀態(tài)。這個(gè)無(wú)效狀態(tài)是指某互補(bǔ)通道中的一路或兩路輸出無(wú)效電平時(shí)的狀態(tài)。 先看看運(yùn)行模式下【MOE=1】的情形: 運(yùn)行模式時(shí)下,當(dāng)OSSR=0時(shí),如果某通道的輸出使能禁止,即CCxE或CCxNE=0,則該通道輸出為輸出禁止?fàn)顟B(tài)。 運(yùn)行模式時(shí)下,當(dāng)OSSR=1時(shí)。如果互補(bǔ)通道中的某一路的輸出使能禁止,即CCxE或CCxNE=0,則該通道輸出無(wú)效電平,呈關(guān)閉狀態(tài),或者說(shuō)無(wú)效輸出狀態(tài)。 **關(guān)于下面表格有三地方需提醒下: 
1、上面圖表中關(guān)閉狀態(tài)【off state】處有類似下面的描述: OCx=CCxP , OCx_EN=1 或者 OCxN=CCxNP , OCxN_EN=1; 前面講極性選擇時(shí)提過(guò),當(dāng)OCx或OCxN端的輸出電平與其極性選擇位【CCxP或CCxNP】一致時(shí),該電平一定為無(wú)效電平。這里就是表示輸出無(wú)效電平。
2、表格中有諸如 OCx = OCxREF xor CCxP的寫法,這點(diǎn)在前面也提過(guò),實(shí)際上就是OCxREF信號(hào)經(jīng)過(guò)極性選擇后在OCx端輸出的意思。
3、紅色三角形標(biāo)注的兩個(gè)地方,互補(bǔ)通道中只有1路輸出被使能,此時(shí)的OCx或OCxN通道的輸出是基于OCxREF信號(hào)配合各自的極性選擇后輸出。再看看紅色箭頭標(biāo)注的兩個(gè)地方,因?yàn)榇藭r(shí)兩個(gè)互補(bǔ)通道同時(shí)被使能,OCx通道的輸出是基于OCxREF配合自己的極性選擇,而OCxN通道的輸出則是基于OCXREF的反相信號(hào)再結(jié)合其極性選擇后輸出。
最后來(lái)看看空閑模式下即MOE=0結(jié)合不同控制配置位的OCx/OCxN的輸出情形。 
空閑模式下的OC輸出相對(duì)簡(jiǎn)單,OCx/OCxN輸出無(wú)非呈現(xiàn)2種狀態(tài),一種是輸出禁止?fàn)顟B(tài),一種是無(wú)效輸出狀態(tài),即關(guān)閉狀態(tài)。 當(dāng)MOE=0, OSSI=0時(shí), OCx與OCxN均呈輸出禁止?fàn)顟B(tài)。此時(shí)OC控制器不受TIMER驅(qū)動(dòng),相應(yīng)的OCx或OCxN輸出使能禁止,輸出端的電平為0!旧蠄D中橢圓形標(biāo)注的地方】 當(dāng)MOE=0, OSSI=1,互補(bǔ)通道中至少1路輸出使能,OCx與OCxN都呈關(guān)閉狀態(tài)。相應(yīng)的OCx或OCxN輸出無(wú)效電平或空閑電平,【電平有效性依據(jù)極性選擇CCxP/CCxNP而定,空閑電平依據(jù)OSIx/OSxN而定】但至少1路輸出無(wú)效電平。 表格下方的那句注釋,當(dāng)某通道的兩互補(bǔ)通道都沒(méi)使用時(shí),即CCxE=CCxNE=0時(shí), CCxP\CCxNP\OISx\OISxN都將被清零。這句有助于理解圖表中輸出禁止?fàn)顟B(tài)時(shí)的相關(guān)描述。 |