eTMR外設(shè)簡介
YTM32微控制器上集成的eTMR模塊,是一個定時器外設(shè),下轄多至8個通道,除了可以進(jìn)行基本的周期計數(shù)外,還可以實現(xiàn)硬件輸出比較(PWM)、輸入捕獲的功能,有一些特別的eTMR示例,還支持正交編碼器的功能。
YTM32微控制器上集成了定時器外設(shè)模塊還有TMR、pTMR、LPTMR、RTC等,其中eTMR大多用于產(chǎn)生PWM信號,或者通過輸入捕捉測量方波脈沖信號的寬度。大多用在電機(jī)相關(guān)的應(yīng)用中。
每款芯片集成eTMR實例的數(shù)量不同,以YTM32B1ME05為例,總共6個eTMR,并且每個eTMR實例的部分功能也做了裁剪。如圖x所示。
圖x YTM32B1ME05上集成的6個eTMR外設(shè)
eTMR工作機(jī)制
系統(tǒng)框圖
微控制器定時器外設(shè)模塊的核心,是一個計數(shù)器。所謂通道,實際上是可以匹配計數(shù)器某個計數(shù)值的事件,用戶可以配置在特定的情況下產(chǎn)生事件(例如,對外輸出電平,對內(nèi)產(chǎn)生觸發(fā)信號等)對應(yīng)輸出比較
的功能;也可以配置被外部的同步信號觸發(fā),將發(fā)生事件的時刻快照到通道的數(shù)值寄存器中,對應(yīng)輸入捕獲
的功能。因此,帶有多通道的定時器外設(shè)大多設(shè)計得相似,可有系統(tǒng)框圖,如圖x所示。
圖x 常規(guī)帶有多通道的定時器外設(shè)系統(tǒng)運(yùn)行框圖
引腳與信號
eTMR外設(shè)對外有一些信號綁定到芯片的引腳上。如表x所示。
計數(shù)器與時鐘源
定時器外設(shè)引擎的基本核心是一個可以由外部時鐘源驅(qū)動計數(shù)的定時器。
eTMR外設(shè)涉及到兩個時鐘源:驅(qū)動訪問寄存器的外設(shè)總線時鐘,和驅(qū)動定時器計數(shù)的功能時鐘。有一些型號的芯片,可能會設(shè)計可以接入到eTMR的功能時鐘的不同時鐘源。例如,可以直接將PLL倍頻后的高速時鐘直接送入定時器外設(shè),以獲取更高的控制精度,也可以將低功耗模式下能夠繼續(xù)存活的低速時鐘源接入定時器的時鐘源,從而可以芯片的低功耗模式下繼續(xù)自行工作。但在本例的YTM32B1ME05微控制器上,是將SCU模塊中產(chǎn)生的FAST_BUS_CLK
固定接入eTMR的功能時鐘源。如圖x所示。這在IPC模塊的章節(jié)中的表Table 13.1 IP Clock Control Table
的備注里,也有相關(guān)的描述。
eTMR module clock source is FAST_BUS_CLK default, also can use TCLK through configuring in the eTMR register, and TCLK frequency must be less than the half of FAST_BUS_CLK.
圖x FAST_BUS_CLK時鐘源的生成樹
在eTMR外設(shè)模塊內(nèi)部,還可以通過配置寄存器eTMR_CTRL[CLKSRC]
,選擇使用計數(shù)的功能時鐘源,來自IPC
模塊的FAST_BUS_CLK
,或是從eTMR_TCLK_IN0
引腳接入的外部時鐘源。而在CIM
外設(shè)中,可以通過配置寄存器CIM_ETMROPT0[ETMRx_EXTCLK_SEL]
,選擇eTMR_TCLK_IN0
/eTMR_TCLK_IN1
/eTMR_TCLK_IN2
其中之一生效。
eTMR的計數(shù)時鐘信號CLK_src
進(jìn)入eTMR外設(shè)后,還需要經(jīng)過一個7位的分頻器,才會送入eTMR的計數(shù)器驅(qū)動計數(shù)CLK_cnt
。這個分頻器的分頻因子,是在寄存器eTMR_CTRL[CLKPRS]
中設(shè)定的。有計數(shù)器計數(shù)時鐘頻率的計算公式如下:
經(jīng)過分頻的時鐘信號送入計數(shù)器,驅(qū)動計數(shù)。大多數(shù)eTMR的內(nèi)部計數(shù)器是16位的(eTMR3是32位),一旦啟動定時器(軟件設(shè)置寄存器eTMR_CTRL[EN]=1
)并等到Load事件(標(biāo)志位eTMR_SYNC[LDOK]=1
),則計數(shù)器將會從寄存器eTMR_INIT
載入初值到計數(shù)器寄存器eTMR_CNT
中(eTMR_SYNC[INITCNT]=1
)或是直接向eTMR_CNT
寄存器中寫初值,開始遞增計數(shù)。軟件可以從計數(shù)器寄存器eTMR_CNT
中實時讀到當(dāng)前計數(shù)器的值。當(dāng)計數(shù)值達(dá)到寄存器eTMR_MOD
中設(shè)定的值時,會觸發(fā)Overflow溢出事件(可產(chǎn)生中斷,也可產(chǎn)生觸發(fā)信號),起eTMR_STS[TOF]
標(biāo)志位,然后定時器計數(shù)器直接回返至寄存器eTMR_INIT
的值。如此,形成計數(shù)周期。如圖x所示。
圖x eTMR的計數(shù)器溢出事件
在一些應(yīng)用場景中(例如電機(jī)控制),需要多個eTMR配合,使用相同頻率的時鐘源,并且使用相同相位的時鐘信號。此時,就需要多個eTMR外設(shè)實例同步啟動,為此,eTMR設(shè)計了GTB功能(Global Time Base)。所有設(shè)定了寄存器eTMR_CTRL[GLOBEN]=1
的eTMR實例將會并如GTB的集合,其中設(shè)定eTMR_SYNC[GLOB]=1
的eTMR實例將作為主機(jī),其余eTMR實例為從機(jī),由主機(jī)eTMR控制GTB集合中所有eTMR的啟動。
eTMR外設(shè)可以配置成輸出比較模式、輸入捕獲模式、專用PWM模式和編碼器模式:
- 當(dāng)為編碼器模式時,整個eTMR不能使用其他模式的功能。
- 單個通道只能配置成輸出比較模式、輸入捕獲模式或?qū)S肞WM模式中的一種,但多個不同模式的通道可以在同一個eTMR中共存。
輸出比較模式
輸出比較功能多用于產(chǎn)生簡單的PWM信號。
設(shè)置通道控制寄存器eTMR_CHn_CTRL[CHMODE]=1
,該通道為輸出比較模式。輸出比較模式下,通道引腳為輸出方向,引腳電平的初值由寄存器eTMR_CHn_CTRL[CHINIT]
和eTMR_CHn_CTRL[CHPOL]
指定,在匹配事件發(fā)生后,輸出指定的電平(由eTMR_CHn_CTRL[VAL0CMP]
和eTMR_CHn_CTRL[VAL1CMP]
確定)。
不同于以往簡單的多通道定時器外設(shè)的設(shè)計,eTMR為每個通道設(shè)計了兩個匹配值寄存器eTMR_CHn_VAL0
和eTMR_CHn_VAL1
。當(dāng)設(shè)定寄存器eTMR_CHn_CTRL[CHMODE]=2
時,該通道被設(shè)定為輸出比較模式。寄存器eTMR_CHn_VAL0
和eTMR_CHn_VAL1
各自設(shè)定一個匹配值,控制該通道綁定的引腳輸出指定電平(eTMR_CHn_CTRL[VAL0CMP]
和eTMR_CHn_CTRL[VAL1CMP]
的配置值,可以指定在匹配時輸出高電平、低電平或是翻轉(zhuǎn))。以此可以產(chǎn)生PWM信號。
圖x eTMR的輸出比較機(jī)制
通過配置定時器的MOD,可以指定輸出PWM信號的周期。在PWM信號的周期內(nèi)部,通過配置通道的VAL0和VAL1,可以控制PWM信號的相位和占空比。
PWM模式
雖然輸出比較模式可以用于產(chǎn)生簡單的PWM信號,但eTMR仍然設(shè)計了專門的PWM模式(寄存器eTMR_CHn_CTRL[CHMODE]=1
)。在專門的PWM模式下,除了能夠以約定的方式配置一些寄存器產(chǎn)生邊沿對齊和中央對齊的PWM信號外,eTMR還可以將兩路輸出通道組合成一對互補(bǔ)輸出,以及捕獲硬件錯誤信號等,專門針對電機(jī)控制系統(tǒng)中對PWM信號的需求。
手冊中描述了eTMR的PWM模式工作機(jī)制的框圖,如圖x所示。
圖x eTMR的PWM模式工作機(jī)制
實際上,在專門的PWM模式下,如手冊上的詳細(xì)描述,無論是產(chǎn)生中央對齊、邊沿對齊還是非對稱對齊(有相位差的邊沿對齊)的PWM信號波形,對每個通道的INIT、MOD、VAL0、VAL1寄存器的使用方式,同在輸出比較模式下產(chǎn)生PWM信號的用法并無二致。專門PWM模式較于使用輸出比較模式產(chǎn)生PWM信號增加的主要功能,是能夠?qū)蓚€通道配對形成一個輸出通道對(Channel Pair),而有一些功能,需要在啟用通道對之后,才能解鎖,例如產(chǎn)生互補(bǔ)輸出PWM信號。
通道配對
在有8個通道的eTMR模塊中,偶數(shù)編號的通道同+1后的奇數(shù)通道可以配對,例如,0和1號通道配對,2和3號通道配對等。當(dāng)啟用任何需要通道配對完成的功能時(配置寄存器eTMR_CTRL
寄存器中的COMPLxx
或DBSWxx
字段),對應(yīng)通道即配對成功。如圖x所示。
圖x eTMR_CTRL寄存器中的字段
當(dāng)通道配對成功后,通常使用偶數(shù)編號的通道的配置,控制通道對在啟用模式下的行為,奇數(shù)編號通道的配置不再生效。
通道對的互補(bǔ)輸出(Complementary Mode)
當(dāng)設(shè)置eTMR_CTRL[COMPLxx]=1
時,將對應(yīng)通道配對,并啟用互補(bǔ)輸出模式。此時,奇數(shù)編號的通道的占空比設(shè)置都不起作用,奇數(shù)編號通道輸出的信號完全與通道對的偶數(shù)號通道的輸出電平相反。如圖x所示。
圖x eTMR的PWM互補(bǔ)輸出模式
從圖中可以看到,PWM1的信號并沒有受到CH1_VAL0和CH1_VAL1的控制,而是同PWM0相對。
雙緩沖輸出PWM(Double Switch)
當(dāng)設(shè)置eTMR_CTRL[DBSWxx]=1
時,將對應(yīng)通道配對,并啟用雙緩沖模式。當(dāng)啟用雙緩沖模式后,偶數(shù)通道和奇數(shù)通道產(chǎn)生的PWM信號相互亦或XOR,通過偶數(shù)通道的引腳輸出亦或之后的信號,如圖x所示。
圖x PWM模式下的雙緩沖模式
雙緩沖模式通常同互補(bǔ)輸出模式一起使用,此時偶數(shù)通道引腳輸出的是兩個通道亦或之后的信號,奇數(shù)通道輸出的時取反的信號。這是基于FOC算法,實現(xiàn)電機(jī)應(yīng)用中的開窗操作,方便ADC采樣的一個小功能。
錯誤檢測機(jī)制(Fault Detection)
錯誤檢測機(jī)制指的是,若外部的硬件電路檢測到某種不安全的狀態(tài)(例如電機(jī)突然停轉(zhuǎn),電機(jī)內(nèi)部的電流采樣過大,需要關(guān)斷PWM控制的橋臂),就會立刻將PWM輸出端口關(guān)斷,或者將端口輸出的切換至一種預(yù)設(shè)的安全的狀態(tài)。這個錯誤檢測的事件,對于eTMR模塊來說,就是一個觸發(fā)信號。這個信號可以來自于TMU(Trigger Multiplexer Module),也可以來自于錯誤檢測引腳(eTMR_FLTn)。
eTMR對這個錯誤檢測的的觸發(fā)信號設(shè)計了一系列濾波和事件捕獲機(jī)制(既然要突然關(guān)斷eTMR的所有輸出信號,當(dāng)然是要慎之又慎),如圖x所示。
圖x eTMR的錯誤檢測信號鏈
圖x中展示的關(guān)于錯誤檢測信號的功能,均可在寄存器eTMR_FAULT
中設(shè)定。如圖x所示。
圖x eTMR_FAULT寄存器
輸入捕獲模式
設(shè)置通道控制寄存器eTMR_CHn_CTRL[CHMODE]=3
,該通道為輸入捕獲模式。輸入捕獲模式下,通道的引腳自動切換為輸入方向,用以捕獲觸發(fā)信號(由寄存器CH_CTRL[CAPEDGE]
設(shè)置),在觸發(fā)到來之時,將eTMR中計數(shù)器的值快照到通道的eTMR_CH_CVAL
寄存器中,同時通道的標(biāo)志位eTMR_STS[CHxF]
也將置位。
輸入捕捉通常用于記錄某些關(guān)鍵事件發(fā)生的時刻,例如用來測量方波信號的頻率或者脈寬等。
正交編碼器功能
部分eTMR的實例被設(shè)計支持編碼器模式。在有支持編碼器模式的eTMR中(例如YTM32B1ME05的eTMR1),設(shè)置寄存器eTMR_QDCTRL[QDEN]=1
,即可將eTMR整個變成編碼器,其余通道引腳和錯誤檢測引腳的eTMR功能都被停用,使用專用的eTMR_QD_PHA
和eTMR_QD_PHB
引腳捕獲來自編碼器的脈沖信號流。
正交編碼器的兩個信號,是前后相位相差90度的同頻方波信號,并且可通過相差的前后判斷編碼器的旋轉(zhuǎn)方向。
圖x展示了eTMR編碼器模塊的工作機(jī)制。將旋轉(zhuǎn)編碼器的兩路輸出信號輸入到編碼器模塊的引腳后,eTMR模塊內(nèi)部對旋轉(zhuǎn)編碼器的信號先進(jìn)行采樣(同步,)、消抖(濾波,eTMR_QDCTRL[QDFCNT]
和eTMR_QDCTRL[QDFPER]
)、可選配置相位(eTMR_QDCTRL[PHAPOL]
和eTMR_QDCTRL[PHBPOL]
),然后進(jìn)入編碼器信號變換模塊(主要是D觸發(fā)器),將解析出的速度信號(脈沖序列)和方向信號(電平)送入eTMR的計數(shù)器(經(jīng)過eTMR_QDCTRL[QDCLKPRS]
分頻后送入),此時,eTMR的計數(shù)器的工作狀態(tài),等同于使用外部時鐘源驅(qū)動計數(shù)。用戶可以實時讀取eTMR_CNT
的值,對應(yīng)編碼器的位置。
圖x eTMR的編碼器功能框圖
這里要注意,編碼器的方向是可以正轉(zhuǎn),也可以反轉(zhuǎn)的,這就意味著eTMR_CNT
寄存器中的值可以遞增,也可以遞減。
在eTMR_QDCTRL[QDMODE]
寄存器段中可以指定4中編碼器的工作模式:
- 00b - Phase A and phase B decoding mode. When phase B changes follow phase A, the counter increases. When phase A changes follow phase B, the counter decreases.
- 01b - Phase A and phase B decoding mode. When phase A changes follow phase B, the counter increases. When phase B changes follow phase A, the counter decreases.
- 10b - Counting and direction decoding mode. Phase B input controls direction. When phase B input is high, the counter increases with phase A pulse. When phase B input is low, the counter decreases with phase A pulse.
- 11b - Counting and direction decoding mode. Phase A input controls direction. When phase A input is high, the counter increases with phase B pulse. When phase A input is low, the counter decreases with phase B pulse
同步機(jī)制
因為計數(shù)器和總線上訪問寄存器使用兩個不同的時鐘域,又或是因為在有些應(yīng)用(例如電機(jī))場景中,需要硬件保證的同步更新一組寄存器,而不能又軟件一個一個地賦值(否則切換過程中出現(xiàn)不當(dāng)配置,電機(jī)就燒啦),eTMR為一些同計數(shù)相關(guān)的寄存器設(shè)計了緩沖寄存器(Buffered Registers),或者被稱為“影子寄存器”(Shadow Registers)。影子寄存器對用戶來說是不可見的。當(dāng)啟用影子模式后(eTMR_SYNC[REGLD] != 0
),用戶通過APB總線向擁有影子寄存器的真實寄存器中寫數(shù)時,實際由硬件控制先寫到影子寄存器中,當(dāng)預(yù)設(shè)的同步觸發(fā)信號到來之時,硬件自動將影子寄存器中的數(shù)值寫入到實際的寄存器中生效。如圖x所示。
圖x eTMR的影子載入機(jī)制
圖x中展示了,eTMR中擁有影子的寄存器包括:eTMR_INIT、eTMR_MOD、eTMR_MID、eTMR_CHn_VAL0、eTMR_CHn_VAL1、eTMR_CHn_MASK,可以觸發(fā)載入事件的觸發(fā)信號,可以來自于MOD或者M(jìn)ID匹配事件、軟件或者硬件觸發(fā),或者軟件寫eTMR_SYNC[LDOK]=1
。載入事件也可以至起標(biāo)志位eTMR_STS[RF]
。
關(guān)于影子模式相關(guān)的寄存器配置,均在寄存器eTMR_SYNC
中可查閱。例如,eTMR_SYNC[LDREQ]
指定了在啟用同步機(jī)制的情況下,連續(xù)觸發(fā)多少次同步事件,才能真的同步一次。
調(diào)制模式
eTMR的調(diào)制模式,是另一種通道對混合應(yīng)用的方式,但不同于eTMR內(nèi)部通道對信號的相互耦合,調(diào)制模式允許兩個不同eTMR模塊以不同頻率的信號相互調(diào)制(進(jìn)行與AND邏輯計算)。這種多個實例配合起來的功能,需要在SOC級上進(jìn)行配置,這也就意味著并不是集成了多了eTMR外設(shè),就一定支持調(diào)制模式。
以YTM32B1ME05為例,當(dāng)啟用調(diào)試模式時,eTMR0的8個通道(配置CIM_ETMROPT[eTMR0_CHxOUTSEL]
)可以同eTMR1的CH0調(diào)制,通過eTMR0的通道引腳輸出調(diào)制后的PWM信號。
圖x 調(diào)制模式在CIM的配置寄存器
調(diào)試模式產(chǎn)生的信號,可用來實現(xiàn)BLDC電機(jī)控制中的負(fù)載調(diào)制,對相位控制信號用占空比進(jìn)一步對信號功率打折,也可以用來實現(xiàn)某些紅外調(diào)制的控制信號。
中斷、DMA及觸發(fā)信號
作為一個典型的帶輸入輸出的多通道定時器外設(shè),eTMR的超時事件、各通道的匹配(或輸入捕獲事件)事件、錯誤檢測輸入信號,以及編碼器溢出事件都可以觸發(fā)中斷。當(dāng)對應(yīng)事件產(chǎn)生后,有標(biāo)志將會在eTMR_STS
寄存器置位,若此時寄存器eTMR_INTE
的對應(yīng)位被置1(啟用中斷),則會將觸發(fā)信號送至中斷管理器NVIC,觸發(fā)中斷。用戶通過寫eTMR_STS
寄存器以清零標(biāo)志位。
eTMR的事件標(biāo)志寄存器
這里需要注意的是,eTMR的每個通道設(shè)計了兩個匹配寄存器,這兩個寄存器會共用同一個通道標(biāo)志位,這就意味著,如果要分別處理兩個通道的中斷,前一個匹配事件的中斷處理過程要盡量短,或者用戶僅使用后一個事件的中斷(允許通道標(biāo)志位溢出,即在標(biāo)志位置位后未被清零的情況下再次發(fā)起標(biāo)志位置位的操作)。
eTMR也可以產(chǎn)生DMA觸發(fā)信號,通過配置各通道的eTMR_CHn_CTRL[DMAEN]=1
,可以啟用該通道的匹配(或輸入捕獲)事件,向DMAMUX發(fā)送DMA觸發(fā)請求。這里對應(yīng)于每個通道的兩個匹配事件,對應(yīng)也會產(chǎn)生兩次DMA觸發(fā)請求。例如,在使用DMA的觸發(fā)計數(shù)器對eTMR產(chǎn)生PWM信號的周期進(jìn)行計數(shù)時,對通道的觸發(fā)請求進(jìn)行計數(shù)(eTMR的通道溢出事件不會產(chǎn)生DMA請求),將會是PWM周期數(shù)量的2倍。
DMA觸發(fā)的優(yōu)先級高于中斷觸發(fā),二者只能有一個生效。一旦使能DMA,即使使能中斷,也不會置起中斷請求。
應(yīng)用要點(軟件)
YTMicro SDK中設(shè)計了eTMR外設(shè)的驅(qū)動程序,有源碼文件 etmr_driver.h
、etmr_common.c
、etmr_ic_driver.c
、etmr_mc_driver.c
、etmr_oc_driver.c
、etmr_pwm_driver.c
、etmr_qd_driver.c
等。同時提供了相應(yīng)的樣例工程:etmr_input_capture
、etmr_input_capture_interrupt
、etmr_output_compare
、etmr_pwm
。
總結(jié)
本文介紹了eTMR的主要功能,作為一個典型的多通道定時器外設(shè)的實現(xiàn),eTMR實現(xiàn)了輸出比較、輸入捕獲和專用PWM模式。在常規(guī)應(yīng)用中,可以使用輸出比較功能產(chǎn)生PWM,在專用PWM模式下,可以使用通道配對,實現(xiàn)需要多個引腳輸出實現(xiàn)的功能(例如互補(bǔ)輸出)。eTMR還支持死區(qū)控制,復(fù)雜的掩碼機(jī)制等,本文未作詳解,讀者可根據(jù)應(yīng)用需求再詳查手冊。
-
微控制器
+關(guān)注
關(guān)注
48文章
7555瀏覽量
151429 -
定時器
+關(guān)注
關(guān)注
23文章
3248瀏覽量
114832 -
脈沖信號
+關(guān)注
關(guān)注
6文章
399瀏覽量
36973 -
正交編碼器
+關(guān)注
關(guān)注
0文章
16瀏覽量
10620 -
PWM輸出
+關(guān)注
關(guān)注
1文章
66瀏覽量
5154
發(fā)布評論請先 登錄
相關(guān)推薦
評論