zephyr/samples/boards/nrf/battery
Gerard Marull-Paretas 79e6b0e0f6 includes: prefer <zephyr/kernel.h> over <zephyr/zephyr.h>
As of today <zephyr/zephyr.h> is 100% equivalent to <zephyr/kernel.h>.
This patch proposes to then include <zephyr/kernel.h> instead of
<zephyr/zephyr.h> since it is more clear that you are including the
Kernel APIs and (probably) nothing else. <zephyr/zephyr.h> sounds like a
catch-all header that may be confusing. Most applications need to
include a bunch of other things to compile, e.g. driver headers or
subsystem headers like BT, logging, etc.

The idea of a catch-all header in Zephyr is probably not feasible
anyway. Reason is that Zephyr is not a library, like it could be for
example `libpython`. Zephyr provides many utilities nowadays: a kernel,
drivers, subsystems, etc and things will likely grow. A catch-all header
would be massive, difficult to keep up-to-date. It is also likely that
an application will only build a small subset. Note that subsystem-level
headers may use a catch-all approach to make things easier, though.

NOTE: This patch is **NOT** removing the header, just removing its usage
in-tree. I'd advocate for its deprecation (add a #warning on it), but I
understand many people will have concerns.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2022-09-05 16:31:47 +02:00
..
src includes: prefer <zephyr/kernel.h> over <zephyr/zephyr.h> 2022-09-05 16:31:47 +02:00
CMakeLists.txt
prj.conf
README.rst
sample.yaml

.. _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. An
  example of a devicetree node describing a voltage divider for battery
  monitoring is:

   .. code-block:: devicetree

      / {
         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
  the ``zephyr,user`` node. In this case 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 configuration for this case is
  shown below:

   .. code-block :: devicetree

      / {
         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 :zephyr_file:`samples/boards/nrf/battery`.

.. zephyr-app-commands::
   :zephyr-app: samples/boards/nrf/battery
   :board: thingy52_nrf52832
   :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