電源・省電力

バッテリー駆動

電池で動かす設計。電力収支が重要。

概要

バッテリー駆動(Battery-Powered Design)とは、外部電源(商用電源、ACアダプタなど)を使わず、電池(バッテリー)のみでシステムを動作させる設計手法を指す。IoTデバイス、ウェアラブル機器、産業用センサーなど、電源ケーブルの引き回しが困難な場所や、長期間無人運用が求められる機器の多くがバッテリー駆動を採用している。

バッテリー駆動設計の根本的な課題は、電池の有限なエネルギーをいかに効率よく使い、目標の動作期間を達成するかという「電力収支(エネルギーバジェット)の管理」にある。電源が無限に供給されるAC駆動設計とは異なり、すべての設計選択(MCUの選定、クロック周波数、通信方式、センシング頻度)が電池寿命に直結するトレードオフとなる。

バッテリー駆動設計の基本指標

指標単位意味
電池容量mAh1mAの電流を何時間供給できるか
放電深度(DoD)%どこまで使い切るかの割合
自己放電率%/月何もしなくても減る電荷量
動作電圧範囲V電池の使用可能な電圧範囲
平均消費電流mAシステム全体の時間平均電流
目標動作期間年/月設計目標の電池寿命

歴史・背景

電池を電源とする携帯機器の歴史は、19世紀の電池(ヴォルタ電池: 1800年)の発明まで遡るが、組み込みシステムにおけるバッテリー駆動の本格的な普及は1980〜1990年代のポータブル機器(ポケベル、電卓、携帯音楽プレーヤー)の登場とともに始まった。

1990年代にリチウムイオン電池が実用化されると、高エネルギー密度・軽量という特性からモバイル機器(携帯電話、ノートPC)に急速に普及した。2000年代のスマートフォン時代を経て、2010年代のIoTブームでは「コイン電池で10年間動作する環境センサー」というコンセプトが登場し、µA〜nAオーダーの超低消費電力設計技術が急速に発展した。

現在では、スマートホーム機器、スマート農業センサー、医療用ウェアラブル、スマートシティインフラなど、バッテリー駆動のIoTデバイスが世界中に数十億台規模で展開されており、電池設計技術は組み込みエンジニアの核心スキルの一つとなっている。

技術仕様

主要電池の種類と特性

電池種類公称電圧エネルギー密度サイクル寿命自己放電特徴
アルカリ乾電池(一次)1.5V100Wh/kg低(〜5%/年)安価、広く入手可能
コイン電池 CR2032(一次)3.0V極低(〜1%/年)小型、IoTに最適
リチウム一次(ER34615等)3.6V500Wh/kg極低(〜1%/年)長期間高エネルギー
リチウムイオン(二次)3.7V150〜265Wh/kg300〜500中(2〜3%/月)高容量、充電可能
リチウムポリマー(LiPo)(二次)3.7V100〜265Wh/kg200〜1000中(2〜3%/月)薄型、フレキシブル形状
NiMH(二次)1.2V60〜120Wh/kg500〜1500高(20〜30%/月)安全、環境負荷小

電池容量と動作時間の計算

実際の電池寿命を正確に見積もるには、以下の要素を考慮した計算が必要である。

def estimate_battery_life(battery_capacity_mah, self_discharge_rate_per_month,
                          duty_cycles, temperature_derating=1.0,
                          dod=0.8):
    """
    battery_capacity_mah: 電池容量 (mAh)
    self_discharge_rate_per_month: 月次自己放電率 (例: 0.02 = 2%/月)
    duty_cycles: [(電流mA, 時間秒), ...]
    temperature_derating: 温度による容量低減係数 (0〜1.0)
    dod: 放電深度 (通常0.7〜0.9)
    """
    import math
    
    # 有効容量(温度・放電深度考慮)
    effective_capacity_mah = battery_capacity_mah * temperature_derating * dod
    
    # 平均消費電流の計算
    total_charge = sum(i * t for i, t in duty_cycles)
    total_time_s = sum(t for _, t in duty_cycles)
    avg_current_ma = total_charge / total_time_s
    
    # 初期見積もり(自己放電なし)
    initial_life_h = effective_capacity_mah / avg_current_ma
    
    # 自己放電の影響(複利計算による近似)
    # 1ヶ月 = 720時間として計算
    monthly_avg_consumption_mah = avg_current_ma * 720
    monthly_self_discharge_mah = battery_capacity_mah * self_discharge_rate_per_month
    
    total_monthly_drain = monthly_avg_consumption_mah + monthly_self_discharge_mah
    life_months = effective_capacity_mah / total_monthly_drain
    
    return avg_current_ma, initial_life_h, life_months

# 例: スマートドアセンサー(BLE、15分に1回データ送信)
duty_cycles = [
    (12.0,  0.5),   # BLE広告+送信: 12mA × 0.5秒
    (0.5,   1.0),   # センサー読み取り: 0.5mA × 1秒
    (0.003, 898.5), # ディープスリープ: 3µA × 898.5秒
]

avg_mA, life_h, life_months = estimate_battery_life(
    battery_capacity_mah=220,    # CR2032
    self_discharge_rate_per_month=0.01,
    duty_cycles=duty_cycles,
    temperature_derating=0.85,   # 常温使用
    dod=0.85
)
print(f"平均消費電流: {avg_mA*1000:.1f} µA")
print(f"理論電池寿命: {life_months:.1f} ヶ月")

電圧降下特性と動作保証範囲

電池は残量が減るにつれて端子電圧が低下する。MCUや外部ICが動作保証する最低電圧(例: 1.8V)まで使い切れるか、それとも低電圧でシャットダウン処理が必要かを設計段階で検討する。

