samples: sensor: added sample app for INA219

This adds an example application for the TI INA219 Zero-Drift,
Bidirectional Current/Power Monitor with I2C Interface

Signed-off-by: Leonard Pollak <leonardp@tr-host.de>
This commit is contained in:
Leonard Pollak 2021-05-21 21:41:41 +02:00 committed by Maureen Helm
commit e8d34bdcdf
6 changed files with 140 additions and 0 deletions

View file

@ -0,0 +1,8 @@
# SPDX-License-Identifier: Apache-2.0
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(ina219)
FILE(GLOB app_sources src/*.c)
target_sources(app PRIVATE ${app_sources})

View file

@ -0,0 +1,46 @@
.. _ina219:
INA219 Bidirectional Power/Current Monitor
##########################################
Overview
********
This sample application measures shunt voltage, bus voltage, power and current
every 2 seconds and prints them to console.
The calibration/configuration parameters can be set in the devicetree file.
References
**********
- `INA219 sensor <https://www.ti.com/product/INA219>`_
Wiring
******
The supply voltage of the INA219 can be in the 3V to 5.5V range.
The common mode voltage of the measured bus can be in the 0V to 26V range.
Building and Running
********************
.. zephyr-app-commands::
:zephyr-app: samples/sensor/ina219
:board: blackpill_f411ce
:goals: build flash
Sample Output
=============
When monitoring a 3.3 V bus with a 0.1 Ohm shunt restistor
you should get a similar output as below, repeated every 2 seconds:
.. code-block:: console
Shunt: 0.001570 [V] -- Bus: 3.224000 [V] -- Power: 0.504000 [W] -- Current: 0.157000 [A]
A negative sign indicates current flowing in reverse direction:
.. code-block:: console
Shunt: -0.001560 [V] -- Bus: 3.224000 [V] -- Power: 0.502000 [W] -- Current: -0.156000 [A]

View file

@ -0,0 +1,25 @@
/*
* Copyright (c) 2021 Leonard Pollak
*
* SPDX-License-Identifier: Apache-2.0
*/
&i2c1 {
status = "okay";
compatible = "st,stm32-i2c-v1";
clock-frequency = <I2C_BITRATE_FAST>;
label = "I2C_0";
ina219@40 {
status = "okay";
compatible = "ti,ina219";
reg = <0x40>;
label = "INA219";
brng = <0>;
pg = <0>;
sadc = <13>;
badc = <13>;
shunt-milliohm = <100>;
lsb-microamp = <10>;
};
};

View file

@ -0,0 +1,5 @@
CONFIG_STDOUT_CONSOLE=y
CONFIG_CBPRINTF_FP_SUPPORT=y
CONFIG_I2C=y
CONFIG_SENSOR=y
CONFIG_INA219=y

View file

@ -0,0 +1,14 @@
#
# Copyright (c) 2021 Leonard Pollak
#
# SPDX-License-Identifier: Apache-2.0
sample:
name: TI INA219 power/current monitor
description: Demonstration of the INA219 I2C power/current monitor
tests:
sample.drivers.ina219:
build_only: true
platform_allow: blackpill_f411ce
tags: sensors

View file

@ -0,0 +1,42 @@
/*
* Copyright (c) 2021 Leonard Pollak
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr.h>
#include <stdio.h>
#include <drivers/sensor.h>
void main(void)
{
const struct device *ina = DEVICE_DT_GET_ONE(ti_ina219);
struct sensor_value v_bus, power, current;
int rc;
if (!device_is_ready(ina)) {
printf("Device %s is not ready.\n", ina->name);
return;
}
while (true) {
rc = sensor_sample_fetch(ina);
if (rc) {
printf("Could not fetch sensor data.\n");
return;
}
sensor_channel_get(ina, SENSOR_CHAN_VOLTAGE, &v_bus);
sensor_channel_get(ina, SENSOR_CHAN_POWER, &power);
sensor_channel_get(ina, SENSOR_CHAN_CURRENT, &current);
printf("Bus: %f [V] -- "
"Power: %f [W] -- "
"Current: %f [A]\n",
sensor_value_to_double(&v_bus),
sensor_value_to_double(&power),
sensor_value_to_double(&current));
k_sleep(K_MSEC(2000));
}
}