只需MCU、LCD、32kHz晶振以及一個電阻器即可構成一部基本的倒計時定時器,而且只需一顆普通的扣式電池即可實現連續超過10年的工作時間,如圖1所示。例如,此類倒計時定時器可用于餐館提供服務時間保證,服務人員按下一個按鈕即可啟動倒計時定時器,微控制器開始自動倒計時,時間長短可預先設定,倒計時過程則會顯示在顯示屏上。如果服務人員在計時結束前尚未向客人提供服務,那么顯示器就會閃動顯示超時信息,提示未達到服務保證。有兩大關鍵性設計可最小化功耗,并盡可能延長電池使用壽命,一是認真選擇電池,二是充分利用MCU的低功耗模式。

我們之所以選擇CR2032紐扣式鋰電池,主要是因為它占地較小,可以支持便攜式應用,放電曲線較平,可以直接驅動LCD,無需補償,而且漏電極低,能夠實現更長的工作時間。典型的CR2032額定容量約為200mA,工作時間可持續數小時。為了實現連續工作10年的設計目標,平均系統電流消耗不得超過2.28uA,電流消耗的計算方式為電池能量值除以應用的工作壽命,如下所示:

我們選擇MCU是由于其待機電流極低,僅為0.8uA,并且還包含了晶體振蕩器、集成LCD驅動器以及中斷驅動喚醒定時器。3.5英寸數字LCD顯示屏增加了1uA的額外系統電流消耗。整個工作期間的倒計時定時器的總待機電流消耗如下:

通常情況下,MCU工作在待機模式下,時鐘晶體頻率為32kHz的定時器觸發1秒中斷,使MCU返回工作主循環(Mainloop),主循環采用可以顯著降低軟件開銷的直接BCD減法以實現軟件倒計時寄存器的遞減。我們向軟件倒計時寄存器添加十進制的99h,實際上減去的數為1。直接BCD減法不僅有效,而且還可使倒計時直接顯示在LCD上,而無需再進行耗費電流的二進制BCD減法運算。軟件接下來在LCD上顯示倒計時寄存器中的值。最后,倒計時寄存器中的值將與零相比較,以決定預編程的時間段是否已經到期,如果到期那么將顯示超時信息。主循環要求CPU與片上高速振蕩器在250uA電流消耗下工作。不過,由于我們在編寫軟件時已經將循環計數減至100以下,也就是說,在默認的1MHzCPU頻率下相當于100us,因此在這樣短的工作時間內,主循環增加的電流消耗可以忽略不計,計算方法如下:

數字倒計時定時器的總電流消耗為待機與主循環電流消耗之和:

由于平均電流消耗約達到1.8uA,這款倒計時定時器可輕易地實現電流消耗低于2.28uA的設計目標,從而能夠連續工作10年以上。既然電池壽命可達10年,那么我們在設計倒計時定時器時可以采用長效電池,從而簡化了其構造,同時也降低了單位成本。由于大量MCU功能與引腳尚未得到使用,因此我們還可用其添加額外特性。實施計數器所需的固件相當小,只在MCU的8k字節閃存上占用不到250字節。