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