Nordic

nRF54L15にFuel Gaugeを実装してみました!

2026.09.07


こんにちは。
加賀デバイスのNordic Teamです。

バッテリー駆動の製品では残量表示が重要になります。しかし、バッテリー電圧は温度、負荷条件、劣化状態などによって変化するため、電圧だけでは正確な残量を把握できません。そこで活用されるのがFuel Gauge(残量推定機能)です。

Fuel Gaugeはバッテリーの電圧、電流、温度などの情報をもとに、残量(State of Charge)や劣化状態(State of Health)を推定します。Nordic製SoCと組み合わせることで、nRF Connect SDKからFuel Gaugeアルゴリズムをそのまま利用できます。これはホストSoCとPMICのみで動作します。

nRF Connect SDKの説明はnRF Connect SDK 環境構築方法(V3.0.0編)をご覧ください。

今回のコラムでは、nPM1304 EKでバッテリーモデルを作成し、nRF54L15 DKへ組み込み、Fuel Gaugeの動作を確認してみました。

PMICを使用したFuel Gaugeは、nPM PowerUPというPCツールを用いることで簡単に評価・開発できます。
このPCツールではコード不要でバッテリーモデルを生成できるため、今回はnPM PowerUPを活用して進めていきます。

◢◤実機検証

ここからは実際にバッテリーモデルを作成し、バッテリー残量の取得を行います。

ステップ1:バッテリーモデルの作成(nPM1304 EK)
ステップ2:バッテリーモデルの組み込み(nRF54L15 DK)

必要なものは下の表にある通りです。
ステップ1ではnRF54L15 DKは不要です。

ハードウェアソフトウェア
nPM1304 EKnPM PowerUP
nRF54L15 DKnPM1300 and nPM1304: Fuel gauge
評価対象バッテリー(nPM1304 EK同梱)


◢◤ソフトウェアの準備

まずはnPM PowerUPをインストールします。Nordic製品の開発用ツールをインストール・管理して起動するための統合デスクトップアプリにnRF Connect for Desktopというものがあります。nRF Connect for Desktopをインストール(インストール済みの方は不要)して、Search欄から「nPM PowerUP」を検索してインストールします。

nPM1304 EKの接続はUSB type-Cケーブルを2本使用します。(バッテリー充電用と制御用)
nPM PowerUPを起動しSELECT DEVICEから接続しているnPM1304 EKを選択します。

nPM1304 EKとの初回接続時にはFWの更新の画面になるので実行します。

更新が完了すると、バッテリーモデルの作成やFuel Gaugeの評価を行う画面に移行します。

上部のタブを切り替えることで、充電状況や電圧などを確認できます。

サイドパネルからバッテリーモデルの作成や接続状況の確認ができます。

◢◤ステップ1:バッテリーモデルの作成

バッテリーモデルの作成はnPM PowerUPのサイドパネルのProfile Batteryから行います。実行する前にnPM1304 EK上のSW5がVSYSになっていることを確認してください。
これはバッテリーを放電するための定電流回路に接続するためです。

今回はnPM1304 EKに付属しているバッテリーを使用します。付属しているバッテリーはLP181917です。
バッテリーモデルの作成に必要なLP181917の仕様を下の表にまとめます。

満充電電圧4.2V
カットオフ電圧2.75V
バッテリー容量20mAh
充電電流10mA
サーミスタ抵抗10kΩ
保護回路起動電圧2.8V

Profile Batteryを押した後は使用するバッテリーの仕様をBattery Profilingで入力します。
他のバッテリーを使用する場合は、そのバッテリーの仕様を入力してください。

Battery Profilingで設定するカットオフ電圧には以下の2点に注意が必要です。
・nPM1304のPOF電圧は2.8V(初期値)に設定されているので、POF電圧はバッテリーのカットオフ電圧より低い値に設定してください。
・Battery Profilingで設定するカットオフ電圧は使用するバッテリーの保護回路起動電圧より高い値を設定してください。

