This is the documentation for the latest (main) development branch of Zephyr. If you are looking for the documentation of previous releases, use the drop-down menu on the left and select the desired version.

Battery Voltage Measurement

Overview

This sample demonstrates using Nordic configurations of the Zephyr ADC infrastructure to measure the voltage of the device power supply. Two power supply configurations are supported:

  • If the board devicetree has a /vbatt node with compatible voltage-divider then the voltage is measured using that divider.

  • Otherwise the power source is assumed to be directly connected to the digital voltage signal, and the internal source for Vdd is selected.

An example of a devicetree node describing a voltage divider for battery monitoring is:

/ {
     vbatt {
             compatible = "voltage-divider";
             io-channels = <&adc 4>;
             output-ohms = <180000>;
             full-ohms = <(1500000 + 180000)>;
             power-gpios = <&sx1509b 4 0>;
     };
};

Note that in many cases where there is no voltage divider the digital voltage will be fed from a regulator that provides a fixed voltage regardless of source voltage, rather than by the source directly. In configuration involving a regulator the measured voltage will be constant.

The sample provides discharge curves that map from a measured voltage to an estimate of remaining capacity. The correct curve depends on the battery source: a standard LiPo cell requires a curve that is different from a standard alkaline battery. Curves can be measured, or estimated using the data sheet for the battery.

Application Details

The application initializes battery measurement on startup, then loops displaying the battery status every five seconds.

Requirements

A Nordic-based board, optionally with a voltage divider specified in its devicetree configuration as noted above.

Building and Running

The code can be found in samples/boards/nrf/battery.

west build -b nrf52_pca20020 samples/boards/nrf/battery
west flash

Sample Output

*** Booting Zephyr OS build zephyr-v2.2.0-318-g84219bdc1ac2  ***
[0:00:00.016]: 4078 mV; 10000 pptt
[0:00:04.999]: 4078 mV; 10000 pptt
[0:00:09.970]: 4078 mV; 10000 pptt
[0:00:14.939]: 4069 mV; 10000 pptt
[0:00:19.910]: 4078 mV; 10000 pptt
[0:00:24.880]: 4069 mV; 10000 pptt