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 compatiblevoltage-divider
then the voltage is measured using that divider. 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>; }; };
If the board does not have a voltage divider and so no
/vbatt
node present, the ADC configuration (device and channel) needs to be provided via thezephyr,user
node. In this case the power source is assumed to be directly connected to the digital voltage signal, and the internal source forVdd
is selected. An example of a Devicetree configuration for this case is shown below:/ { zephyr,user { io-channels = <&adc 4>; }; };
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 thingy52_nrf52832 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