INA282 Stromsensor

Über den Beitrag

In diesem letzten (ja, tatsächlich!) Beitrag über Stromsensoren werde ich über den INA282 berichten. Der INA282 lässt sich hinsichtlich seiner Eigenschaften folgendermaßen in die Reihe der bisher besprochenen Stromsensoren einordnen:

SensorINA282INA219INA226EigenbauACS712MAX471
Mess-
Prinzip
externer
Shunt
externer
Shunt
externer
Shunt
externer
Shunt
Hall-
Effekt
interner
Shunt
Signal analogdigital
(I2C)
digital
(I2C)
analoganaloganalog
Tabelle 1: Überblick über die bisher besprochenen Stromsensoren

Dabei bedeutet „externer“ Shunt, dass sich der Shunt nicht auf dem IC befindet, wohl aber auf den Modulen.

Wie bei den vorherigen Beiträgen zu diesem Thema werde ich zunächst auf die technischen Eigenschaften des INA282 eingehen. Dann zeige ich, wie ihr ihn mit einem Arduino (UNO) betreibt, eine Kalibrierkurve aufnehmt und schließlich, wie ihr neben dem Strom auch die Leistung messt. Letzteres habe ich zwar schon anhand anderer Module gezeigt, aber jeder Beitrag soll nach Möglichkeit für sich alleine stehen.

Technische Eigenschaften

Ein INA282 Modul
Ein INA282 Modul

Der INA282 bestimmt den Strom, indem er den Spannungsabfall über einem Shunt (niederohmiger Widerstand zum Messen von Strömen) verstärkt und am Pin OUT ausgibt. Dazu nutzt er einen Verstärkungsfaktor von 50 V/V. Der INA282 hat aber auch noch ein paar Geschwister mit höherer Verstärkung: 

  • INA286: 100 V/V
  • INA283: 200 V/V
  • INA284: 400 V/V
  • INA285: 1000 V/V

In der Modulausführung habe ich nur den INA282 gefunden und auch nur mit einem Shunt von 0,1 Ohm. Das bedeutet, dass z. B. 1 Ampere einen Spannungsabfall von 100 Millivolt am Shunt verursacht. Aufgrund des Verstärkungsfaktors von 50 erhaltet ihr in diesem Fall eine Signalspannung von 5 Volt. Mit den blanken ICs hingegen seid ihr da freier und könnt den Bereich der Signalspannung über die Auswahl des Shunts steuern. Oder ihr schaltet zwischen verschiedenen Shunts um und habt auf diese Weise unterschiedliche Messbereiche. 

Der INA282 benötigt eine eigene Spannungsversorgung von 2,7 bis 18 Volt und hat einen Strombedarf von maximal 900 Mikroampere. Die Spannung an seinen Messeingängen IN+ und IN- darf zwischen -14 und +80 Volt liegen.

Vom internen Aufbau her ähnelt der INA282 sehr stark der OpAmp Variante des Eigenbau-Stromsensors, die ich hier besprochen hatte.

Schematischer Aufbau des INA282
Schematischer Aufbau des INA282

Weitere Details zum INA282 findet ihr im Datenblatt.

Betriebsmodi

Neben dem Strom I, der Größe des Shunts und dem Verstärkungsfaktor bestimmt die Betriebsspannung VCC und die Beschaltung der Anschlüsse REF1 und REF2 (RE1/RE2 auf dem Modul), welche Spannung U ihr an OUT erhaltet:

Betriebsmodi des INA282 in Abhängigkeit von REF1 und REF1
Betriebsmodi des INA282 in Abhängigkeit von REF1 und REF1
  1. REF1 und REF2 an GND: bei null Ampere erhaltet ihr eine Spannung von null Volt an OUT. Bei einem Stromfluss von der mit IN+ verbundenen Seite des Shunts zu der mit IN- verbundenen Seite messt ihr eine positive Spannung. Die Strommessung ist unidirektional.
  2. REF1 an VCC, REF2 an GND: (oder anders herum): bei null Ampere erhaltet ihr eine Spannung von VCC/2. Je nach Stromrichtung nimmt die Spannung ab oder zu (bidirektional).
  3. REF1 und REF2 an VCC: bei 0 Ampere liegt Spannung an OUT auf dem Niveau von VCC. Bei einem Stromfluss IN- –> IN+ (über den Shunt) nimmt die Spannung mit steigender Stromstärke ab. Hier messt ihr also wieder unidirektional. 

