コンテンツにスキップ
ショップ

省電力化の流れ

いつものAIに相談

Gemini・その他のAI

このページの情報を添えて、仕組みや使い方、つくりたいものを相談できます。

Geminiを開く

質問文をコピーして、Geminiの入力欄に貼り付けてください。

質問文を確認

Leafonyは省電力に特化した回路システムです。

 電子工作をする際に、回路が全体でどれくらいの電力を消費するのか、使いたい電源はそれを動かすのに十分な電力を供給できるのかといったことを考える必要が出てくるかと思います。 多くの場合、電源はUSBやACアダプタのような、数ワット程度出力可能で、かつ、長時間にわたって電力を供給できる装置が電子工作に用いられるかと思います。 この場合、使用している電源の供給能力を超えない限りは回路の電力について考えることは無いかもしれません。 一方で、回路をバッテリで動作させる場合はどうでしょうか。 設計者はいかにしてより長い時間回路を動作させることができるのかを考える必要がでてきます。 大きな電池を用いるのであれば長時間の動作は簡単かもしれません。 しかしながら、小さな腕時計のような電子機器であれば、必然的に使用する電池も小さくなります。小さな電池から取り出せる電力も小さいので、回路の消費電力のごくわずかな大小が、電池の持ち時間に大きく影響します。 Leafonyのように極めて小さなバッテリ駆動回路を開発する場合、回路をどうやって省電力に動作させるかを知っているかどうかがその回路の性能を大きく左右するのです。 この章では、Leafonyをできる限り省電力に動作させるべく、電力の考え方と省電力化のための手引きについて紹介します。

 電力(単位:ワット)は

W=V×I

で計算できます。回路全体で消費される電力を計算したい場合は、電池から流れ出る電流を計算してあげれば、電池電圧×電源電流で回路全体の電力が求まります。 さらに図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ゲートで消費される電力は次の式で表されます。

P = α * C * V^2 * f

 ここでのPはスイッチングによる平均消費電力、Cは負荷容量、Vは電源電圧、fはクロック周波数、αは1クロックあたりの充電回数を表す活動率です。静的なリーク電流や短絡電流は、この簡略式には含めていません。 ここから分かることは、電力は入力するクロックの周波数に比例していて、デジタル回路の周波数が高くなれば高くなるほど電力は増大します。 CPUのような回路はクロックの周波数が高いほど計算スピードが増加しますが、一方で電力も増大してしまうということです。

 ここまででデジタル回路が組み込まれたICの電力が周波数に依存しているということが分かりました。 しかし、私達は回路の中にどれくらいの論理ゲートが含まれているのか、どれくらいの寄生容量があるのかは、ブラックボックス化されたICの中身を見ない限り知るよしもありません。 では、どうやってICで消費される電力を見積もればよいのでしょうか。

 実を言うと、ICの回路の中身まで私達が知る必要はありません。市販されているICの場合は必ずデータシートがあり、その資料の中に電力に関する情報が書かれていることがほとんどです。 ここでは、実際にICのデータシートの中から電力に関する記述を見つけ、回路の電力を見積もってみましょう。

Leafonyの仕様書と回路図から使用部品を特定し、各ICのデータシートで、使用する電圧・温度・周波数・動作モードに対応する消費電流を調べます。

リーフ主な部品比較する動作条件参照資料
AP01 AVR MCUATmega328P動作周波数、Active / Sleep、使用する周辺回路リーフの仕様・回路図
AP03 STM32 MCUSTM32L452REI616 / 80 MHz、Run / Sleep / Stop、RTCなどの周辺回路リーフの仕様・回路図
AI01 4-SensorsHTS221TR、OPT3001、LIS2DHTR測定間隔、連続測定 / 単発測定 / Power-downリーフの仕様・回路図
AC02 BLE SugarBGM11S22F256GA-V2送信出力、送信間隔、接続 / ビーコン / Sleepリーフの仕様・回路図

この表は調査対象と条件を整理したものです。リーフ全体の消費電流の実測値は、ここでは示していません。IC単体の値だけではLED・抵抗・電源回路などの消費電力を含まないため、最終的には実際の構成で電池側の電流を測定してください。

記録する際は、リーフの型番・リビジョン、ファームウェア、電源電圧、測定器、温度、動作モード、測定区間と平均電流を合わせて残します。典型値と最大値、データシート値と実測値は区別します。

 電池の容量はAh(アンペアアワー)という単位で決まります。 Ahは電荷の量を示していて、1Ah1時間ずっと1Aの電流を流すために必要な電荷の量を示します。

1 Ah = 1 A * 1 h

Ahは単にどれくらいの間一定の電流を流せるかということを示しており、ここに電池の電圧は登場しません。 しかしながら、電池には1.5Vや3Vといった出力電圧が決まっており、電圧は電池によっても異なる場合があります。 同じ1Ahでも1.5Vの電池と3Vの電池では動かせる電力が変わってきます。

電力を表す単位としてW(ワット)という単位が一般的に用いられます。 1W1Vの電圧がかかった回路に1Aの電流が流れた時の電力を表しています。

1 W = 1 V * 1 A

さらに、1時間ずっと1Wの電力を出力できる量としてWh(ワットアワー)という単位があります。

1 Wh = 1 W * 1 h

