Ü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:
Sensor | INA282 | INA219 | INA226 | Eigenbau | ACS712 | MAX471 |
Mess- Prinzip | externer Shunt | externer Shunt | externer Shunt | externer Shunt | Hall- Effekt | interner Shunt |
Signal | analog | digital (I2C) | digital (I2C) | analog | analog | analog |
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
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.
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:
- 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.
- 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).
- REF1 und REF2 an VCC: bei 0 Ampere liegt die 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 von maximal 900 µA 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:
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 rawVal habe ich (bzw. Excel) dann in die Spannung U umgerechnet:
So sahen die Daten aus:
… und so die über Excel erstellte Ausgleichsgerade:
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:
So könnte dann eure Schaltung dazu aussehen:
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 / 1024.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 / 1024.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:
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:
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.
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:
- Die Lupe stammt aus dem Bereich OpenClipart-Vectors.
- Der schon oft verwendete Stromzähler ist dem Free-Photos Bereich zu verdanken.
Sehe ich es richtig, dass bei dem Standard Shunt von 0.1 Ohm und der 50V/V Version am Arduino maximal 1A gemessen werden kann, da am Arduino Eingang mit diesen werten schon 5V ankommt und mehr nicht gelesen werden können?
1A * 0.1 * 50 = 5V am Ardunio Eingang und somit der Wert 1023. mehr als 5V kann der Arduino doch am Eingang nicht verkraften, oder?
Und als zweite Frage, wieso bei dem INA181 direkt der Strom am Eingang ausgelesen werden kann ohne die Umrechnung mit *0.2063 wie bei Ihnen.
Hier als Beispiel:
http://www.technoblogy.com/show?441V
Zur ersten Frage: Genau, bei 1A wäre Schluss, im bidirektionalen Modus bei +/-500 mA. Wenn man mehr messen wollte, müsste man einen kleineren Shunt wählen, mit Spannungsteilern arbeiten oder einen anderen Stromsensor wählen.
Zur zweiten Frage: Erst einmal sollten es idealerweise 0.2 A / V sein. Das ergibt sich aus der Shuntgröße, dem Ohm’schen Gesetz und dem Verstärkungsfaktor 50. Der krumme Wert ist das Ergebnis der Kalibrierung. Ich habe dann mal in den Link geschaut. Soweit ich das sehe, ist auch dort eine Umrechnung nötig:
The INA181A2 I chose has a gain of 50V/V. This allows us to use a voltage reference of VCC, or 3.3V, to get a full scale reading of 1024 with 6.6A current.
Die Umrechnung ist also 2 A / V, was sich aus der Shuntgöße (0.01 Ohm) ergibt.
Genau bei dieser Rechnung hakt es bei mir 🙂 Ich stehe auf dem Schlauch…
Wie ist der Rechenweg bei Ihnen oder im Link um auf 2 A/V bzw 0.2 A/V zu kommen?
Ich Danke Ihnen im Voraus.
Hallo,
vielen Dank für die Antwort.
Aber ich stehe etwas auf dem Schlauch….
Wie ist der Rechenweg bei Ihnen und ind em Beispiel im Links um um auf 2 A/V bzw. 0,2 A/V zu kommen?
Ich Danke ihnen
U_Ina282 = U_Shunt * 50 // 50 fache Verstärkung
U_Ina282 = R_Shunt * I * 50
U_Ina282 = 0.1 * I * 50 = 5 * I
I = 0.2 * U_Ina282
Eigentlich haben sie die Antwort schon selbst gegeben, als sie die Obergrenze von 1 A bei 5V ausgerechnet haben. Auch da ist der Faktor 5 bzw. 0.2.
VG, Wolfgang Ewald
Super kompetenter Artikel.
Da ich bei mir mein Haus mit bestehenden Eltaco-Stromstoßrelais habe, wollte ich mit den 16-Relais Boards diese Relais mit 230V Stromstoß schalten (toggeln).
Was mir noch fehlt ist zu sehen, ob das Eltako-Relais jetzt an oder aus ist (da ja auch die Wandtaster toggeln können).
Ist es machbar auch 230V Leitung mit deinem Ansatz zu überwachen (mit oder ohne Leistungsmessung)?
VG
Bernd
Bei 230 V bin ich mit Ratschlägen immer etwas vorsichtig und sage schon mal vorab: Alles auf eigene Gefahr! Wir reden aber schon über Gleichstrom, oder? Lt Datenblatt können an IN+ und IN- -14 bis 80 V anliegen. Also keine 230 V direkt. Man kann natürlich hinter den Verbraucher auf die GND Seite gehen (LOW Side Konfiguration). Dann musst dann du noch in Betracht ziehen, welche Ströme du messen wirst und entsprechend schauen mit welchem Shunt du klar kommst.
Hallo Wolfgang,
sorry, ich sprach von ~230V. Aber du hast Recht: da macht der INA282 wohl keinen Sinn. Und klar: alles auf eigene Gefahr. Schade, klang zu schön für meinen Zweck.
VG
Bernd
Hallo,
für solche Zwecke gibt es
„AC 220V Optokoppler“.
Der Baustein erkennt 220V AC am Eingang und gibt am Ausgang ein digitales Signal (high oder low).
Die meisten dieser Teile können direkt an Arduino und Co angeschlossen werden.
Es gibt sie einzeln oder auch als Array (ich habe 8-Kanal Koppler im Einsatz).
Gruß Michael
Schönen Dank – auch wenn die Antwort nicht mir galt! Ich freue mich über rege Beteiligung!