Weitere Einstellungsmöglichkeiten sind möglich, indem ihr REF1 und REF2 an andere Referenzspannungen anschließt. Näheres dazu findet ihr im Datenblatt.

Anschluss am Arduino UNO

Da der INA282 mit seinem Verbrauch vom maximal 900 µA noch recht genügsam ist, könnt ihr ihn über den Arduino mit Strom versorgen. Ihr solltet aber nicht zu viele weitere Geräte an der Stromversorgung hängen haben, um die Strommessung nicht zu beeinflussen. Das gilt natürlich besonders für den Fall, dass ihr die Betriebsmodi 2 oder 3 wählt. Denn schwankt die Versorgungsspannung, schwankt euer Nullpunkt. 

Ich betrachte im Weiteren nur den Betriebsmodus 1. So könnte dann eure Schaltung am Arduino aussehen:

Der INA282 am Arduino UNO (High-Side)
Der INA282 am Arduino UNO (High-Side)

Das ist die High-Side Konfiguration, sprich der INA282 sitzt an der V+ Seite des Verbrauchers. Alternativ könnt ihr ihn auch auf die GND Seite, also hinter den Verbraucher setzen (Low-Side Konfiguration).

Stabile Werte könnte ich nur erzielen, wenn ich für eine gemeinsame Masse von Verbraucherstromkreis und Arduino gesorgt habe.

Den zu bestimmenden Verbraucherstrom nennt man üblicherweise Busstrom. Deshalb werde ich im Weiteren diesen Begriff verwenden.

Aufnahme einer Kalibriergeraden

Für die Aufnahme der Kalibriergeraden habe ich den Busstrom mit einem Multimeter gemessen, verschiedene Verbraucher eingesetzt und die Rohwerte am analogen Eingang A0 gemessen. Der Arduino A/D-Wandler neigt jedoch zum Schwanken um +/-2 Einheiten. Deshalb habe ich jeweils 25 Einzelwerte gemittelt.

void setup() {
  Serial.begin(9600);
}

void loop() {
  unsigned long rawVal = 0;
    
  for(int i=0; i<25; i++){
    rawVal += analogRead(A0);
    delay(5);
  }
  
  float meanRawVal = (rawVal / 25.0);
  Serial.println(meanRawVal);
  delay(1000);        
}

 

Die Rohdaten R habe ich (bzw. Excel) dann in die Spannung U umgerechnet:

U\;[\text{mV}]=R\cdot\frac{5000}{1023}

So sahen die Daten aus:

Tabelle 2: Werte für die Kalibriergerade
Tabelle 2: Werte für die Kalibriergerade

… und so die über Excel erstellte Ausgleichsgerade:

Kalibriergerade für den INA282
Kalibriergerade für den INA282

Die Rohwerte habe ich dann in die Formel für die Ausgleichsgerade eingesetzt (siehe letzte Spalte der Tabelle 2). Die berechneten Werte stimmen ziemlich gut mit den Multimeterwerten überein. Nur am Nullpunkt „knicken“ die realen Werte gegenüber der Ausgleichsgerade weg. Deshalb habe ich den Wert bei 0 Milliampere auch nicht mit einbezogen.

Weiter oben hatte ich ausgerechnet, dass bei 50facher Verstärkung und einem Shunt von 0,1 Ohm ein Strom von 1 Ampere eine Signalspannung von 5 Volt ergeben sollte. Die Ausgleichsgerade müsste deshalb eine Steigung von 0,2 mA/mV haben. Stattdessen beträgt die Steigung 0,2063, was ca. 3 Prozent Abweichung sind. Die Messwertschwankungen liegen, zumindest bei Strömen oberhalb von 10 Milliampere, unterhalb dieser Abweichung. Für genaue Messungen lohnt es sich deshalb schon, eine Kalibriergerade zu ermitteln.