今回使用したバッテリーのカットオフ電圧は2.75Vですが、上記の条件を満たすためにBattery Profilingではカットオフ電圧を2.9Vに設定しています。
Battery Profilingでの設定値をバッテリー仕様値(2.75V)に設定した場合、モデル作成中にエラーが発生し、モデル作成に失敗します。

詳しくは補足1:失敗例としてまとめましたので、併せてご参照ください。

Battery Profilingの入力後、保存先のフォルダを選択すると、実際にモデル作成に進みます。
モデル作成は充電から開始されます(満充電の場合は次に進みます)。
Battery Profilingで25℃と入力しましたが、室温がわずかに25℃を超過しているためCautionが表示されています。この場合でもバッテリーモデルを作成できますが、より正確なバッテリーモデルの作成には25℃を保つ必要があります。
温度測定はバッテリーのサーミスタを利用しています。

充電が完了すると充電用のUSBケーブルを外すアナウンス画面に移行します。USBケーブルを手動で外しContinueを押しバッテリー休息のステップに進みます。
バッテリー休息は約45分間で、終了すると自動で次に進みます。

バッテリー休息が終了すると放電が始まりバッテリーモデル作成が進行します。放電には時間がかかるため、PCがスリープ状態にならないよう設定してください。終了予測時間は休息時間と同様に画面下部に表示されます。

放電が完了すると、保存先フォルダにバッテリーモデルとして使用するJSONファイルおよびINCファイルが生成されます。今回の評価では、放電完了まで約28.5時間を要しました。
測定時のログはprofile_1フォルダの中に出力されています。

なお、より正確なバッテリーモデルを作成するためのガイドラインが用意されています。
・NTC付きバッテリーを使用し、バッテリー仕様を正しく設定する
・接続は正しく行う(PCをスリープ状態にしない等)
・温度ごとにモデルを作成することで精度が向上する(単一温度でも問題はない)
・温度を一定に保ち、0℃未満のprofileは行わない
・温度変更時は再度満充電を行う
・評価中の設定は変更しない

今回は25℃のみですが複数の温度で測定した場合はCSVファイルを統合することでより高精度なバッテリーモデルを作成することができます。統合する作業もnPM PowerUPで行えます。統合後はJSONとINCファイルが生成されます。

◢◤ステップ2SoCへのモデルの組み込み

次にnRF54L15 DKにステップ1で作成したバッテリーモデルを組み込んでいきます。サンプルはnPM1300 and nPM1304: Fuel gaugeを使用します。
このサンプルソフトでプロジェクトを作成します。詳しい作成方法はnRF Connect SDK 環境構築方法(V3.0.0編)をご覧ください。
作成したプロジェクト内のsrcフォルダにnPM PowerUPで作成したINCファイル(20mAh25temp20260724_25C.inc)をコピーします。

サンプルコードのfuel_gauge.c の中でバッテリーモデルを定義しているので、srcフォルダへコピーしたINCファイル名に変更します。

デフォルト名:battery_model_20mAh.inc
変更後:20mAh25temp20260724_25C.inc

Add build configurationでnRF54L15 DKを選択することに加えてnPM1304の設定も追加してビルドします。

・Board targetnrf54l15dk/nrf54l15/cpuapp
・Extra Devicetree overlaysnpm1304.overlay

次にnRF54L15 DKへ書き込むため、nPM1304 EK上のジャンパ設定およびnRF54L15 DKとの接続を行います。
nPM1300/nPM1304 Fuel Gauge の配線方法から、ジャンパ設定方法および使用するDKに合わせた接続を確認してください。

nPM1304 EKnRF54L15 DK
SDAP0.26
SCLP0.27
GPIO3P0.04
VDDIOVDD
GNDGND

nPM1304 EKとnRF54L15 DKの接続が完了したら実際にプログラムを書き込みます。書き込むとターミナルで現在のバッテリー残量が確認できます。

