-
Notifications
You must be signed in to change notification settings - Fork 41
Home
Arduino library to access multiple INA2xx High-Side/Low-Side Bi-Directional I2C Current and Power Monitors. Texas Instruments produces this family of power monitors and the library supports the following devices:
Device | Max V | Package | Shunt mV | Description | Tested |
---|---|---|---|---|---|
INA219 (datasheet) | 26V | SOT-23 8p | ±40,±80,±160,±320mV | Yes | |
INA220 (datasheet) | 26V | VSSOP 10p | ±40,±80,±160,±320mV | identical to INA219 | INA219 |
INA220-Q1 (datasheet) | 26V | VSSOP 10p | ±40,±80,±160,±320mV | Identical to INA219 | INA219 |
INA226 (datasheet) | 36V | VSSOP 10p | ±81.92mV | Yes | |
INA230 (datasheet) | 28V | QFN 16p | ±81.92mV | Identical to INA226 | INA226 |
INA231 (datasheet) | 28V | DSBGA-12 | ±81.92mV | Identical to INA226 | INA226 |
INA260 (datasheet) | 36V | TSSOP 16p | n.a. | 2 mΩ shunt, ±15A | Yes |
INA3221 (datasheet) | 26V | VQFN(16) | ±163.8mV | 3 concurrent circuits | Yes |
The packages are small and a lot of work to solder, but fortunately there are now several sources for breakout boards for the various devices which are worth it in time savings. My first test with a INA226 involved a blank breakout board, some solder paste, a frying pan, desoldering braid, a magnifying glass and quite a bit of time to set up the first breadboard.
The library locates all INA2xx devices on the I2C chain. Each device detected can be individually configured with 2 setup parameters describing the expected maximum amperage and the shunt/resistor values. Since the INA2xx devices only measure bus and shunt voltages, these two Parameters allow the device's internal configuration to be set so that computed amperage and watts can also be retrieved.
These wiki pages describe the library calls and usage of the example programs.
Since the Arduino microprocessors do not have built-in floating point, any use of Floating point variables will require Software Emulation which is rather slow and increases program size significantly. Therefore great lengths have been taken to avoid the use of floating point in the library. To keep the original level of precision without loss but to allow the full range of voltages and amperes to be returned the amperage results are returned as 32-bit integers.
Since the functionality differs between the supported devices there are some functions which will only work for certain devices.
Overview
Installation
Class Instantiation
begin()
setI2CSpeed()
getBusMilliVolts()
getBusRaw()
getShuntMicroVolts()
getShuntRaw()
getBusMicroAmps()
getBusMicroWatts()
getDeviceAddress()
getDeviceName()
setMode()
setAveraging()
setBusConversion()
setShuntConversion()
reset()
waitForConversion()
conversionFinished()
alertOnConversion()
alertOnShuntOverVoltage()
alertOnShuntUnderVoltage()
alertOnBusOverVoltage()
alertOnBusUnderVoltage()
alertOnPowerOverLimit()