Chapter 03
電源と消費電流から状態を読む — 機器は電流でしゃべる
この章のゴール.
消費電流の波形が内部状態のもっとも雄弁な外部信号であることを理解し、 平均・ピーク・スリープ電流・タイミングをどう測り、何をオラクルにするかを設計できるようになること。
この章で使う既出の用語(定義は各リンク先). 記録(01 章 4 節)、判定(02 章 1 節)、電源(02 章 2 節)
1. なぜ電流を最初に見るのか
MCU は、やっていることがそのまま消費電流に現れる。CPU が回れば増え、スリープすれば激減し、無線が送信すれば鋭いピークが立つ。 ソースを読めなくても、電流波形を見れば「今スリープに入った」「100 ms ごとに何か送っている」「起きっぱなしで寝ていない」が分かる。 特に電池駆動機器では、消費電流そのものが最重要の仕様であり、AI 生成コードで最も見落とされやすい欠陥(寝るべきときに寝ていない、無駄なポーリング)がここに出る。
2. 何を測るか
| 指標 | 意味 | 典型的なオラクル |
|---|---|---|
| 平均電流 | 電池寿命を決める | 「スリープ主体の機器で平均 10 µA 以下」 |
| スリープ電流(ベースライン) | 最も深い省電力状態の電流 | データシートの µA オーダーに入っているか |
| アクティブ電流 | 処理中のピーク・平均 | 想定範囲か |
| 送信ピーク | 無線送信の瞬間の電流(数十 mA) | 電源が耐えられるか、間隔は仕様どおりか |
| 突入電流 | 電源投入直後 | 保護回路が誤動作しないか |
| 状態遷移のタイミング | 起きて→処理→寝るまでの時間 | 締め切りを守るか(14 章) |
ダイナミックレンジが広いのが電流測定の難しさである。スリープの µA と送信の数十 mA は 4〜5 桁違う。両方を同時に、時間分解能を保って測るのが肝。
3. 測り方 — 3 つの方法
3.1 シャント抵抗 + オシロ/差動プローブ
電源ラインに小さな抵抗(シャント、例 1 Ω)を直列に入れ、その両端電圧を測る。オームの法則で電流に換算(1 Ω なら 1 mV = 1 mA)。
- 手軽・高速。オシロがあれば送信ピークのような速い変化も見える
- 抵抗値の選択が難しい: 大きいと電圧降下で機器が誤動作、小さいと µA が測れない
- ダイナミックレンジが狭い(1 つの抵抗値では µA と mA を両立できない)
3.2 専用の電流計測器(推奨)
Nordic Power Profiler Kit 2(PPK2)、Otii Arc、Keysight のパワーアナライザなどは、 測定レンジを自動で切り替え(µA〜A を 1 台で)、時間波形とともに積算エネルギーを出す。電池駆動機器の検証の定番。
- PPK2 は電源供給もでき、
ppk2-api(Python)でスクリプトから制御・記録できる(自動化に向く、18 章) - 波形を見ながら「このピークは送信」「この谷はスリープ」とラベル付けできる
3.3 電源側から
プログラマブル電源(ベンチ電源、pyvisa で制御、19 章)の電流読み値でも平均は分かるが、時間分解能が粗い。急峻なピークは見えない。
4. 電流波形をオラクルにする
電流波形は、内部状態の外部シグネチャとして使える。
- スリープ電流のチェック: 全処理を終えた後の電流がデータシートのスリープ値まで落ちるか。落ちなければ「ペリフェラルの止め忘れ」「割り込みで起きっぱなし」(AI 生成コードの頻出バグ)
- 周期の抽出: 波形の FFT や自己相関で「100 ms 周期のピーク」を検出し、広告間隔・センシング周期が仕様どおりか判定(09 章・14 章とつながる)
- 状態遷移時間: 起床のピークからスリープの谷までの時間を測り、締め切りと照合
- 回帰: 前バージョンの電流プロファイルと重ねて、「同じ操作なのに平均が 2 倍になった」を検出
# PPK2 で電流を取り、スリープ電流と平均を判定する骨格(18 章で詳述)
import numpy as np
samples = ppk2.get_samples() # µA の配列
sleep = np.percentile(samples, 5) # 下位 5 % ≈ スリープ電流
avg = samples.mean()
assert sleep < 15, f"スリープ電流が高い: {sleep:.1f} µA(寝ていない疑い)"
assert avg < 200, f"平均電流が高い: {avg:.1f} µA"5. 派生的な観測 — 発熱と電源品質
- 発熱: サーモカメラや温度センサで表面温度を見る。異常な発熱は「無駄な処理」「短絡」「電流過多」の兆候。電流測定と合わせて原因を絞る
- 電源リプル・ドロップ: オシロで電源電圧のふらつきを見る。送信ピークで電圧が落ちすぎるとリセット・誤動作(基板アートワーク編のデカップリング・電源設計の話と同根)
- 電圧を振ってみる: プログラマブル電源で電圧を下げていき、何 V で誤動作・リセットするか(ブラウンアウト閾値)。低電圧での挙動は AI が考慮しないことが多い(16 章の耐障害へ)
6. 音・電磁も「電流の親戚」
- 近傍電磁界プローブ: 小さなループコイルで基板上の電磁ノイズを拾うと、どのチップがいつ動いているかが分かる(サイドチャネルの入り口、17 章)
- 超音波・コイル鳴き: DC-DC コンバータの動作は音や電磁で漏れる。負荷の変化が聞こえることも
7. 手を動かす
電流波形から状態を読む
この章のポイント
- MCU はやっていることが消費電流に出る。ソースを読めなくても状態が分かる
- 測る指標: 平均・スリープ・アクティブ・送信ピーク・突入・遷移タイミング。µA〜A の広いレンジが難所
- 測り方: シャント + オシロ(速いが狭レンジ)、専用計測器 PPK2/Otii(推奨・自動化可)、電源側(粗い)
- 電流波形をオラクルに: スリープ落ちの確認、周期の抽出、遷移時間、回帰
- 派生で発熱・電源リプル・電圧マージン・電磁界も。AI コードは「寝ない・ポーリングしすぎ」がここに出る