nPM PowerUPで確認したところ、ターミナルの値と同じような値になりました。

※nPM1304 EK上のホストSoCとPMICの通信、およびnRF54L15 DKとPMICの通信はいずれもI2Cを使用しているため、同時接続するとバス競合が発生します。そのため、nPM PowerUPとターミナルでの表示は同時に使用することはできません。

◢◤補足1:失敗例

Battery Profilingの入力時にカットオフ電圧をバッテリー仕様と同等(2.75V)にしたときに、バッテリーモデルの作成中にエラーが出て中断されました。
中断された原因は2つありました。

1つ目の原因はPMICのPOF設定値をリセット値のままにしていたことです。
今回のバッテリーのカットオフ電圧は2.75Vですが、PMICのPOF設定値はリセット値の2.8Vだったため、バッテリー電圧が2.8Vを下回った時点で中断されました。
中断までにかかった時間は約38.5時間です。これはステップ1の2.9Vまでのバッテリーモデルの作成と比べて長く放電しているためです。
POF(Power-Fail Comparator)とは入力電圧が設定値以下になるとホストSoCに警告する機能です。

そこで、POF値を2.7Vに設定して再度バッテリーモデルの作成に取り掛かりました。
しかし、前回と同様にバッテリー電圧が2.8Vを下回った時点で1つ目とは異なる原因で中断されてしまいました。
その2つ目の原因はバッテリーに搭載されている保護回路の動作電圧が2.8Vであることです。

正常にバッテリーモデルを作成するためにはPOFがバッテリーモデルの作成中に起動しないようにする必要があります。しかし、nPM1304 EKに付属しているバッテリーでは保護回路の起動する電圧がバッテリーのカットオフ電圧より高いです。そのため、POF値をカットオフ電圧より低く設定しても保護回路が先に起動してしまいます。
今回の場合、バッテリーモデル作成を正常に終了するにはBattery Profilingで設定するカットオフ電圧を保護回路が起動する2.8Vより高く設定する必要がありました。

そこで、ステップ1のようにBattery Profilingで設定するカットオフ電圧を2.9Vにすることで、バッテリーモデルを作成することができました。

◢◤補足2:nPM Power UPへのモデルの組み込み

nPM PowerUPにバッテリーモデルを取り込むことで、nPM PowerUPで表示されるバッテリー残量などの精度が向上します。
作成したバッテリーモデルを使用してnPM PowerUPアプリ上でFuel Gaugeを試してみます。まずはJSONファイル(20mAh25temp20260724_25C.json)をnPM PowerUPのアプリに取り込みます。作成したバッテリーモデルの追加はサイドパネルから行います。

追加したらActive Battery Modelでモデルを選択できるようになります。追加したモデルを選択することで充電残量に変化がありました。

◢◤まとめ

今回はnPM PowerUPで作成したバッテリーモデルをnRF54L15 DKに組み込み、バッテリー残量等を確認しました。
バッテリー駆動製品の開発においてnPM1304は充電制御とFuel Gauge機能を容易に実装できる便利な製品となっております。Fuel Gaugeを活用することで、単純な電圧監視では難しい高精度なバッテリー残量推定が可能になります。これにより、以下のような機能を実現できます。

・バッテリー残量に応じたLED表示やGUI表示
・バッテリー残量低下時の省電力モードへの移行
・バッテリー交換時期の予測
・充放電履歴を利用した機器状態の監視

特に、同じ電圧であっても温度や負荷条件によって実際のバッテリー残量は変化するため、Fuel Gaugeによる推定はユーザー体験の向上に大きく貢献します。

NordicのPMICおよびFuel Gaugeについて詳しい情報をお求めの方は弊社のお問い合わせ にご連絡ください。

今後もNordicの紹介及びコラムにて色々な情報を公開致しますので是非ご確認ください。

また、Facebookでも随時情報を公開しておりますので合わせてご確認ください。

Nordic コラム一覧

Nordicが提供する2つのEdge AI

関連記事