The INA228 is a high-precision, low-power current shunt monitor designed to measure small voltage drops across a shunt resistor. It features a wide common-mode voltage range (up to 85V) and provides a digital output proportional to the current flowing through the shunt. This makes it an excellent choice for applications requiring accurate current, voltage, and power monitoring.
Parameter | Value |
---|---|
Supply Voltage (VCC) | 2.7V to 5.5V |
Common-Mode Voltage Range | -0.3V to +85V |
Input Offset Voltage | ±10 µV (typical) |
Current Measurement Range | Configurable via external shunt resistor |
Communication Interface | I²C or SMBus |
Resolution | 20-bit |
Operating Temperature Range | -40°C to +125°C |
Power Consumption | 300 µA (typical) |
The INA228 is typically available in a 10-pin WSON package. Below is the pinout and description:
Pin Number | Pin Name | Description |
---|---|---|
1 | VIN+ | Positive input for shunt voltage measurement |
2 | VIN- | Negative input for shunt voltage measurement |
3 | GND | Ground connection |
4 | SCL | I²C clock line |
5 | SDA | I²C data line |
6 | ALERT | Alert output for over-limit conditions |
7 | VCC | Power supply input (2.7V to 5.5V) |
8 | ADDR | Address selection for I²C communication |
9 | NC | No connection (leave floating) |
10 | NC | No connection (leave floating) |
Below is an example of how to interface the INA228 with an Arduino UNO using the I²C protocol:
#include <Wire.h>
// INA228 I2C address (default is 0x40, but check your configuration)
#define INA228_ADDRESS 0x40
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Configure INA228 (example: set calibration register)
Wire.beginTransmission(INA228_ADDRESS);
Wire.write(0x05); // Calibration register address
Wire.write(0x00); // High byte of calibration value
Wire.write(0x10); // Low byte of calibration value
Wire.endTransmission();
Serial.println("INA228 initialized.");
}
void loop() {
// Request shunt voltage measurement
Wire.beginTransmission(INA228_ADDRESS);
Wire.write(0x01); // Shunt voltage register address
Wire.endTransmission();
Wire.requestFrom(INA228_ADDRESS, 2); // Request 2 bytes of data
if (Wire.available() == 2) {
int16_t shuntVoltage = (Wire.read() << 8) | Wire.read();
float voltage = shuntVoltage * 0.00000125; // Convert to volts (example scaling)
Serial.print("Shunt Voltage: ");
Serial.print(voltage, 6);
Serial.println(" V");
}
delay(1000); // Wait 1 second before the next reading
}
No I²C Communication:
Incorrect Measurements:
Alert Pin Not Functioning: