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

材料准备

  • Ameba x 1

Ameba的省电模式

Ameba提供许多省电模式,最常用的是deepsleep与sleep。

  • Deepsleep

当Ameba进入DEEPSLEEP,会让Ameba处于最省电的情况,它的耗电会小于20微安(微安培),此时大部份元件都关掉了,但低解析度的计时器仍在运作并且用来唤醒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的电源,以及接上电源的接地即可。

如何量测耗电

  • 选择电表

电表的选择有很多,以下是一些常见电表种类:
- USB电流计:通常USB电流计一边是USB公的接头,另一边则是USB母的接头,它量测经过USB的耗电。它精确度通常不高,甚至需要校正,在未经过校正的情况下,量测结果可能会差1~2mA或者更多。这也反应在价格上,通常会是平易近人的价格。
5

- 手持式电表:通常包含了常见的功能,可以测量直流电/交流电的电压与电流,测量电阻。通常表上会有范围可以调测量范围,不同的测量范围的精准度也不同。它通常出厂就已经矫正过,准确度也会符合电表规格。手持式电表使用电池,方便携带。它的价格会根据电表规格而有不同,可以量到微安培等级的电表会比较贵。
6

- 桌上型电表:通常比手持式电表提供更多功能,有些会提供记忆功能,每秒钟的测量采样数较多,也可以有更高的精准度。桌上型电表使用插座,适合定点测量。因为功能较多,也反映在价格上,它的价格会通常比手持式电表贵。
7

  • 耗电的单位

一般来说,电器的耗电会以功率(单位瓦)来计算,但3C产品大多使用直流电,电压是固定值,所以我们只需测量电流就可以知道耗电。
一般市售的直流电池或行动电源,它的电量会标示成mAh。比如说,一颗10000mAh的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