

The INA226 is a high-side current shunt monitor designed to measure the voltage across a shunt resistor to determine the current flowing through it. It integrates a precision ADC (Analog-to-Digital Converter) and communicates via an I2C interface, making it highly versatile for power monitoring and management applications. The INA226 supports a wide supply voltage range and provides accurate measurements of both current and bus voltage, enabling real-time power calculations.








| Parameter | Value |
|---|---|
| Supply Voltage (Vcc) | 2.7V to 5.5V |
| Input Voltage Range | 0V to 36V |
| Current Measurement Range | Determined by external shunt resistor |
| Bus Voltage Measurement | 0V to 36V |
| Communication Interface | I2C (up to 400 kHz) |
| ADC Resolution | 16-bit |
| Operating Temperature | -40°C to +125°C |
| Power Consumption | 310 µA (typical) |
| Pin Name | Pin Number | Description |
|---|---|---|
| V+ | 1 | Positive input for high-side shunt voltage |
| V- | 2 | Negative input for high-side shunt voltage |
| GND | 3 | Ground |
| SDA | 4 | I2C data line |
| SCL | 5 | I2C clock line |
| ALERT | 6 | Alert output for programmable thresholds |
| VCC | 7 | Power supply input (2.7V to 5.5V) |
| ADDR | 8 | I2C address configuration pin |
Below is an example of how to interface the INA226 with an Arduino UNO to measure current and voltage:
#include <Wire.h>
// INA226 I2C address (default: 0x40)
#define INA226_ADDRESS 0x40
// INA226 register addresses
#define REG_CONFIG 0x00
#define REG_SHUNT_VOLTAGE 0x01
#define REG_BUS_VOLTAGE 0x02
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Configure the INA226 (default configuration)
Wire.beginTransmission(INA226_ADDRESS);
Wire.write(REG_CONFIG); // Point to the configuration register
Wire.write(0x45); // MSB of configuration (example value)
Wire.write(0x27); // LSB of configuration (example value)
Wire.endTransmission();
}
void loop() {
// Read bus voltage
Wire.beginTransmission(INA226_ADDRESS);
Wire.write(REG_BUS_VOLTAGE); // Point to the bus voltage register
Wire.endTransmission();
Wire.requestFrom(INA226_ADDRESS, 2); // Request 2 bytes
uint16_t busVoltage = (Wire.read() << 8) | Wire.read();
// Read shunt voltage
Wire.beginTransmission(INA226_ADDRESS);
Wire.write(REG_SHUNT_VOLTAGE); // Point to the shunt voltage register
Wire.endTransmission();
Wire.requestFrom(INA226_ADDRESS, 2); // Request 2 bytes
uint16_t shuntVoltage = (Wire.read() << 8) | Wire.read();
// Convert readings to meaningful values
float busVoltage_V = busVoltage * 1.25 / 1000; // Convert to volts
float shuntVoltage_mV = shuntVoltage * 2.5 / 1000; // Convert to millivolts
// Print results
Serial.print("Bus Voltage: ");
Serial.print(busVoltage_V);
Serial.println(" V");
Serial.print("Shunt Voltage: ");
Serial.print(shuntVoltage_mV);
Serial.println(" mV");
delay(1000); // Wait 1 second before the next reading
}
No I2C Communication:
Incorrect Current or Voltage Readings:
Alert Pin Not Functioning:
By following this documentation, you can effectively integrate the INA226 into your project for precise current, voltage, and power monitoring.