esphome-docs/components/sensor/ina2xx.rst

191 lines
9.0 KiB
ReStructuredText
Raw Normal View History

INA2xx family of digital power monitors
=======================================
.. seo::
:description: Instructions for setting up INA228, INA229, INA237, INA238, INA239 DC current, power, and charge sensors
:image: ina228.jpg
:keywords: ina228 ina229 ina237 ina238 ina239
.. figure:: images/ina228-full.jpg
:align: center
:width: 50.0%
INA228 Module with integrated shunt from Adafruit
Supported devices
-----------------
The ``ina2xx`` sensor platform allows you to use family of Texas Instruments current and power
sensors with ESPHome. Appropriate interface (:ref:`I²C Bus <i2c>` or :ref:`SPI Bus <spi>`) is
requred to be set up in your configuration for this sensor to work.
========================================================== ========== ==========================================================
Product Protocol Description
========================================================== ========== ==========================================================
`INA228 <http://www.ti.com/lit/ds/symlink/ina228.pdf>`__ I²C 85-V, 20-Bit, Ultra-Precise Power/Energy/Charge Monitor
`INA229 <http://www.ti.com/lit/ds/symlink/ina229.pdf>`__ SPI 85-V, 20-Bit, Ultra-Precise Power/Energy/Charge Monitor
`INA238 <http://www.ti.com/lit/ds/symlink/ina238.pdf>`__ I²C 85-V, 16-Bit, High-Precision Power Monitor
`INA239 <http://www.ti.com/lit/ds/symlink/ina239.pdf>`__ SPI 85-V, 16-Bit, High-Precision Power Monitor
`INA237 <http://www.ti.com/lit/ds/symlink/ina237.pdf>`__ I²C 85-V, 16-Bit, Precision Power Monitor
========================================================== ========== ==========================================================
All devices can measure a selectable full-scale differential input of ±163.84 mV
or ±40.96 mV across the shunt with common-mode voltage support from 0.3 V to +85 V.
INA228 and INA229 are the most comprehensive devices of the family with extra features: 20-bit ADC resolution,
energy and charge accumulation, and capability to utilize the temperature measurement to compensate
for shunt resistor temperature variance.
Over I²C
--------
Use ``ina2xx_i2c`` component to connect INA228, INA237, or INA238 device over :ref:`I²C <i2c>` bus.
.. code-block:: yaml
# Example configuration entry for I²C
sensor:
- platform: ina2xx_i2c
id: my_charge_sensor
model: INA228
address: 0x40
shunt_resistance: 0.010 ohm
max_current: 10 A
adc_range: 0
update_interval: 60s
current: "INA228 Current"
bus_voltage: "INA228 Bus Voltage"
charge: "INA228 Charge"
Configuration variables:
************************
- **model** (**Required**, string): The model of the INA2xx sensor. Options are ``INA228``, ``INA237``, ``INA238``.
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x40``.
- **shunt_resistance** (**Required**, float): The value of the shunt resistor used for current calculation. No default value.
- **max_current** (**Required**, float): The maximum current you are expecting. Component will use it to
calibrate the sensor. No default value.
- **adc_range** (*Optional*, ``0`` or ``1``): Selects the range for differential input across shunt
resistor. ``0`` for ±163.84 mV, ``1`` for ±40.96 mV range. Defaults to ``0``.
- **adc_time** (*Optional*, :ref:`config-time`): The time in microseconds to perform a single ADC conversion.
Defaults to ``4120 us``. Valid values are ``50 us``, ``84 us``, ``150 us``, ``280 us``, ``540 us``,
``1052 us``, ``2074 us``, ``4120 us``.
Instead of one time for all ADC measurements, separate configuration of conversion times for shunt voltage,
bus voltage, and temperature measurements possible. Options are the same as for ``adc_time``.
- **bus_voltage** (*Optional*, :ref:`config-time`): Conversion time for bus voltage measurement.
- **shunt_voltage** (*Optional*, :ref:`config-time`): Conversion time for shunt voltage measurement.
- **temperature** (*Optional*, :ref:`config-time`): Conversion time for temperature measurement.
- **adc_averaging** (*Optional*, integer): Selects ADC sample averaging count. Defaults to ``128``.
Valid values are ``1``, ``4``, ``16``, ``64``, ``128``, ``256``, ``512``, ``1024``.
- **temperature_coefficient** (*Optional*, integer from ``0`` to ``16383``): Temperature coefficient (ppm/°C) of the
shunt for temperature compensation correction. Only applicable to INA228 and INA229 devices. Zero value means
no compensation is done. Defaults to ``0``.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``.
- All other options from :ref:`Sensor <config-sensor>` and :ref:`I²C device <i2c>`.
Over SPI
--------
Use ``ina2xx_spi`` component to connect INA229 or INA239 device over :ref:`SPI <spi>` bus.
.. code-block:: yaml
# Example configuration entry for SPI
sensor:
- platform: ina2xx_spi
cs_pin: GPIOXX
model: INA239
shunt_resistance: 0.001130 ohm
max_current: 40 A
adc_range: 0
temperature_coefficient: 50
current: "INA239 Current"
power: "INA239 Power"
Configuration variables:
************************
- **model** (**Required**, string): The model of the INA2xx sensor. Options are ``INA229``, ``INA239``.
- **cs_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The Chip Select (CS) pin.
- **shunt_resistance** (**Required**, float): The value of the shunt resistor used for current calculation. No default value.
- **max_current** (**Required**, float): The maximum current you are expecting. Component will use it to
calibrate the sensor. No default value.
- **adc_range** (*Optional*, ``0`` or ``1``): Selects the range for differential input across shunt
resistor. ``0`` for ±163.84 mV, ``1`` for ±40.96 mV range. Defaults to ``0``.
- **adc_time** (*Optional*, :ref:`config-time`): The time in microseconds to perform a single ADC conversion.
Defaults to ``4120 us``. Valid values are ``50 us``, ``84 us``, ``150 us``, ``280 us``, ``540 us``,
``1052 us``, ``2074 us``, ``4120 us``.
Instead of one time for all ADC measurements, separate configuration of conversion times for shunt voltage,
bus voltage, and temperature measurements possible. Options are the same as for ``adc_time``.
- **bus_voltage** (*Optional*, :ref:`config-time`): Conversion time for bus voltage measurement.
- **shunt_voltage** (*Optional*, :ref:`config-time`): Conversion time for shunt voltage measurement.
- **temperature** (*Optional*, :ref:`config-time`): Conversion time for temperature measurement.
- **adc_averaging** (*Optional*, integer): Selects ADC sample averaging count. Defaults to ``128``.
Valid values are ``1``, ``4``, ``16``, ``64``, ``128``, ``256``, ``512``, ``1024``.
- **temperature_coefficient** (*Optional*, integer from ``0`` to ``16383``): Temperature coefficient (ppm/°C) of the
shunt for temperature compensation correction. Only applicable to INA228 and INA229 devices. Zero value means
no compensation is done. Defaults to ``0``.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``.
- All other options from :ref:`Sensor <config-sensor>` and :ref:`SPI device <spi>`.
Sensors
-------
The component offers nine sensors. You can configure all or any subset of the sensors. Each configured sensor
is reported separately on each update_interval. The ``name`` option is required for each sensor configured;
all other options from :ref:`Sensor <config-sensor>` are also supported. Shorthand notation can be used for the sensors like this:
``current: "Current"``.
- **current** (*Optional*): Calculated current output, A
- **power** (*Optional*): Calculated power output, always positive, W
- **shunt_voltage** (*Optional*): Differential voltage measured across the shunt, mV
- **bus_voltage** (*Optional*): Bus voltage output, V
- **temperature** (*Optional*): Internal die temperature measurement, °C
- **energy** (*Optional*): Calculated energy output, Wh (*INA228/229 only*)
- **energy_joules** (*Optional*): Calculated energy output, Joules (*INA228/229 only*)
- **charge** (*Optional*): Calculated charge output, Ah (*INA228/229 only*)
- **charge_coulombs** (*Optional*): Calculated charge output, Coulombs (*INA228/229 only*)
Lambda calls
------------
The component exposes one function to reset INA228/INA229 energy and charge accumulators.
- ``reset_energy_counters()``
.. code-block:: cpp
// Within lambda, reset counters.
id(my_charge_sensor).reset_energy_counters();
To simplify the use of this function, you can use the following example to add a button to reset the counters.
.. code-block:: yaml
button:
- platform: template
name: "Reset counters"
on_press:
- lambda: "id(my_change_sensor).reset_energy_counters();"
See Also
--------
- :ref:`sensor-filters`
- :doc:`ina219`
- :doc:`ina226`
- :doc:`ina3221`
- :apiref:`ina2xx_base/ina2xx_base.h`
- :ghedit:`Edit`