// 電池電圧の監視と低電圧警告
#define VBAT_LOW_THRESHOLD    3.0f   // 低電圧警告(3.0V)
#define VBAT_CRITICAL_THRESHOLD 2.8f  // 動作停止閾値(2.8V)

float read_battery_voltage(void) {
    // ADCで分圧抵抗を経由してVBAT測定
    uint32_t adc_val = HAL_ADC_GetValue(&hadc1);
    // 12bit ADC, 3.3V基準, 分圧比1/2 の例
    float voltage = (adc_val / 4095.0f) * 3.3f * 2.0f;
    return voltage;
}

void check_battery_level(void) {
    float vbat = read_battery_voltage();
    
    if (vbat < VBAT_CRITICAL_THRESHOLD) {
        // 重要データをフラッシュに保存してシャットダウン
        save_critical_data();
        enter_shutdown();
    } else if (vbat < VBAT_LOW_THRESHOLD) {
        // 低電池警告フラグを立てる(次回通信時に送信)
        set_low_battery_flag();
    }
}

動作原理

電力収支(エネルギーバジェット)の考え方

バッテリー駆動設計の核心は、電池が供給できるエネルギーと、システムが消費するエネルギーの収支を管理することである。

エネルギー収支(1日あたり):
供給: 電池容量[Wh] ÷ 設計寿命[日]
消費: Σ(各モードの電力[W] × 動作時間[h])

エナジーハーベスティングを併用する場合は、ハーベスト量も供給側に加算できる。

電池の内部抵抗と電圧降下

電池には内部抵抗(Rint)があり、大電流が流れると端子電圧が降下する。特にピーク電流(RF送信時など)では顕著であり、MCUの動作電圧範囲を下回らないよう設計する必要がある。

V_terminal = V_OCV - I × R_int

V_OCV: 開路電圧(無負荷時の電池電圧)
I:     放電電流
R_int: 内部抵抗(CR2032で5〜20Ω程度)

コイン電池(CR2032)はRintが高いため、BLE送信時(15mA程度)に大きな電圧降下が発生し、MCUがブラウンアウト(低電圧リセット)する問題が発生することがある。この対策として、大容量の電解コンデンサ(100µF〜1000µF)を電源ラインに並列接続してピーク電流を補う設計が一般的である。

用途・ユースケース

スマートホーム機器

スマートドアセンサー、窓開閉センサー、煙感知器などは電源ケーブルが引けない場所に設置されるため、バッテリー駆動が前提となる。単3または単4電池で1〜2年間の動作が要求される。

産業用IoTセンサー

工場内の設備監視センサー、倉庫・物流センターの温湿度管理、農業用土壌センサーなど、インフラ整備が困難な環境で使われる機器はバッテリー駆動が必須となる。LoRaWANLTE-Mなどの低消費通信と組み合わせる。

ウェアラブル医療機器

心電計、血糖計、インスリンポンプ、歩行補助器などの医療用ウェアラブルは、安全性・信頼性の観点から電池残量管理と低電圧時のフェールセーフ設計が特に重要である。

スマートメータ

電気・ガス・水道のスマートメータは、電源工事なしに設置できるよう、10〜15年間電池交換不要の超長寿命バッテリー駆動が要求される場合がある(外部電源を引いている製品も多い)。

実装・開発のポイント

1. 電力収支表の作成

設計初期に全動作モードの消費電流と動作時間を表にまとめ、平均消費電流を算出する。

動作モード消費電流1サイクルの時間電荷量
センサー計測5mA200ms1.0 mAs
BLE送信12mA500ms6.0 mAs
ディープスリープ3µA299.3秒0.898 mAs
合計(1サイクル300秒)300秒7.898 mAs
平均消費電流0.0263mA = 26.3µA

2. 実機での電流プロファイリング

設計値と実測値は必ずしも一致しない。Nordic PPK2やOtii Arcなどの専用ツールで実測し、設計値との差異を確認する。特に電圧変動やペリフェラルの意図しない起動が消費電流増加の原因になることがある。

3. 温度特性の考慮

電池の放電容量は温度によって大きく変化する。低温(−20℃)ではリチウム電池の容量が20〜40%低下することがあり、屋外・低温環境向け製品では温度特性を考慮したバッファ(余裕)を設ける。

4. 電池切れ時のフェールセーフ

電池残量が低下した際に、重要な設定や累積データをフラッシュメモリに保存してからシャットダウンする設計を入れる。また、低電池状態をユーザーやクラウドに通知する仕組みも重要である。

5. 充電回路の設計(二次電池使用時)

リチウムイオン電池など充電可能な電池を使う場合は、充電ICを使った適切な充電制御(CC/CV充電)が不可欠である。過充電・過放電は電池の寿命を著しく縮め、最悪の場合発火の危険がある。

他技術との比較

電源方式安定性寿命コスト設置自由度主な用途
商用電源(AC)最高無制限低(電気代のみ)家電、固定設備
電池(一次)数ヶ月〜10年中(電池交換費)最高センサー、リモコン
充電式電池(二次)数百〜数千サイクル初期高めスマートフォン、ウェアラブル
エナジーハーベスト単独低(環境依存)無制限(理想)高(初期)最高自律型センサー
PoE(Power over Ethernet)最高無制限ネットワーク機器

バッテリー駆動設計では、低消費電力設計の技術全体(スリープモードディープスリープ、適切なLDODC-DCコンバータの選定)を組み合わせ、消費電流を徹底的に最適化することが、製品の競争力を決定する重要な設計課題となる。

関連用語

参考リンク