Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mongoose-os-libs/ina3221-i2c
I2C Library for Texas Instruments' 3-channel current sensor INA3221
https://github.com/mongoose-os-libs/ina3221-i2c
Last synced: 3 months ago
JSON representation
I2C Library for Texas Instruments' 3-channel current sensor INA3221
- Host: GitHub
- URL: https://github.com/mongoose-os-libs/ina3221-i2c
- Owner: mongoose-os-libs
- License: apache-2.0
- Created: 2019-01-01T16:25:21.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2021-12-15T00:17:35.000Z (about 3 years ago)
- Last Synced: 2024-07-31T21:52:50.119Z (6 months ago)
- Language: C
- Homepage:
- Size: 962 KB
- Stars: 4
- Watchers: 5
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
- awesome-mongoose-os - ina3221-i2c - I2C Library for Texas Instruments' 3-channel current sensor INA3221 (Awesome Mongoose OS [![Awesome](https://awesome.re/badge.svg)](https://awesome.re) / Official Libraries)
README
# INA3221 I2C Driver
A Mongoose library for Texas Instruments' 3-channel current sensor.
## Implementation details
The `INA3221` is a simple I2C device that measures current through shunt
resistors on three separate channels. It is able to measure the voltage
on each channel (max 26V, in 8mV increments) and the voltage drop over the
shunt resistor in 40uV increments with a range of 163.8mV, and is quite
precise.Using a 0.1Ohm shunt resistor, the maximum current that can be measured
is 1.638A. Each channel can be enabled/disabled and polled individually.## API Description
Create an `INA3221` object using `mgos_ina3221_create()`, set the shunt
resistor values for each channel using `mgos_ina3221_set_shunt_resistance()`,
then call `mgos_ina3221_get_bus_voltage()` to get the bus voltage,
call `mgos_ina3221_get_shunt_voltage()` to get the voltage drop over
the shunt resistor, and `mgos_ina3221_get_current()` to get the current
flowing through the channel.Valid channels are `1`, `2` or `3` (ie. they are 1-based).
## Example application
```
#include "mgos.h"
#include "mgos_config.h"
#include "mgos_ina3221.h"static void ina3221_timer_cb(void *user_data) {
struct mgos_ina3221 *sensor = (struct mgos_ina3221 *)user_data;if (!sensor) return;
for (uint8_t i=1; i<4; i++) {
float bus, shunt, current, res;
mgos_ina3221_get_bus_voltage(sensor, i, &bus);
mgos_ina3221_get_shunt_resistance(sensor, i, &res);
mgos_ina3221_get_shunt_voltage(sensor, i, &shunt);
mgos_ina3221_get_current(sensor, i, ¤t);
LOG(LL_INFO, ("Chan[%u]: Vbus=%.3f V Vshunt=%.0f uV Rshunt=%.3f Ohm Ishunt=%.1f mA",
i, bus, shunt*1e6, res, current*1e3));
}
}enum mgos_app_init_result mgos_app_init(void) {
struct mgos_ina3221 *sensor;sensor = mgos_ina3221_create(mgos_i2c_get_global(), mgos_sys_config_get_ina3221_i2caddr());
if (!sensor) {
LOG(LL_ERROR, ("Could not create INA3221 sensor"));
return false;
}mgos_set_timer(1000, true, ina3221_timer_cb, sensor);
return MGOS_APP_INIT_SUCCESS;
}
```# Disclaimer
This project is not an official Google project. It is not supported by Google
and Google specifically disclaims all warranties as to its quality,
merchantability, or fitness for a particular purpose.