概要
消費電流(Current Consumption)とは、電子機器や回路が動作時に消費する電流の量を指し、単位はA(アンペア)、実用的にはmA(ミリアンペア)やµA(マイクロアンペア)が使われる。組み込みシステムの設計において、消費電流は電池寿命、発熱、電源回路の設計容量を直接決定する最重要パラメータの一つである。
特にバッテリー駆動の機器では、消費電流の最小化が製品の実用性を左右する。電池容量(mAh)を平均消費電流(mA)で割ることで、理論的な電池寿命が求められる。
電池寿命(時間) = 電池容量(mAh) ÷ 平均消費電流(mA)
例えば、単三電池1本(約2000mAh)で平均消費電流1mAの機器は2000時間(約83日)動作する。消費電流を0.1mAに削減できれば20,000時間(約2.3年)に延びる。
動作モード別の消費電流
組み込みMCUは動作モードによって消費電流が大きく異なる。
| 動作モード | 代表的な消費電流 | 備考 |
|---|---|---|
| フルアクティブ(RF送信中) | 数十mA〜数百mA | Wi-Fi、LTE送信時は特に大 |
| フルアクティブ(CPU演算) | 数mA〜数十mA | クロック周波数に比例 |
| 通常スリープ | 数十µA〜数mA | CPUクロック停止 |
| ディープスリープ | 数µA〜数百nA | ほぼ全回路停止 |
| シャットダウン | 数nA〜数百nA | 電源回路のリーク電流のみ |
歴史・背景
電流測定の単位アンペア(A)は、フランスの物理学者アンドレ=マリー・アンペール(André-Marie Ampère、1775-1836)にちなんで命名された。国際単位系(SI)の基本単位の一つであり、1999年まで電流は電荷の流れとして定義されていたが、2019年のSI改定により素電荷を基に再定義された。
組み込みシステムにおける消費電流の測定・管理は、ポータブル電子機器の普及とともに重要性を増してきた。1990年代のPDA(Personal Digital Assistant)、2000年代の携帯電話、2010年代のIoTデバイスの普及に伴い、µA〜nAオーダーでの消費電流管理が製品開発の必須スキルとなった。
2010年代以降、IoTデバイスの爆発的普及とともに「10年間電池交換不要」という要求が現れ、nA(ナノアンペア)オーダーの超低消費電流MCUの開発競争が激化した。現在ではSilicon LabsのEFR32シリーズが20nAのシャットダウン消費電流を実現するなど、ハードウェアの進化が続いている。
技術仕様
消費電流の単位と換算
| 単位 | 記号 | 値 | 典型的な用途 |
|---|---|---|---|
| アンペア | A | 基本単位 | 大電流(モーター駆動など) |
| ミリアンペア | mA | 10⁻³ A | 一般的なMCUアクティブ動作 |
| マイクロアンペア | µA | 10⁻⁶ A | MCUスリープ、低電力センサー |
| ナノアンペア | nA | 10⁻⁹ A | 超低消費MCUのディープスリープ |
| ピコアンペア | pA | 10⁻¹² A | 超高精度電流測定の領域 |
主要MCUの消費電流比較
| MCU / モジュール | アクティブ | スリープ | ディープスリープ |
|---|---|---|---|
| ESP32(240MHz) | 240mA(Wi-Fi TX峰値) | 0.8mA | 10µA |
| STM32L4(80MHz) | 4.5mA | 28µA | 0.5µA |
| Nordic nRF52840 | 4.8mA(BLE TX時) | 3µA | 1.5µA |
| Raspberry Pi Pico | 26mA | — | 1.3mA(DORMANT) |
| Silicon Labs EFR32 | 2.6mA | 20nA | 20nA |
| TI MSP430 | 230µA(1MHz) | 1µA | 0.1µA |
消費電力の計算
消費電力(W)は電圧(V)と電流(A)の積で求められる。
消費電力(W) = 電圧(V) × 消費電流(A)
3.3V動作のMCUが10mA消費する場合:
消費電力 = 3.3V × 0.010A = 0.033W = 33mW
バッテリー駆動時間は電力量(Wh)と消費電力の比でも計算できる。
動作時間(h) = 電池エネルギー(Wh) ÷ 消費電力(W)
= 電池容量(mAh) × 公称電圧(V) ÷ 1000 ÷ 消費電力(W)
動作原理
CMOSの電力消費モデル
現代の組み込みMCUはCMOS(Complementary MOS)技術で製造されており、消費電力は以下の式で表される。
P_total = P_dynamic + P_static
P_dynamic = α × C × V² × f
P_static = I_leak × V
α(スイッチング活性化係数): クロックサイクルあたりの平均スイッチング回数C(負荷容量): 回路の寄生容量V(電源電圧): 動作電圧f(クロック周波数): 動作クロックI_leak(リーク電流): スリープ時も流れる静的電流
この式から、消費電流を削減するための3つの手法が導かれる。
- クロック周波数の低減(f↓): 処理性能が下がるが電流は比例して減る
- 電源電圧の低減(V²↓): 電圧を下げると電流も減り、かつ電力は二乗で減る
- クロックゲーティング(α↓): 不要なブロックへのクロック供給を停止
電流の測定方法
消費電流の実測には以下の方法がある。
シャント抵抗法: 電流経路に低抵抗(シャント抵抗)を挿入し、両端の電圧降下をオシロスコープやマルチメータで測定する。
I = V_shunt ÷ R_shunt
例: 1Ωのシャント抵抗に1mVの電圧降下 → I = 1mV ÷ 1Ω = 1mA
シャント抵抗が大きすぎると電圧降下により動作電圧が不足するため、µAオーダー測定には高精度の電流計や専用ツールを使う。
専用の電流プローブ・測定ツール:
- Nordic PPK2(Power Profiler Kit 2): 1nA〜1Aのレンジで高速サンプリング可能
- Otii Arc: 4nA〜5Aのレンジ、電力プロファイリングに特化
- Segger J-Trace: デバッガと消費電流測定を統合
用途・ユースケース
電池寿命の見積もりと目標設定
製品開発の初期段階で、各動作モードの消費電流と動作時間の割合から平均消費電流を見積もる。
# 電池寿命計算の例(Python)
def calc_battery_life(battery_capacity_mah, duty_cycles):
"""
duty_cycles: [(current_mA, duration_sec), ...]のリスト
返値: 電池寿命(時間)
"""
total_charge_mAs = sum(i * t for i, t in duty_cycles)
total_time_s = sum(t for _, t in duty_cycles)
average_current_mA = total_charge_mAs / total_time_s
battery_life_h = battery_capacity_mah / average_current_mA
return average_current_mA, battery_life_h
# 例: IoTセンサー(1分周期でBLEデータ送信)
duty_cycles = [
(15.0, 1.0), # BLE送信: 15mA × 1秒
(5.0, 1.0), # センサー計測: 5mA × 1秒
(0.003, 58.0), # ディープスリープ: 3µA × 58秒
]
avg_mA, life_h = calc_battery_life(2000, duty_cycles)
print(f"平均消費電流: {avg_mA:.4f} mA")
print(f"電池寿命: {life_h:.0f} 時間 ({life_h/24:.0f} 日)")
# 平均消費電流: 0.2697 mA
# 電池寿命: 7415 時間 (309 日)
電源回路の設計仕様決定
LDOやDC-DCコンバータの選定において、最大消費電流(ピーク電流)が電源ICの定格電流を下回ることを確認する必要がある。突入電流(イナッシュ電流)のピーク値も考慮が必要である。
EMC(電磁適合性)設計
電流の急峻な変化(di/dt)は電磁ノイズの発生源となる。RF送信時のピーク電流やモータ起動時の突入電流は、電源ラインのバイパスコンデンサや配線インダクタンス設計に影響する。
実装・開発のポイント
1. 消費電流のプロファイリング
開発中に各動作フェーズの消費電流を実測し、設計値と照合する。PPK2などのツールを使えば、µs単位の時間分解能でプロファイルを取得できる。
// デバッグ用: GPIO を使った電流プロファイリングのマーカー
// (オシロスコープとの同期用)
#define PROFILE_START() GPIO_SetBits(GPIOB, GPIO_PIN_12)
#define PROFILE_END() GPIO_ResetBits(GPIOB, GPIO_PIN_12)
void measure_sensor(void) {
PROFILE_START(); // 計測開始マーカー
sensor_init();
float val = sensor_read();
sensor_deinit();
PROFILE_END(); // 計測終了マーカー
send_data(val);
}
2. クロック周波数の動的変更
処理内容に応じてクロック周波数を動的に変更する Dynamic Voltage Frequency Scaling(DVFS)を活用する。
// STM32: クロック周波数の動的変更
void set_low_speed_clock(void) {
// 80MHz → 4MHz に変更(消費電流を大幅削減)
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
// ... クロック設定の変更処理
HAL_RCC_OscConfig(&RCC_OscInitStruct);
}
void set_high_speed_clock(void) {
// 4MHz → 80MHz に変更(高速処理が必要な場合)
// ... 通常クロック設定に戻す処理
}
3. 電源電圧の最適化
3.3V設計を1.8Vに下げることで、消費電流を大幅に削減できる(CMOS動的消費電力はV²に比例)。ただし、接続する外部ICやセンサーの動作電圧範囲に合わせる必要がある。
4. 外部部品の消費電流の見落とし
MCU本体の消費電流が最適化されていても、外部センサーや通信モジュールの電流が支配的になることがある。システム全体の電流プロファイルを取得し、消費電流の「大口」を特定して優先的に対策する。
他技術との比較
| 省電力アプローチ | 効果 | 実装難易度 | コスト |
|---|---|---|---|
| スリープモードの活用 | ★★★★ | ★★ | 無料 |
| クロック周波数の低減 | ★★★ | ★ | 無料 |
| 電源電圧の低減 | ★★★ | ★★ | 低 |
| 外部部品の電源制御 | ★★★ | ★★ | 低 |
| より低消費MCUへの変更 | ★★★★ | ★★★ | 中 |
| DC-DCコンバータへの変更 | ★★ | ★★ | 中 |
| エナジーハーベスティング | ★★★★★ | ★★★★ | 高 |
消費電流の最適化は、低消費電力設計の最終的な評価指標である。スリープモード、ディープスリープの活用と組み合わせ、実際の動作パターンに基づいた平均消費電流を算出・実測し、目標の電池寿命が達成できるかを検証することが開発プロセスの重要なステップとなる。