Ameba Arduino: [RTL8195] Power Management – 使用Ameba的省電模式

材料準備

  • Ameba x 1

Ameba的省電模式

Ameba提供許多省電模式,最常用的是deepsleep與sleep。

  • Deepsleep

當Ameba進入deepsleep,會讓Ameba處於最省電的情況, 它的耗電會小於20 uA (微安培),此時大部份元件都關掉了,但低解析度的timer仍在運作並且用來喚醒Ameba。這種模式適合定時運作的情境,像是每小時起來量測溫濕度,送出資料,再回到deepsleep。

  • Sleep

這個模式是Ameba可以維持Wifi連線的省電模式,它的耗電會因為wifi資料量與無線環境的乾淨程度而有所不同,但是瞬間最低電流會在2.5 mA (毫安培),與wifi起來運作之後的電流平均之後,仍然是相當省電的模式。這種應用適合需要遠端操控Ameba的情境,像是使用手機透過網路通知Ameba馬上量一次溫濕度,再回傳結果。

Ameba的供電方式

在Ameba的開發板上, 我們都是使用下圖左上方的USB供電,這裡的USB供電會提供整塊開發板的電源,包括一個DAP的控制元件,LED指示燈,周邊的電容與電阻,以及經過電壓轉換之後,提供3.3V工作電壓給Ameba。
1如果我們單獨供應3.3V的電源給Ameba,而不是使用USB供電給整塊板子,Ameba還是可以運作的。板子上其它元件讓使用者便於開發,當開發完成之後,就可以只供電給Ameba。

如何單獨供電給Ameba

單獨供電給Ameba需要對R43這個電阻做處理,不想更動硬體或不需要體驗到非常省電的可以跳過這一章。
板子上R43的地方是個電阻,電阻左邊是經過降壓模組的3.3V電源, 這個3.3V電源只單獨供應給電阻右邊的Ameba Module。
2我們需要解焊R43這個電阻,它會露出左右各一個金屬連接點,我們再將左右分別焊上杜邦線即可。
解焊的方式,需要將R43的左邊與右邊同時受熱,才有辦法將R43這個電阻取下。比較浪費資源但快速的方式是將焊錫塗滿R43,讓焊錫覆蓋到左邊與右邊,這樣就可以將R43取下。
3取下之後,會看到兩個接點。為了之後使用上方便, 我們將左邊與右邊都焊上杜邦線。焊完之後將兩條線做固定,可以黏膠帶、使用熱融膠、或是像下圖卡住固定。
4

如圖中,這樣我們一樣可以使用USB供電。當我們想單獨對Ameba供電時,將紅線與黑線分開,由黑線供應3.3V的電源,以及接上電源的GND即可。

如何量測耗電

  • 選擇電錶

電錶的選擇有很多,底下是一些常見電錶種類:
- USB電流計:通常USB電流計一邊是USB公的接頭,另一邊則是USB母的接頭,它量測經過USB的耗電。它精確度通常不高,甚至需要校正,在未經過校正的情況下,量測結果可能會差1~2mA或者更多。這也反應在價格上,通常會是平易近人的價格。
5

- 手持式電錶:通常包含了常見的功能,可以測量直流電/交流電的電壓與電流,測量電阻。通常錶上會有Range可以調測量範圍,不同的測量範圍的精準度也不同。它通常出廠就已經校正過,準確度也會符合電錶規格。手持式電錶使用電池,方便攜帶。它的價格會根據電錶規格而有不同,可以量到微安培等級的電錶會比較貴。
6

- 桌上型電錶:通常比手持式電錶提供更多功能,有些會提供記憶功能,每秒鐘的測量採樣數較多,也可以有更高的精準度。桌上型電錶使用插座,適合定點測量。因為功能較多,也反映在價格上,它的價格會通常比手持式電錶貴。
7

  • 耗電的單位

一般來說,電器的耗電會以功率(單位Watt)來計算,但3C產品大多使用直流電,電壓是固定值,所以我們只需測量電流就可以知道耗電。
一般市售的直流電池或行動電源,它的電量會標示成mAh。比如說,一顆10000 mAh的5V行動電源,如果電器消耗的電流是20mA,那麼電器可以使用 10000 mAh / 20 mA = 500 h (小時)。

  • 如何接線與量耗電

