Mesure de tension et de courant avec un module INA3221

5
(1)

Le composant INA3221 est un circuit intégré de mesure de courant et de tension fabriqué par Texas Instruments. Il est principalement utilisé pour surveiller le courant et la tension dans des systèmes électroniques.

Dans cet article je vais détailler son principe et donner pour exemple la surveillance de la charge d’une batterie par un panneau solaire.

Principe du circuit intégré INA3221

Le principe de fonctionnement du composant INA3221 repose sur la mesure du courant au moyen d’une résistance de shunt, qui est une résistance de très faible valeur placée en série avec la charge. Le composant amplifie puis mesure la tension aux bornes de cette résistance. Il détermine ensuite la valeur du courant en divisant la tension mesurée par la valeur connue de cette résistance de shunt.

Imaginons que nous souhaitions mesurer le courant qui circule dans la résistance R (la charge utile) dans le schéma ci-dessous.

calcul-capacité-pile

Nous allons introduire une résistance de shunt dans ce circuit afin de mesurer ce courant. En effet, le courant qui circule dans la charge utile (résistance R) est le même que celui qui circule dans la résistance de shunt (Rshunt). La mesure de la tension aux bornes de la résistance de shunt (Vshunt = VIN+ – VIN-) permet d’en déduire ce courant, en appliquant la loi d‘Ohm (voir les bases de l’électronique).

I = Vshunt / Rshunt

Notez que le composant IN3221 mesure à la fois la tension aux bornes de la résistance de shunt (Vshunt), mais aussi la tension aux bornes de la charge utile (Vbus).

Module INA3221 triple canal

Pour réaliser ce tutoriel, j’ai utilisé un module INA3221 à trois canaux, capable de mesurer le courant et la tension sur trois voies distinctes.

Ce module INA3221 intègre une résistance de shunt R100 (dont la valeur est 0.1 Ω) pour chaque canal.

Pour mesurer le courant qui circule dans la résistance R, nous allons utiliser le premier canal (CH1) de l’INA3221. Pour cela il suffit de connecter :

  • La broche VIN1+ à l’alimentation (côté positif, avant la résistance de shunt).
  • La broche VIN1- à la charge (côté positif, après la résistance de shunt).
  • La broche GND à la masse du système (côté négatif de l’alimentation et de la charge utile).

Alimentation du module et communication I2C avec l’Arduino

L’alimentation du module se fait via ses broches GND et VS, avec une tension comprise entre 2.7 V et 5.5 V.

Le module communique avec l’Arduino via un bus I2C. Il suffit donc de relier les broches SCL et SDA du module à celles de l’Arduino.

Par défaut, le module est configuré avec l’adresse I2C égale à 0x40. Mais il est possible de configurer l’adresse I2C du module en faisant un pont de soudure entre la borne A0 et l’une des broches suivantes :

Exemple de croquis pour Arduino

Voici l’exemple de croquis fourni avec la librairie Adafruit INA3221 qui permet d’afficher la tension et le courant sur les 3 canaux.

Attention, il est nécessaire de modifier la valeur de la résistance de shunt en fonction de votre module. Le module INA3221 d’Adafruit est équipé de résistance de shunt de 0.5 Ω alors que notre module est équipé de résistance de shunt de 0.1 Ω.

C++
// Mesure de tension et courant avec module INA3221
// https://tutoduino.fr/
// Copyleft 2025
#include "Adafruit_INA3221.h"
#include <Wire.h>
#define SHUNT_RESISTANCE 0.1
#define CH1 0
#define CH2 1
#define CH3 2