Whを用いれば一定時間に出力できる電力量を比較することができるため、電圧が異なる電池同士でもエネルギーの比較がしやすくなります。 1

 さて、次に実際に電池の容量がどれくらいあるのかを見ていきましょう。 電池の大きさによっても容量は異なります。 以下では、計算方法を示すため、次の公称電圧と容量を仮定します。容量は製品・温度・放電条件で変わるため、実際に使う電池のデータシートを確認してください。

  • コイン電池(CR2032):3.0V 220mAh (660mWh)
  • 単三電池(ニッケル水素):1.2V 2,000mAh (2,400mWh)
  • リチウムイオン電池:3.7V 3,000mAh (11,100mWh)

Leafonyで使われるコイン電池(CR2032)は、この例の単三電池の約28%の電力量であることがわかります。

また、Whの定義より、3.3Vの電源電圧で100mAの電流で動作する回路を動かした場合、コイン電池は

660 mWh / (3.3 V * 100 mA) = 2 h

単三電池は

2,400 mWh / (3.3 V * 100 mA) ≒ 7.3 h

という理想条件での動作時間が得られます。

Leafonyの動作電圧とリーフごとの電流はデータシートからおおよそ計算ができるため、電池でどれくらいの時間連続動作が可能なのかを見積もることができます。

 では、回路の消費電流が次のような場合はどうでしょうか?

1時間のうち1分間だけ回路が動き、そのとき100mAで動作する。
残りの59分間は回路がスリープモードに入り、そのとき回路には1mA流れている。

この場合は、まず動作時間で重み付けした平均電流を求めます。

I_avg = 100 mA * (1 / 60) + 1 mA * (59 / 60) = 2.65 mA

3.3Vで動作するときの平均電力は、

P_avg = 3.3 V * 2.65 mA = 8.745 mW

です。1時間に消費する電力量は 8.745 mW × 1 h = 8.745 mWh です。

したがって、コイン電池(CR2032)を使う場合は、

660 mWh / 8.745 mW ≒ 75.5 h

となり、約75.5時間(約3.14日)動作する理論計算になります。上記の理想条件による見積もりであり、Leafonyの実測動作時間ではありません。

 ここでは、これまでにLeafonyのサンプルデザインで使ってきた省電力化のためのアイデアをご紹介します。

動作周波数を可能な限り下げる

Section titled “動作周波数を可能な限り下げる”

この方法はサンプルスケッチ「STM32 BLE Logger Beacon」で使用しています。

 「電力の計算」の章で紹介したように、デジタル回路の電力は周波数に比例します。Leafonyの場合、最も大きなデジタル回路はCPUです。 STM32リーフの場合、その動作周波数は標準で80MHzに設定されています。Leafonyでは、CPUの処理性能を犠牲にしつつも電力を最小限に抑えるべく、 動作周波数を80MHz16MHzから選択できるようにしています。

 動作周波数の選択方法については簡単です。Arduino IDEを開き、ツール → Board part number→ Leafony STM32 MCUを選択し、 利用したい周波数を選択すれば設定完了です。

stm32 speed


では、どうやって動作周波数を決めればよいでしょうか。

一つは動作の内容によって大まかに決める方法があります。

  • 高速な計算が必要な場合
  • 省電力に特化したい場合

二つ目は高速な周波数で設計し動作確認を行ったスケッチを、一つずつ動作周波数を下げてテストしてみる方法があります。

不要なコアはスリープまたは電源を落とす

Section titled “不要なコアはスリープまたは電源を落とす”

この方法はサンプルスケッチ「STM32 BLE Logger Beacon」で使用しています。

 回路にはたくさんの部品が載っており、それらの部品一つ一つがすべて電力を消費します。これらの部品の中には、回路の動作中に一時的に使用しなくても良い部品も含まれているかもしれません。

 具体的な例を見て考えていきましょう。たとえば、4-Sensorsリーフを用いて4種類のセンサを読み取り、それをBLEリーフで送信するシステムがあるとします。 このシステムでは、まず4-Sensorsリーフからデータを読み出し、読みだしたデータをBLEリーフに転送してデータを送信します。 BLEリーフでデータを送信している時間は4-SensorsリーフのセンサICは使われておらず無駄に電力を消費してしまいます。

ここで消費されるわずかな電力(しかしながらコイン電池を使う場合には非常に大きな影響力がある)を抑えるため、4-Sensorsリーフで使用しているセンサICにはすべてSleepモードが存在します。 センサ読み取り後すぐにSleepモードに移行させることによって、その電力を大幅に抑えることができ、バッテリでの長時間動作に繋がります。

 さらに発展的な例を考えてみましょう。STM32リーフを使用する場合、STM32チップの内部も複数の回路で構成されていて、これらを個々にスリープモードにして電力を抑えることができます。

割り込みでスリープから復帰させる

Section titled “割り込みでスリープから復帰させる”

この方法はサンプルスケッチ「STM32 BLE Logger Beacon」で使用しています。

 外部からのイベントが発生したときにだけ回路を動作させたい場合は、CPUの割り込み機能を使うと非常に省電力なシステムを作ることができます。

  1. 使用するリーフ、プログラム、電池、電圧を記録します。
  2. 電池と回路の間で電流を測定し、起動・測定・無線送信・スリープを含む一周期を記録します。測定器の電圧降下が動作に影響しないことも確認します。
  3. 周期内の電流を時間平均します。電圧変動がある場合は電圧と電流の積を時間平均して平均電力を求めます。
  4. 理論値と比較し、LED、使っていないセンサ、通信間隔などを一つずつ変更して再測定します。
  5. 最後に実際の電池で、必要な期間と温度条件で動作することを確かめます。

このページの計算例は机上検算のみです。実機による測定日・測定器・検証済みファームウェアの記録は未登録です。

  1. 電池は使用量によって電圧が変わってくる場合があるため、精確な電力量を計算することはより複雑になります。