如果使用USB電流計,直接接上即可:
8

但使用USB電流計只能量到整塊板子的耗電,並且精準度有限。
如果要使用手池式電錶或桌上型電錶量測整塊板子的耗電,則需要對MicroUSB線材做處理。首先需要將MicroUSB的外層塑膠絕緣撥開,裡面的設計各家不同,但通常都會有四條細線,其中包括紅線與黑線:
9

紅線是5V的線,黑線則是GND。因為測量電流需要讓電流經過測量儀器,這邊我們量前端電流,所以將紅線斷開,剝線之後,處理一下讓兩端可以接線。圖中是焊上排針,讓杜邦線可以插上去。
於是要測量板子耗電,可以這樣接線:
10

但最終我們想要更省電的Ameba Module,所以要測量Ameba Module的耗電,可以接在R43的地方:
11

量完耗電之後,之後如果要單獨供電給Ameba Module,就可以這樣接:
12

範例: 測量未省電的Ameba

這邊我們使用DHT溫濕度計的範例
打開 “File” -> “Examples” -> “DHTTester”
DHT的耗電很低,但為了避免DHT的耗電有影響,我們將範例改成一分鐘量一次

void loop() {
  // Wait a few seconds between measurements.
  delay(60000);
}

DHT的接線請參考之前的範例,量測結果:
- 含板子的耗電:平均61 mA
- 只有Ameba Module的耗電:平均29mA
可以看到板子的耗電大約是61mA - 29 mA = 32 mA。

範例: 測量省電的Ameba

如果我們在兩次量測的中間讓Ameba進入deepsleep,那麼就可以讓Ameba省電。
打開範例 “File” -> “Examples” -> “AmebaPowerSave” -> “DeepSleepWithDHT”
這個範例與前一個範例 DHTTester是差不多的,差別只在 loop() 裡面的 delay(60000) 改成 PowerManagement.deeplseep(60000),並且擺在loop()的最後面。
當程式執行到PowerManagement.deeplseep()之後,Ameba就會進入deepsleep,經過60000ms = 60s之後,醒來會從頭開始執行,彷彿經過重開機一樣。所以我們要將這行擺在要執行的工作之後。
測量結果:
- 含板子的耗電:平均32 mA
- 只有Ameba Module的耗電:平均0.27mA
底下是比較的表格
17

省電之後可以使用多久

我們拿前面的範例比較其中兩種,一種是原本未省電並且供電給整塊板子的耗電 (61mA),另一種是省電的Ameba並且只供電給Ameba Module (0.27 mA)。
一般市售的3號電池(AA),如果它的電壓剛好是1.5V,並且容量是2850 mAh,使用兩顆3號電池的話,容量是5700 mAh。
轉換成5V的電源,在不考慮轉換造成的能量損耗的情況下,2顆3號電池的容量會是5700 mAh * (1.5 / 5) = 1710 mAh。那麼未省電並且供電給整塊板子可以使用的時間是 1710 mAh / 61 mA = 28 h
轉換成3.3V的電源,一樣不考慮轉換造成的能量損耗的情況下,2顆3號電池的容量會是 2590 mAh。省電並且只供電給Ameba Module可以使用的時間是 2590 mAh / 0.27 mAh = 9592 h = 1.09 years
底下是整理過的表格 (實驗所使用的電錶為Keysight 34465A)
18
可以看到原本只能使用一天多的2顆AA電池,變成可以使用1年。當然實際情況裡,不會用到那麼久,它會因為升壓轉換造成能量損失,也會因為電池電壓隨時間而降低造成無法使用到全部的容量,但可以看到的是,省電與不省電的耗電已經不是同個等級。

進入deepsleep之後要如何上傳程式碼

因為Ameba進入deepsleep之後,就無法上傳程式。在deepsleep的API裡面我們將D18這根腳當作避免Ameba進入deepsleep的pin腳。只要將D18接GND,並且重開Ameba即可。
15但也要注意,在正常使用裡,也要注意D18是否被接到GND而無法進入deepsleep