// Create an INA3221 object
Adafruit_INA3221 ina3221;
void setup() {
  Serial.begin(115200);
  while (!Serial)
    delay(10);  // Wait for serial port to connect on some boards
  Serial.println("Adafruit INA3221 simple test");
  // Initialize the INA3221
  if (!ina3221.begin(0x40, &Wire)) {  // can use other I2C addresses or buses
    Serial.println("Failed to find INA3221 chip");
      delay(10);
  }
  Serial.println("INA3221 Found!");
  ina3221.setAveragingMode(INA3221_AVG_4_SAMPLES);
  // Set shunt resistances for all channels
  for (uint8_t i = 0; i < 3; i++) {
    ina3221.setShuntResistance(i, SHUNT_RESISTANCE);
  }
}
void loop() {
  // Display voltage and current for channel 1
  float bus_voltage1 = ina3221.getBusVoltage(CH1);
  float current1 = ina3221.getCurrentAmps(CH1) * 1000;  // Convert to mA
  Serial.print("CH1 Battery :     Bus voltage = ");
  Serial.print(bus_voltage1, 2);
  Serial.print(" V, Current = ");
  Serial.print(current1, 2);
  Serial.println(" mA");  

  // Display voltage and current for channel 2
  float bus_voltage2 = ina3221.getBusVoltage(CH2);
  float current2 = ina3221.getCurrentAmps(CH2) * 1000;  // Convert to mA
  Serial.print("CH2 Solar panel : Bus voltage = ");
  Serial.print(bus_voltage2, 2);
  Serial.print(" V, Current = ");
  Serial.print(current2, 2);
  Serial.println(" mA");
  
   // Display voltage and current for channel 3
  float bus_voltage3 = ina3221.getBusVoltage(CH3);
  float current3 = ina3221.getCurrentAmps(CH3) * 1000;  // Convert to mA
  Serial.print("CH3 Load  :       Bus voltage = ");
  Serial.print(bus_voltage3, 2);
  Serial.print(" V, Current = ");
  Serial.print(current3, 2);
  Serial.println(" mA"); 
  Serial.println(""); 

  // Delay for 1s before the next reading
  delay(1000);
}

Surveillance de la charge d’une batterie par un panneau solaire

Le montage suivant utilise un module CN3791, qui est un contrôleur de charge MPPT (Maximum Power Point Tracking) conçu pour charger des batteries lithium-ion à partir de panneaux solaires.

Le module INA3221 mesure la tension de la batterie sur le premier canal (CH1), permettant de connaître l’état de charge de la batterie. Le second canal (CH2) est utilisé pour mesurer le courant généré par le panneau solaire. Le troisième canal (CH3) est utilisé pour mesurer le courant consommé par la charge utile.

Exemple de mesures

Les mesures suivantes ont été réalisées avec une charge utile consommant environ 90 mA sous 4 V. J’ai effectué plusieurs mesures dans des conditions d’ensoleillement différentes.

Ensoleillement fort :

Dans cet exemple, le panneau génère un courant de 318 mA. Ce courant est suffisant pour alimenter la charge utile en plus de charger la batterie avec un courant de 257 mA.

Plaintext
CH1 Battery     : Bus voltage = 4.05 V, Current = 257.60 mA
CH2 Solar panel : Bus voltage = 5.52 V, Current = 318.40 mA
CH3 Load        : Bus voltage = 4.02 V, Current = 93.50 mA

Ensoleillement faible :

Lorsque le soleil est faible, le panneau génère peu de courant. En cette fin d’après-midi nuageuse il génère un courant de 27 mA. Ce courant est insuffisant pour alimenter la charge utile, la batterie est donc mise à contribution pour l’alimenter. Le courant mesuré au niveau de la batterie est négatif, car elle fournit un courant de 65 mA pour alimenter la charge utile.

Plaintext
CH1 Battery :     Bus voltage = 4.02 V, Current = -65.20 mA
CH2 Solar panel : Bus voltage = 5.23 V, Current = 27.60 mA
CH3 Load  :       Bus voltage = 3.99 V, Current = 94.00 mA

Aucun ensoleillement :

La nuit, le panneau ne génère plus de courant et la charge utile est uniquement alimentée par la batterie.

Plaintext
CH1 Battery :     Bus voltage = 4.01 V, Current = -95.20 mA
CH2 Solar panel : Bus voltage = 3.59 V, Current = -0.40 mA
CH3 Load  :       Bus voltage = 3.98 V, Current = 94.00 mA

How useful was this post?

Click on a star to rate it!

Average rating 5 / 5. Vote count: 1

No votes so far! Be the first to rate this post.

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?