ina3221

crates.io

Embedded driver for the INA3221 triple-channel power monitor in Rust.

The INA3221 is very similar to the classic INA219 power monitor IC.

NOTE: This driver is a work in progress and does not support all the INA3221 configuration options yet.

Compatibility

Any board that supports embedded-hal blocking 1.0 I2c should be compatible with this library.

NOTE: Some HALs require feature flagging to enable 1.0 functionality, for example esp-hal requires the eh1 feature.

Installation

You can add via crates.io:

$ cargo add ina3221

NOTE: Some HALs require feature flagging to enable 1.0 functionality, for example esp-hal requires the eh1 feature.

Example

This example assumes a 0.1 Ohm shunt resistor for current and power calculations.

```rust const INA3221I2CADDR: u8 = 0x40; const SHUNT_RESISTANCE: f32 = 0.1f32; // 0.1 Ohm

use ina3221::INA3221;

fn main() { let i2c = I2C::new(/* initialize your I2C here */); let ina = INA3221::new(i2c, INA3221I2CADDR);

let mut delay = Delay::new(/* initialize your delay/clocks */);

loop {
    for channel in 0..3 {
        let shunt_voltage = ina.get_shunt_voltage(channel).unwrap();
        let bus_voltage = ina.get_bus_voltage(channel).unwrap();
        let load_voltage = bus_voltage.add(&shunt_voltage);

        // Skip channel if no voltage present
        if shunt_mv.is_zero() {
            continue;
        }

        // Use Ohm's Law to calculate current and power with known resistance
        let current_milliamps = shunt_voltage.to_millivolts() / SHUNT_RESISTANCE;
        let power_milliwatts = current_milliamps * load_voltage.to_volts();

        println!(
            "Channel {}: load = {:.3} V, current = {:.3} mA, power = {:.3} mW",
            channel_index + 1,
            load_volts.to_volts(),
            current_milliamps,
            power_milliwatts,
        );
    }

    delay.delay_ms(1000u32);
}

} ```

Output

This is sample output powering an Arduino Uno R3 over USB, running the blinky script.

text Channel 1: load = 5.212 V, current = 36.800 mA, power = 191.790 mW Channel 1: load = 5.211 V, current = 33.600 mA, power = 175.102 mW Channel 1: load = 5.212 V, current = 36.800 mA, power = 191.790 mW Channel 1: load = 5.219 V, current = 34.000 mA, power = 177.460 mW Channel 1: load = 5.212 V, current = 36.800 mA, power = 191.790 mW Channel 1: load = 5.211 V, current = 34.000 mA, power = 177.188 mW Channel 1: load = 5.211 V, current = 34.000 mA, power = 177.188 mW Channel 1: load = 5.212 V, current = 36.400 mA, power = 189.704 mW Channel 1: load = 5.211 V, current = 34.000 mA, power = 177.188 mW Channel 1: load = 5.212 V, current = 36.800 mA, power = 191.790 mW Channel 1: load = 5.211 V, current = 34.000 mA, power = 177.188 mW