Seeed Studio XIAO nRF52840で、裏面のBATパッドに接続したLiPoバッテリーの電圧を計測する方法を調査した。
方法
バッテリー電圧(VBAT)は nRF52840 の P0.31(AIN7)に接続されている。ただし、下図のように1MΩと510kΩで分圧されており、P0.14 をLOWにしたときに計測可能になる。
サンプルスケッチ 1 (ボード設定: Seeed nRF52 Boards)
ボードの設定は Seeed nRF52 Boards を選択する。
シリアルポートにバッテリー電圧値をmV単位で出力する。
#include <Adafruit_TinyUSB.h> // for Serial // PIN_VBAT 32 D32 = P0.31 (AIN7_BAT) // VBAT_ENABLE 14 D14 = P0.14 (READ_BAT) #define HICHG 22 // D22 = P0.13 (BQ25100 ISET) void setup() { Serial.begin(115200); while ( !Serial ) delay(10); pinMode(HICHG, OUTPUT); digitalWrite(HICHG, HIGH); // Low Charging Current //digitalWrite(HICHG, LOW); // High Charging Current analogReference(AR_INTERNAL_2_4); // VREF = 2.4V analogReadResolution(10); // 10bit A/D pinMode(VBAT_ENABLE, OUTPUT); digitalWrite(VBAT_ENABLE, LOW); } void loop() { int vbat_raw = analogRead(PIN_VBAT); int vbat_mv = vbat_raw * 2400 / 1023; // VREF = 2.4V, 10bit A/D vbat_mv = vbat_mv * 1510 / 510; // 1M + 510k / 510k Serial.println(vbat_mv); delay(1000); }
サンプルスケッチ 2 (ボード設定: Seeed nRF52 mbed-enabled Boards)
ボードの設定は Seeed nRF52 mbed-enabled Boards を選択する。
1と同様に、シリアルポートにバッテリー電圧値をmV単位で出力する。
// PIN_VBAT 32 = P0.31 (AIN7_BAT) // P0.14 READ_BAT // P0.13 BQ25100 ISET void setup() { Serial.begin(115200); while ( !Serial ) delay(10); pinMode(P0_13, OUTPUT); digitalWrite(P0_13, HIGH); // Low Charging Current //digitalWrite(P0_13, LOW); // High Charging Current analogReference(AR_INTERNAL2V4); analogReadResolution(10); pinMode(P0_14, OUTPUT); digitalWrite(P0_14, LOW); } void loop() { int vbat_raw = analogRead(PIN_VBAT); int vbat_mv = vbat_raw * 2400 / 1023; // VREF = 2.4V, 10bit A/D vbat_mv = vbat_mv * 1510 / 510; // 1M + 510k / 510k Serial.println(vbat_mv); delay(1000); }
Seeed Studio XIAO nRF52840 の回路図について
Seeed Studio XIAO nRF52840 はオープンソースハードウェアではないらしく、回路図は公開されていない。
しかし、Seeed Wiki の古いページがまだ残っており、そちらから回路図をダウンロードできる。ただし、現在の製品と全く同じであるかどうかは不明。
最新版のページからは回路図が消えている。