Bluetoothモジュールはスリープ時には数µAを消費し、送信時には数十mAを消費します。この二つの数値の差こそが電池寿命を決定します。多くのチームは無線をチューニングして電力状態マシンを忘れますが、実は月単位の稼働時間は状態マシンで稼ぐか失うかです。本記事では実践的な低消費電力スケジューリングモデルを解説します。どの状態が存在し、何が復帰させ、設計が実際に消費する平均電流をどう計算するかです。
電力状態マシン
Bluetoothモジュールは2状態ではなく4状態を移動すると考えます。
| 状態 | 代表的な電流 | 動作しているもの |
|---|---|---|
| アクティブ/TX-RX | 5-20 mA | 無線、CPU、フラッシュ |
| スリープ(CPU idle) | 1-3 mA | CPUクロック停止、RAM保持 |
| ディープスリープ | 10-200 µA | RTC、保持RAMのみ |
| ハイバネート | 1-5 µA | GPIO復帰、RTCのみ |
肝は、アプリケーションが必要とする遅延を満たしつつ、できるだけ長くディープスリープやハイバネートに留まることです。1日1回報告するドアセンサーはハイバネートでよく、心拍をストリームするウェアラブルはスリープに留まる必要があります。
ウェイクソース
Bluetoothモジュールは自ら目覚めません。何かがスリープから引き出す必要があります。
- GPIO割り込み: ボタン、PIR、リードスイッチのエッジ。最速(µs)で最安。
- RTC/タイマー: 定期ビーコンやポーリング用。予測可能だがデューティ比が固定。
- UART RX: ホストのバイト到着で立下りエッジが復帰。RXピンをバイアス保持必要。
- BLEイベント: スタックがスケジュールした接続イベントや広告ウィンドウ。
- 無線内ウェイクタイマー: リンク層が次の接続間隔で自己復帰。
電池センサーではGPIO+RTCの組み合わせが、99%の時間をスリープさせます。
デューティ比の数学
平均電流は各状態の時間重み付き和です。
I_avg = I_active * (t_active / T) + I_sleep * (1 – t_active / T)
Bluetoothモジュールが1秒ごとに5ms送信(15mA)し、残りを50µAでスリープする場合:
I_avg = 0.015 * 0.005 + 0.00005 * 0.995 ≈ 0.000125 A = 125 µA
CR2032(220mAh)なら約220/0.125≈1760時間、約73日。間隔を10秒にすると2年以上に伸びます。決定要素は無線電力ではなく間隔です。
PMICとレギュレータ選択
Bluetoothモジュールに給電するレギュレータはモジュール自身と同じくらい重要です。リニアLDOは単純で静かですが、電池から1.8Vへの降下を熱として無駄にします。バック(スイッチング)は85-95%効率で、3.6V Liセルで稼働時間を倍にできます。目安:200mV以上の降下で数mA以上ならバックを使います。
またPMIC自体の静止電流にも注意。スリープで25µAを消費するバックは、ハイバネートで5µAのBluetoothモジュールを圧倒できます。目標スリープ電流より十分低いIqのPMICを選びます。
スリープ移行のハンドシェイク
Bluetoothモジュールの電源をフラッシュ中に抜かないでください。明示的なハンドシェイクを使います。
1. ホストがスリープコマンド(例 AT+SLEEP)を送りOKを待つ。
2. モジュールは現在の処理を終えUARTをフラッシュし、「眠った」ことを示すHOST_WAKE/CTS線をアサート。
3. ホストは無線電源を切るかPMICにアイドルさせる。
復帰時、ホストは線をデアサート。モジュールは数十msでスタックを起動し、準備完了を示すHOST_WAKEを再びハイにします。
ウェイク遅延のトレードオフ
高速復帰は電力を消費します。低周波発振器を動かし続けるモジュールは2msで復帰しますがスリープ電力は高く、すべてをゲートするものは20-50msとフル再初期化を要します。キーボードは10ms未満、温度ビーコンは数秒許容。
実測する
モデルは数値の質だけのものです。DC電力解析器(マルチメータではなく)で電流トレースを取得し、曲線下面積を積算します。
Charge_per_cycle = ∫ I(t) dt (µA·s)
Average_current = Charge_per_cycle / T
これは簡略式が隠すフラッシュ書込や水晶起動、レギュレータのリングの実コストを捉えます。
設計を練ったBluetoothモジュールは、生涯のほとんどをディープスリープで過ごし、クリーンなソースで目覚め、静止電流がスリープ床の一部であるバックレギュレータを使います。それが数週間の稼働を数年に変える方法です。