閱讀本文可以詳細瞭解 AVR® 微控制器 (MCU) 上不同的計時器周邊,以及如何為您的應用選擇最佳的選項。
探索微控制器計時器的多樣性
計時器是微控制器中常見的周邊,每個計時器都有自己的優點和缺點。有些計時器被設計用作波形產生的一部分,有些則非常適合脈衝計數,而選擇何種計時器取決於在各種情況下的需求和可用的資源。
計時器/計數器A 型 (TCA)
TCA 是一款針對產生脈寬調變 (PWM) 最佳化的計時器。它可以在 16 位元模式下運行,以獲得高解析度輸出,也可以在 2x 8 位元模式下運行,其中計時器的任何一半皆可獨立運行。 計數器則持續運作直到計數至 TOP 值。在這種情況下,計數器將重置為BOTTOM值 (零),而雙斜率模式除外。在雙斜率模式下,計數器不會重置為零,而是向下計數至零來重置週期。 如下圖 1 所示。
為了產生 PWM,有比較通道檢查計數器是否符合或超過設定值。如果條件符合,相關的輸出就會變高。該計時器還支援雙緩衝,其中寫入計數器的值將被保留,直到計時器觸發更新,但會因操作模式而異。借助事件系統 (EVSYS),可以實現更進階的控制。例如,事件系統可用於閘控輸入、對事件邊緣進行計數、控制計數方向 (向上或向下) 以及在各種條件下重新啟動計時器。
計時器/計數器B型 (TCB)
TCB 是一款針對計時 (Timing) 和擷取 (Capture) 進行最佳化的 16 位元計時器。 TCB 可以在週期中斷模式下運行,中斷在固定間隔發生。逾時檢查模式類似,只是計時器可以透過 EVSYS 輸入重置。 TCB 也可以作為單次計時器運作。對於較長時間段,RTC/PIT 可能是比 TCB 更好的選擇。
擷取模式是指計時器“擷取”計時器內計數的能力。可以做很簡單的運用,例如自由運行的計時器上發生輸入時,擷取兩個上升沿之間的時間長度 (頻率測量) 或脈衝長度 (脈衝寬度測量)。此外,兩個 TCB 可以一起使用來創建真正的 32 位元計數器,以實現高精度測量。
TCB 也可用作 8 位元 PWM 產生器,如 TCA 中的單斜率模式。
計時器/計數器D型 (TCD)
TCD 是一款 12 位元計時器,經過最佳化,可產生複雜的 PWM 波形,例如半橋和全橋輸出。 TCD內部有兩個比較器:CMPA和CMPB。每個比較器都有一個 SET 值和一個 CLR 值。當計數達到 SET 時,輸出處於作用中狀態。然後,當達到 CLR 時,輸出將被停止。
TCD 支援四種操作模式:一斜坡、二斜坡、四斜坡和雙斜坡。這些名稱代表計數器經歷的週期數。四斜坡模式經歷四個週期,依序重置 CMPASET、CMPACLR、CMPBSET 和 CMPBCLR。兩個斜坡模式經歷兩個週期,依序在 CMPACLR 和 CMPBCLR 上重置。一斜坡模式僅在 CMPBCLR 上重置。最後,雙斜率模式向上計數到 CMPBCLR,然後向下計數到零。為了便於觀察目的,下圖的每個斜坡末端都位於相同的位置;但是,當值不相等時,它們會有所不同。此外,未顯示的值(例如:單一斜坡模式下的 CMPASET)仍然有效,但在此期間不發揮作用。
透過事件系統,TCD 還支援輸入遮蔽、數位濾波和多種故障模式用於清除輸出和/或暫停計數。 TCD 也可用於輸入擷取。此外,TCD 可與 PLL (鎖相環) 一起使用,使 TCD 能夠以高於主時脈的頻率運作。
計時器/計數器E型 (TCE)及波形擴充 (WEX)
TCE 是一款針對計時和 PWM 生成進行最佳化的 16 位元上下計時器。 TCE 是一個可逆計時器,這意味著它可以根據方向在每個輸入上遞增或遞減。當 TCE 到達頂部時,載入的下一個值取決於該點的方向。如果它上升,那麼它會滾動到零。相同地,如果此時方向為向下,計數器將捲動到 TOP,而方向變更為向上會使計時器開始遞增。
為了防止計時器週期中間出現時序干擾,TCE 支援雙緩衝,在比較操作發生時載入已變更的暫存器值。這允許使用者在計時器運行時進行更改。
TCE 具有多種用於產生波形的操作模式。這些模式與其他計時器的操作模式類似。例如,TCE 支援一般計時器操作,以及單斜率 PWM、雙斜率 PWM 和頻率產生。為了提高 PWM 的輸出分辨率,TCE 具有高分辨率模式,可透過使用高速時脈訊號來提高 PWM 的分辨率。為了充分利用此功能,此訊號的速度應至少比 CPU 速度快 4 倍。 TCE可以利用PLL來產生時脈訊號。
此外,TCE 還與 WEX 整合。 WEX 讓計時器產生互補輸出、插入死區時間、建立輸出樣式並處理硬體中的故障訊號。
計時器/計數器F型 (TCF)
TCF 是一款經過最佳化的 24 位元計時器,其作用類似於數控振盪器 (NCO)。 NCO 是一個數位模塊,主要由累加器、加法器和增量組成。每個時脈週期,都會將設定的增量加到累計總數中。當累加器溢位時,餘數將轉入累加器,並產生輸出。PLL 可以與 TCF 一起使用 (如果配備的話)。注意:TCF與系統周邊時鐘是非同步運行,提高了其靈活性;然而,這會導致讀取計時器計數時出現延遲。因此,TCF 更適合用於頻率生成,而不是精確計時。
在脈衝頻率模式下,累加器輸出用於設定輸出,然後在固定數量 (由使用者設定) 的時脈週期後,輸出被清除。在固定佔空比模式下,累加器輸出訊號切換輸出正反器,產生 50% 的佔空比。
即時計數器 (RTC) 和週期性中斷計時器 (PIT)
RTC 提供兩種計時功能:即時計數器 (RTC) 和週期性中斷計時器 (PIT)。兩個周邊設備共享相同的時脈源:32.768 kHz 外部晶振,或內部超低功耗 32.768 kHz 振盪器,彼此獨立運作。使用晶體振盪器時,RTC 可以修正高達 ±127 PPM 的誤差。時脈源可以透過 15 位元預分頻器按比例縮小。
RTC 可以在比較匹配和溢位時產生中斷,而PIT 可以在2 的冪次時脈週期 (例如,2/4/8/…/32768) 上產生中斷。需要注意的是,RTC 和 PIT 中斷不一定是同步的 (即同時發生)。 PIT 應該用於超低功耗應用,因為它是唯一在掉電模式下繼續發揮作用的計時器之一,而 RTC 的功耗稍高一些,但支援更長的時間週期。對於 1 Hz 刻度時鐘,RTC Timeout時間可以超過 18 小時。
看門狗計時器 (WDT)
WDT 是一個特殊的計時器,如果不定期清除,它將重置微控制器。它具有多個可選擇的Timeout週期,並透過內部 1.024 kHz 振盪器運行,該振盪器源自於內部超低功耗 32.768 kHz 振盪器。 WDT 有兩種模式:正常模式和視窗模式。在正常模式下,必須在計數匹配之前清除 WDT。然而,如果某種錯誤不斷地清除 WDT,則計時器將不會偵測到故障。為了防止這種可能性,可以使用視窗模式。
在視窗模式下,WDT 清除必須在設定的延遲之後、計時器觸發之前發生。如果清除得太早或太晚,將被視為 WDT 違規,並會觸發微控制器的重置。 WDT 暫存器受到設定變更保護 (CCP) 功能和控制暫存器鎖定的保護。這使得軟體錯誤很難無意中更改 WDT 設定。 WDT 可以在所有電源模式下運作。
選擇合適的計時器及瞭解更多信息
瞭解計時器周邊後,可以輕鬆掌握選擇最符合應用所需功能的計時器。在許多情況下,可能有多個的計時器可以執行該工作。你直接選擇最簡單的計時器——?讓具有更多功能的計時器可供將來使用。要更詳細地了解所有這些計時器的運作方式以及與其相關的暫存器可參考AVR MCU網站內數據手冊、應用筆記和技術簡介。使用特定計時器的程式碼範例可以透過搜尋 MPLAB® Discover網頁找到 ( https://mplab-discover.microchip.com)。
本文作者為:Microchip應用工程師經理 蔡文杰