Der INA282 als Strom- und Leistungssensor

Wenn ihr die Kalibrierprozedur angewendet habt, könnt ihr jetzt unbekannte Ströme messen. Darüber hinaus könnt ihr eurem Projekt aber auch noch sehr einfach eine Funktion zu Messen der Leistung spendieren. 

Da ihr den Busstrom kennt, braucht ihr nur die Spannung an V+ des Verbrauchers (Busspannung) zu messen und könnt so die Leistung P ausrechnen:

P = U_{\text{Bus}}\cdot I_{\text{Bus}}

So könnte dann eure Schaltung dazu aussehen:

Der INA282 als Strom- und Leistungssensor
Der INA282 als Strom- und Leistungssensor

Dabei müsst ihr natürlich aufpassen, dass an den analogen Eingängen nicht mehr als 5 Volt anliegt. Ihr könnt sonst euren Arduino zerstören. Setzt deshalb einen geeigneten Spannungsteiler ein. Wenn eure Stromquelle für den Bus allerdings auch nur 5 Volt liefert, könnt ihr natürlich darauf verzichten.  

So sieht dann der vollständige Sketch aus:

const int outPin = A0;
const int busVoltagePin = A1;

void setup() {
  Serial.begin(9600);
  Serial.println("INA282 Stromsensor");
  Serial.println();
}

void loop() {
  float voltage = 0.0;
  unsigned long rawVal = 0;
  
  for(int i=0; i<25; i++){
    rawVal += analogRead(outPin);
  }
    
  voltage = (rawVal/25.0) * 5000 / 1023.0;
  Serial.print("V Out         [mV]: ");
  Serial.println(voltage);

  float current_mA = voltage * 0.2063 + 1.9382; // Kalibrierfaktoren
  Serial.print("Busstrom      [mA]: ");
  Serial.println(current_mA);

  voltage = analogRead(busVoltagePin) * 5.0 / 1023.0;  
  Serial.print("Busspannung    [V]: ");
  Serial.println(voltage);

  float power_mW = (voltage * current_mA);
  Serial.print("Leistung      [mW]: ");
  Serial.println(power_mW);

  Serial.println("-------------------------------");
  delay(2000);
}

 

Und so schaut es dann auf dem seriellen Monitor aus:

Ausgabe von INA282_Strom_Leistungssensor.ino
Ausgabe des Sketches INA282_Strom_Leistungssensor.ino

Den „blanken“ INA282 IC verwenden

Ihr könnt auch den blanken INA282 (oder vielleicht einen seiner Geschwister) verwenden. Es gibt kleine Adapterplatinen (z.B. hier), auf die ihr solche SMDs auflöten könnt. Damit seid ihr dann frei in der Wahl des Shunts.

Die Pinbelegung des INA282 sieht folgendermaßen aus:

Pinout des INA282

Das sieht den Ausgängen des Moduls doch sehr ähnlich. Ihr müsst deshalb nur noch für einen Shunt an IN+ und IN- sorgen und könnt alles andere an Schaltungen von weiter oben übernehmen.

In meinen Beitrag über den Eigenbau Stromsensor bin ich schon einmal auf den Einsatz von Shunts eingegangen. Wiederholen möchte ich aber, dass bei der Verwendung „normaler“ Widerstände als Shunts der Kontaktwiderstand auf dem Breadboard zu ungenauen Werten führen kann (wahrscheinlich wg. der dünnen Beinchen). Aus diesem Grund lötet den Shunt besser auf. 

Links: INA282 IC auf einer Adapterplatine, rechts: verlöteter Widerstand als Shunt

Auf diese Weise konnte ich genauso stabile Werte ermitteln wie mit dem INA282 Modul.

Danksagung

Wie meistens, habe ich mich für Teile meines Beitragsbildes wieder bei Pixabay bedient. Deshalb möchte ich mich bedanken:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.