samples: nrf: battery: add documentation

Provide a description of the sample and how it works with different
power supply source configurations.

Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
This commit is contained in:
Peter Bigot 2020-03-13 08:22:24 -05:00 committed by Carles Cufí
commit cc3ccef40d
2 changed files with 87 additions and 4 deletions

View file

@ -0,0 +1,81 @@
.. _boards_nrf_battery:
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:
.. code-block:: none
/ {
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 :zephyr_file:`samples/boards/nrf/battery`.
.. zephyr-app-commands::
:zephyr-app: samples/boards/nrf/battery
:board: nrf52_pca20020
:goals: build flash
:compact:
Sample Output
=============
.. code-block:: console
*** 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

View file

@ -57,13 +57,10 @@ struct divider_config {
};
static const struct divider_config divider_config = {
#if DT_HAS_NODE(VBATT)
.io_channel = {
#if DT_NODE_HAS_PROP(VBATT, io_channels)
DT_IO_CHANNELS_LABEL(VBATT),
DT_IO_CHANNELS_INPUT(VBATT),
#else
DT_LABEL(DT_ALIAS(adc_0)),
#endif
},
#if DT_NODE_HAS_PROP(VBATT, power_gpios)
.power_gpios = {
@ -74,6 +71,11 @@ static const struct divider_config divider_config = {
#endif
.output_ohm = DT_PROP(VBATT, output_ohms),
.full_ohm = DT_PROP(VBATT, full_ohms),
#else /* /vbatt exists */
.io_channel = {
DT_LABEL(DT_ALIAS(adc_0)),
},
#endif /* /vbatt exists */
};
struct divider_data {