Arduino定時器


每個微控制器都具有一個或多個定時器,可幫助使用者以精確的時間間隔執行任務。例如,Arduino Uno 有 3 個定時器:Timer0Timer1Timer2。其他開發板可能具有相同或不同數量的定時器,您可以從該開發板/微控制器的規格書中找到。

什麼是定時器?

定時器本質上是計數器。讓我舉一個簡單的例子。假設您想每 5 秒觸發一次任務。現在,如果您有一個可以從 0 計數到 255 的計數器,那麼如果您以某種方式調整計數速率,使其正好在 5 秒內完成計數,那麼您可以獲得 5 秒的精確間隔。現在,您可以透過兩種方式做到這一點:

  • 您可以調整計數速度(每 19 毫秒計數一次,或 51.2 Hz 的計數頻率將使您獲得 5 秒的間隔)。
  • 或者,您可以調整停止點。因此,您可以讓定時器從 0 計數到 100,或從 155 計數到 255,而不是從 0 計數到 255,然後所需的頻率將為 20 Hz(這比 51.2 更“好看”)。

但是,所有這些設定都需要對 Arduino 的內部暫存器進行一些更改。幸運的是,已經構建了可以自行處理所有這些設定的庫。我們只需要定義我們希望定時器執行的時間段即可。一個流行的例子是 **TimerOne** 庫:https://github.com/PaulStoffregen/TimerOne

我們在另一篇關於 Arduino 中定時器中斷的文章中介紹了 **TimerOne** 庫的使用。

當您有 delay 函式時,為什麼要使用定時器?

您現在可能會有這個問題。如果您希望每 1 秒執行某個任務,那麼只需新增 1 秒的延遲並在迴圈中執行該任務即可。問題在於,這並沒有考慮執行任務所需的時間。

假設您正在執行的任務需要 100 毫秒的執行時間。因此,兩次連續任務例項之間將會有(100 毫秒執行時間 + 1 秒延遲 = 1.1 秒)的間隔。這會擾亂頻率。定時器在後臺繼續執行。從 0 計數到 255 後,它將再次從 0 開始計數,而您的任務正在執行。這樣,您可以確保兩次任務例項之間具有正確的間隔,而不管任務的執行時間如何。

您唯一需要確保的是,在觸發中斷時呼叫的函式的執行時間不高於間隔週期。通常,中斷函式應該儘快返回。

更新於:2021年3月24日

2K+ 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告