NordicのPMIC(Power Management IC)であるnPM1300を使って、基板開発してみました。
複数電源を出力するだけでなく、バッテリ含めた電源管理まで対応しています。
SOCからPMICにI2Cで情報取得するまでの内容を紹介します。
PMIC(nPM1300)でバッテリーコントロールまでしてみた。
NordicのPMIC(Power Management IC)であるnPM1300を使って、基板開発してみました。
複数電源を出力するだけでなく、バッテリ含めた電源管理まで対応しています。
SOCからPMICにI2C経由で情報取得するまでの内容を紹介します。
回路図・アートワーク・BOM
開発した基板に関しては、KiCadで設計しています。
下記記事で実際のパターン・PCB設計の手法について、詳細を記載しています。
Pad on ViaをKiCadで設計して、PCBWayで基板作成してみた

実際のKiCadのデータに関しては、下記GitHubに保存しています。
筆者がパターン専門の設計者でなく、また趣味で作ったものですが、動作確認は出来ています。
PMIC(nPM1300)の監視制御
PMIC(nPM1300)は、バッテリー電力とType-Cからの充電を制御します。
nRF5340からI2C経由でPMICの制御状況を監視できます。
Li-ionバッテリー(3.7V)
Li-ionバッテリー(3.7V)に関しては、Amazonの購入できる市販のものを利用しています。
温度サーミスタ付きの3ピンのものを選んでいます。
サンプルプログラム
以下のnRF Connect SDKサンプルを参考に設定を作成しています
https://github.com/nrfconnect/sdk-nrf/tree/main/samples/pmic/native/npm1300_fuel_gauge
PMIC(nPM1300)を設定するため、Device Tree(.dtsi)、CMakeLists.txt、prj.confファイルを修正します。
実際に修正したファイルに関しては、下記でまとめています。詳細は下記を参考ください。
主にメインに弄ったデバイスツリー周辺は下記です。
\zephyr\boards\nordic\nrf5340_audio_dk\nrf5340_audio_dk_nrf5340_cpuapp_common-pinctrl.dtsi
1 2 3 4 5 6 7 8 9 |
i2c1_default: i2c1_default { group1 { // add bias-pull-up; psels = <NRF_PSEL(TWIM_SDA, 1, 2)>, <NRF_PSEL(TWIM_SCL, 1, 3)>; }; }; |
zephyr\boards\nordic\nrf5340_audio_dk\nrf5340_audio_dk_nrf5340_cpuapp_common.dtsi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
arduino_i2c: &i2c1 { compatible = "nordic,nrf-twim"; status = "okay"; pinctrl-0 = <&i2c1_default>; pinctrl-1 = <&i2c1_sleep>; pinctrl-names = "default", "sleep"; // add npm1300_ek_pmic: pmic@6b { compatible = "nordic,npm1300"; reg = <0x6b>; npm1300_ek_gpio: gpio-controller { compatible = "nordic,npm1300-gpio"; gpio-controller; #gpio-cells = <2>; ngpios = <5>; }; npm1300_ek_regulators: regulators { compatible = "nordic,npm1300-regulator"; /* limits are set to min/max allowed values */ npm1300_ek_buck1: BUCK1 { regulator-min-microvolt = <1000000>; regulator-max-microvolt = <3300000>; }; npm1300_ek_buck2: BUCK2 { regulator-min-microvolt = <1000000>; regulator-max-microvolt = <3300000>; }; npm1300_ek_ldo1: LDO1 { regulator-min-microvolt = <1000000>; regulator-max-microvolt = <3300000>; }; npm1300_ek_ldo2: LDO2 { regulator-min-microvolt = <1000000>; regulator-max-microvolt = <3300000>; }; }; npm1300_ek_charger: charger { compatible = "nordic,npm1300-charger"; term-microvolt = <4150000>; term-warm-microvolt = <4000000>; current-microamp = <150000>; dischg-limit-microamp = <1000000>; vbus-limit-microamp = <500000>; thermistor-ohms = <10000>; thermistor-beta = <3380>; charging-enable; }; npm1300_ek_buttons: buttons { compatible = "gpio-keys"; pmic_button0: pmic_button_0 { gpios = < &npm1300_ek_gpio 0 GPIO_ACTIVE_HIGH>; label = "Pmic button switch 0"; zephyr,code = <INPUT_KEY_0>; }; }; npm1300_ek_leds: leds { compatible = "nordic,npm1300-led"; nordic,led0-mode = "error"; nordic,led1-mode = "charging"; nordic,led2-mode = "host"; }; }; }; // add &npm1300_ek_pmic { host-int-gpios = <&gpio1 11 0>; pmic-int-pin = <3>; }; |
PMICの電源テスト
実際の電源テストではTypeCとバッテリを切り替えて確認しました。
下記あたりの値をPMICから情報を取得しています。
- バッテリー電圧(V)
- 電流(I)
- 電流値が「-」の場合:バッテリー充電中
- 電流値が「+」の場合:バッテリー消費中
- 温度(T)
デモ動画は下記となります。
実際に電圧・電流・温度が管理・監視できていることが分かります。
まとめ
NordicのPMIC(Power Management IC)であるnPM1300を使って、基板開発してみました。
複数電源を出力するだけでなく、バッテリ含めた電源管理まで対応しています。
SOCからPMICにI2Cで情報取得するまでの内容を紹介しました。
今回の記事はBluetooth LE Audioコンペに参加していた内容の一環です。
BLE Audio Design Challengeというコンテストです。下記でまとめ記事を紹介しています。
BLE Audio Design Challengeの実装コンペに参加した件

コメント