省電力化の流れ
電力に特化したLeafony
Leafonyは省電力に特化した回路システムです。
省電力化の考え方
電子工作をする際に、回路が全体でどれくらいの電力を消費するのか、使いたい電源はそれを動かすのに十分な電力を供給できるのかといったことを考える必要が出てくるかと思います。 多くの場合、電源はUSBやACアダプタのような、数ワット程度出力可能で、かつ、長時間にわたって電力を供給できる装置が電子工作に用いられるかと思います。 この場合、使用している電源の供給能力を超えない限りは回路の電力について考えることは無いかもしれません。 一方で、回路をバッテリで動作させる場合はどうでしょうか。 設計者はいかにしてより長い時間回路を動作させることができるのかを考える必要がでてきます。 大きな電池を用いるのであれば長時間の動作は簡単かもしれません。 しかしながら、小さな腕時計のような電子機器であれば、必然的に使用する電池も小さくなります。小さな電池から取り出せる電力も小さいので、回路の消費電力のごくわずかな大小が、電池の持ち時間に大きく影響します。 Leafonyのように極めて小さなバッテリ駆動回路を開発する場合、回路をどうやって省電力に動作させるかを知っているかどうかがその回路の性能を大きく左右するのです。 この章では、Leafonyをできる限り省電力に動作させるべく、電力の考え方と省電力化のための手引きについて紹介します。
電力の計算
電力(単位:ワット)は
W=V×I
で計算できます。回路全体で消費される電力を計算したい場合は、電池から流れ出る電流を計算してあげれば、電池電圧×電源電流で回路全体の電力が求まります。 1さらに図1のように回路に接続された部品にはそれぞれ異なる電流(ここでは平均電流)が流れています。 電流はそれぞれの部品によっても、また、その動作状況によっても変化します。 抵抗のようにかけた電圧に対して流れる電流が1:1で決まる素子であれば簡単に電流を求めることができますが、 ICのような部品は、内部の回路の状態によって、ICに流れ込む電流値が変わってきます。 つまり、電流を測定するタイミングによって、その電流値は変わります。このような部品の場合はどのように電力を考えれば良いでしょうか。 それについては次に示すデジタル回路の場合と、「各部品の消費電力を知る」で説明します。
注1:電池の場合は使用状況によって電池の電圧が変化します。
ICにも様々な部品があり、大きく分けて2つ、アナログ回路が組み込まれたものとデジタル回路が組み込まれたものがあります。 ここではCPUのようなデジタル回路の場合の電力の考え方について述べていきます。 デジタル回路は一般的に、論理ゲートと呼ばれる回路によって構成されています。 この論理ゲート回路は最近では一般的にトランジスタの一種であるMOSFETという素子で作られています。 この論理ゲート回路の特徴は、「入力の値が変化したときにだけ、大きな電流が流れる」ということです。 具体的な例を挙げて考えていきましょう。下図はNOTゲートの場合の例です。NOTゲートは入力ピンに入る信号を反転させる機能があります。 例えば入力ピンが0V(入力ピンがLOW)の場合、出力ピンからは5V(出力ピンがHIGH)が出力されます。 このとき、入力ピンがLOWからHIGHに変わる瞬間を考えてみましょう。一番上の時間軸グラフは入力ピンに初め0Vがかかっており、 ある瞬間に5Vがかかります。このとき二番目のグラフに示すように、出力ピンは入力ピンの変化によってその状態が徐々に変化してゆき、 0Vとなります。このとき、NOTゲートにかかる電流は三番目のグラフに示すとおり、入力ピンの状態が変化したときだけ非常に大きな電流が流れています。 ここでは、入力ピンの状態が変化していない場合に流れている電流をリーク電流、変化しているときに流れる電流をダイナミック電流と呼ぶことにします。 一般にリーク電流はダイナミック電流と比較して非常に小さいため、ここではリーク電流を無視してダイナミック電流を計算します。
一般に、デジタル回路の消費電力は入力する信号の周波数によって決まります。下図はNOTゲートに周波数fのクロックが入力された回路図です。 出力には寄生容量と呼ばれるコンデンサが付随しています。 このコンデンサは回路の配線や、この先に接続される論理ゲートの入力ピンに発生する寄生容量などによって決まるため、ここでは具体的にどのような値があるかを知る必要はありません。 この場合のNOTゲートで消費される電力は次の式で表されます。
W=½ * CV^2 * f
ここでのWは瞬間的な電流電圧から求まるものではなく、1秒間で平均したスイッチングで発生する電力を表しています。 ここから分かることは、電力は入力するクロックの周波数に比例していて、デジタル回路の周波数が高くなれば高くなるほど電力は増大します。 CPUのような回路はクロックの周波数が高いほど計算スピードが増加しますが、一方で電力も増大してしまうということです。
各部品の消費電力を知る
ここまででデジタル回路が組み込まれたICの電力が周波数に依存しているということが分かりました。 しかし、私達は回路の中にどれくらいの論理ゲートが含まれているのか、どれくらいの寄生容量があるのかは、ブラックボックス化されたICの中身を見ない限り知るよしもありません。 では、どうやってICで消費される電力を見積もればよいのでしょうか。
実を言うと、ICの回路の中身まで私達が知る必要はありません。市販されているICの場合は必ずデータシートがあり、その資料の中に電力に関する情報が書かれていることがほとんどです。 ここでは、実際にICのデータシートの中から電力に関する記述を見つけ、回路の電力を見積もってみましょう。
Leafonyのデータシートを参考に、各リーフで使われているICチップの電力を調べます。
リーフ | チップ | 動作モード | 電力 |
---|---|---|---|
AP01 | |||
AP01 | |||
AP01 | |||
AP01 |
ここに示すように、それぞれのチップによっても、また、その動作状況によっても消費される電流が違います。 次に、これらのチップが消費した電力がどれくらい電池に影響を与えるのかを計算してみましょう。
電池持続時間
電池の容量はAh(アンペアアワー)
という単位で決まります。
Ah
は電荷の量を示していて、1Ah
は1時間ずっと1Aの電流を流すために必要な電荷の量を示します。
1 Ah = 1 A * 1 h
Ah
は単にどれくらいの間一定の電流を流せるかということを示しており、ここに電池の電圧は登場しません。
しかしながら、電池には1.5Vや3Vといった出力電圧が決まっており、電圧は電池によっても異なる場合があります。
同じ1Ah
でも1.5Vの電池と3Vの電池では動かせる電力が変わってきます。
電力を表す単位としてW(ワット)
という単位が一般的に用いられます。
1W
は1Vの電圧がかかった回路に1Aの電流が流れた時の電力を表しています。
1 W = 1 V * 1 A
さらに、1時間ずっと1Wの電力を出力できる量としてWh(ワットアワー
という単位があります。
1 Wh = 1 W * 1 h
Wh
を用いれば一定時間に出力できる電力量を比較することができるため、電圧が異なる電池同士でもエネルギーの比較がしやすくなります。 1
さて、次に実際に電池の容量がどれくらいあるのかを見ていきましょう。 電池の大きさによっても容量は異なります。 例えば、代表的な電池は下記のような容量があります。
- コイン電池(CR2032):3.0V 220mAh (660mWh)
- 単三電池(ニッケル水素):1.5V 2,000mAh (3,000mWh)
- リチウムイオン電池:3.7V 3,000mAh以上 (11,100mWh)
Leafonyで使われるコイン電池(CR2032)は、およそ単三電池の5分の1程度の電力量であることがわかります。
また、Wh
の定義より、3.3Vの電源電圧で100mAの電流で動作する回路を動かした場合、コイン電池は
660 mWh / (3.3 V * 100 mA) = 2 h
単三電池は
3,000 mWh / (3.3 V * 100 mA) ≒ 9 h
動作することがわかります。
Leafonyの動作電圧とリーフごとの電流はデータシートからおおよそ計算ができるため、電池でどれくらいの時間連続動作が可能なのかを見積もることができます。
電流が変化する回路の場合
では、回路の消費電流が次のような場合はどうでしょうか?
1時間のうち1分間だけ回路が動き、そのとき100mAで動作する。
残りの59分間は回路がスリープモードに入り、そのとき回路には1mA流れている。
この場合、この回路が1時間にどれだけの電荷を必要とするのかを計算すればよいので、
3.3 V * 100 mA * (1 min / 60 min) + 3.3 V * 1 mA * (59 min / 60 min) = 8.745 mWh
が、1時間あたりに消費する電荷量となります。
したがって、コイン電池(CR2032)を使う場合は、
660 mWh ÷ 8.745 mWh = 75.5 h
となり、83時間 = 3.45日ほど動作する計算になります。
省電力化のアイデア
ここでは、これまでにLeafonyのサンプルデザインで使ってきた省電力化のためのアイデアをご紹介します。
動作周波数を可能な限り下げる
この方法はサンプルスケッチ「STM32 BLE Logger Beacon」で使用しています。
「電力の計算」の章で紹介したように、デジタル回路の電力は周波数に比例します。Leafonyの場合、最も大きなデジタル回路はCPUです。
STM32リーフの場合、その動作周波数は標準で80MHzに設定されています。Leafonyでは、CPUの処理性能を犠牲にしつつも電力を最小限に抑えるべく、
動作周波数を80MHz
、16MHz
から選択できるようにしています。
動作周波数の選択方法については簡単です。Arduino IDEを開き、ツール → Board part number→ Leafony STM32 MCU
を選択し、
利用したい周波数を選択すれば設定完了です。
では、どうやって動作周波数を決めればよいでしょうか。
一つは動作の内容によって大まかに決める方法があります。
- 高速な計算が必要な場合
- 省電力に特化したい場合
二つ目は高速な周波数で設計し動作確認を行ったスケッチを、一つずつ動作周波数を下げてテストしてみる方法があります。
不要なコアはスリープまたは電源を落とす
この方法はサンプルスケッチ「STM32 BLE Logger Beacon」で使用しています。
回路にはたくさんの部品が載っており、それらの部品一つ一つがすべて電力を消費します。これらの部品の中には、回路の動作中に一時的に使用しなくても良い部品も含まれているかもしれません。
具体的な例を見て考えていきましょう。たとえば、4-Sensorsリーフを用いて4種類のセンサを読み取り、それをBLEリーフで送信するシステムがあるとします。 このシステムでは、まず4-Sensorsリーフからデータを読み出し、読みだしたデータをBLEリーフに転送してデータを送信します。 BLEリーフでデータを送信している時間は4-SensorsリーフのセンサICは使われておらず無駄に電力を消費してしまいます。
ここで消費されるわずかな電力(しかしながらコイン電池を使う場合には非常に大きな影響力がある)を抑えるため、4-Sensorsリーフで使用しているセンサICにはすべてSleepモードが存在します。 センサ読み取り後すぐにSleepモードに移行させることによって、その電力を大幅に抑えることができ、バッテリでの長時間動作に繋がります。
さらに発展的な例を考えてみましょう。STM32リーフを使用する場合、STM32チップの内部も複数の回路で構成されていて、これらを個々にスリープモードにして電力を抑えることができます。
割り込みでスリープから復帰させる
この方法はサンプルスケッチ「STM32 BLE Logger Beacon」で使用しています。
外部からのイベントが発生したときにだけ回路を動作させたい場合は、CPUの割り込み機能を使うと非常に省電力なシステムを作ることができます。
電力の測定
-
電池は使用量によって電圧が変わってくる場合があるため、精確な電力量を計算することはより複雑になります。 ↩︎