Stromsensor selber bauen

Über den Beitrag

In vorherigen Beiträgen hatte ich die Strom- und Leistungssensoren INA219 und INA226 vorgestellt. Diese funktionieren nach dem einfachen Prinzip, dass der zu messende Strom durch einen niederohmigen Widerstand (Shunt) geleitet wird. Die Stromstärke ergibt sich nach dem Ohmschen Gesetz aus dem Spannungsabfall. Der Gedanke liegt nahe, dass man so einen Stromsensor doch auch selber bauen könnte und genau darum geht es in diesem Beitrag.

Die einzige Hürde liegt in der Messung der geringen Spannungsabfälle. Bei den zuvor behandelten Modulen hatte der Shunt einen Widerstandswert von 0,1 Ohm. Selbst bei einem recht hohen Strom von zum Beispiel einem Ampere liegt der Spannungsabfall gerade mal bei einhundert Millivolt. Eine direkte Messung mit dem A/D-Wandler des Arduino UNO wäre deshalb viel zu grob.

Also muss das Spannungssignal verstärkt werden. Ich habe zwei Wege ausprobiert:

  • Verstärkung und A/D-Wandlung über den ADS1115.
  • Verstärkung mit einem Operationsverstärker (OpAmp), A/D-Wandlung über den Arduino.

Auswahl und Verwendung des Shunts

Qual der Wahl

Als Widerstandsgröße habe ich – wie beim INA219 und INA226 – 0,1 Ohm gewählt. Je kleiner der Widerstand, desto kleiner das Signal. Je größer der Widerstand, desto größer der Eingriff in das zu messende System. Die Auswahl ist also immer ein Kompromiss.

Für die Messung sehr großer Ströme könnt ihr eigens dafür ausgelegte Shunt Widerstände erwerben (z. B. hier). Ich habe mich für einen klassischen Metallschicht-Widerstand entschieden, allerdings in einer größeren Ausführung, die bis 2 Watt belastbar ist. Normalerweise haben Widerstände eine typische Belastbarkeit von 0,25 Watt.

0,1 Ohm Shuntwiderstand für den Stromsensor
Oben: Widerstand 0,1 Ohm, 2 Watt, unten: im Vergleich ein 0,25 Watt Widerstand

Einbau des Shunts

Bei meinen ersten Versuchen zum Bau eines Stromsensors war ich zunächst enttäuscht, da ich keine reproduzierbare Messwerte ermitteln konnte. Der Grund dafür war, dass der Kontakt zwischen meinem Shunt und dem Breadboard einen signifikanten Widerstand darstellte. Ein kleines „Ruckeln“ am Shunt hat sofort die Messwerte verändert.  Normalerweise spielt der Kontaktwiderstand keine Rolle, aber bei 0,1 Ohm sieht das anders aus.

Als Lösung habe ich den Shunt fest auf einer Platine verlötet:

Verbauter Shunt: 2 Stromanschlüsse, 2 Anschlüsse für die Spannungsmessung
Verbauter Shunt: 2 Stromanschlüsse, 2 Anschlüsse für die Spannungsmessung

Den Rest habe ich mit Steckbrückenkabeln verbunden. Diese haben anscheinend niedrigere Kontaktwiderstände. Jedenfalls bekam ich danach sehr reproduzierbare Messwerte.

Stromsensor auf Basis des ADS1115

Den ADS1115 hatte ich in meinem letzten Beitrag vorgestellt. Meine Bibliothek dazu (ADS1115_WE) bekommt ihr hier auf Github oder direkt über die Bibliotheksverwaltung der Arduino IDE. Auf die Details gehe ich nicht nochmal ein, möchte aber noch einmal erwähnen, dass der ADS1115 einen internen Verstärker besitzt und über eine Auflösung von 16 Bit verfügt. Damit lassen sich auch kleine Spannungen sehr gut messen. 

Verschiedene ADS1115 Module für den Stromsensor
Verschiedene ADS1115 Module

Die Schaltung

Den ADS1115 habe ich mit den 5 Volt des Arduino UNO versorgt. Die Kommunikation erfolgt über I2C. Pullup-Widerstände für die I2C Leitungen brauchte ich nicht, das kann bei anderen Modulen aber anders sein.

Den Shunt habe ich vor den Verbraucher gesetzt (High-Side Konfiguration). Ihr könnt ihn natürlich auch dahinter setzen (Low-Side). Die Shuntspannung habe ich über die Kanäle A0 und A1 des ADS1115 erfasst. Den Spannungsabfall über dem Verbraucher (Busspannung) habe ich mit den Kanälen A2 und A3 gemessen. Mit dem Shuntstrom und der Busspannung lässt sich dann die Leistung des Verbrauchers ausrechnen.

Wenn ihr, so wie ich, eine separate Spannungsquelle für den Verbraucher verwendet, dann müsst ihr für eine gemeinsame Masse sorgen.

Achtung: die Spannung an den Eingängen A0 – A4 darf die Versorgungsspannung des ADS1115 um nicht mehr als 0,3 Volt überschreiten. In diesem Fall wären das 5,3 Volt. Wenn die Busspannung höher ist, müsst ihr noch geeignete Spannungsteiler vor die Eingänge (also hier A2 und A3) setzen! Ihr zerstört sonst den ADS1115!

Stromsensor auf Basis des ADS1115
Stromsensor auf Basis des ADS1115

Kalibrierung

Da wir nicht davon ausgehen können, dass unser Shunt einen Widerstand von exakt 0,1 Ohm hat, muss die Sensorschaltung kalibriert werden. Dafür habe ich vor den Shunt ein Multimeter für die Strommessung eingesetzt und die Shuntspannung für verschiedene Verbraucher ermittelt. Für kleine Ströme habe ich LEDs genommen, für etwas größere Ströme einen Gassensor (weil ich den gerade zur Hand hatte).  So sah das dann aus:

Breadboard Schaltung

Der Sketch zur Kalibrierung

Für die Kalibrierung ist nur die Shuntspannung von Interesse. Ich habe den kontinuierlichen Modus und die höchste Verstärkung (also die kleinste Voltage Range) gewählt.

#include<ADS1115_WE.h> 
#include<Wire.h>
#define I2C_ADDRESS 0x48

ADS1115_WE adc(I2C_ADDRESS);

void setup() {
  Wire.begin();
  Serial.begin(9600);
  if(!adc.init()){
    Serial.println("ADS1115 not connected!");
  }

  /* Set the voltage range of the ADC to adjust the gain
   * Please note that you must not apply more than VDD + 0.3V to the input pins!
   * 
   * ADS1115_RANGE_6144  ->  +/- 6144 mV
   * ADS1115_RANGE_4096  ->  +/- 4096 mV
   * ADS1115_RANGE_2048  ->  +/- 2048 mV (default)
   * ADS1115_RANGE_1024  ->  +/- 1024 mV
   * ADS1115_RANGE_0512  ->  +/- 512 mV
   * ADS1115_RANGE_0256  ->  +/- 256 mV
   */
  adc.setVoltageRange_mV(ADS1115_RANGE_0256); //comment line/change paramater to change range

  adc.setCompareChannels(ADS1115_COMP_0_1); //comment line/change paramater to change channel

  adc.setMeasureMode(ADS1115_CONTINUOUS); //comment line/change parameter to change mode

  Serial.println("Stromsensor - Shuntspannung");
  Serial.println();
}

void loop() {
  float voltage = 0.0;
  voltage = adc.getResult_mV(); // alternative: getResult_mV for Millivolt
  Serial.print("Shuntspannung [mV]: ");
  Serial.println(voltage);
  Serial.println("-------------------------------");
  delay(2000);
}

 

Das Ergebnis der Kalibrierung

Die Kalibrierung ergab eine schöne Ausgleichsgerade mit geringen Abweichungen.

Shuntspannung vs. Strom zur Kalibrierung des Stromsensors
Shuntspannung vs. Strom zur Kalibrierung des Stromsensors

Der vollständige Sensorsketch

Mit dem Kalibrierfaktor (Verhältnis Strom / Shuntspannung = ca. 9,67) lassen sich dann unbekannte Stromstärken ermitteln. Die Leistung des Verbrauchers ergibt sich aus der Stromstärke I und der Busspannung UBus:

P_{V\!erbraucher}=I\cdot U_{Bus}

Da die Busspannung erheblich höher als die Shuntspannung ist, werden diese Messungen mit unterschiedlichen Verstärkungen durchgeführt.

Ich habe hier den „Single-Shot“ Modus (also Messung auf Anfrage) gewählt. Dieser Modus ist zum einen energetisch günstiger, zum anderen stellt er über die isBusy() Funktion sicher, dass man keinen veralteten Wert ausliest.

#include<ADS1115_WE.h> 
#include<Wire.h>
#define I2C_ADDRESS 0x48
ADS1115_WE adc(I2C_ADDRESS);

const float voltageToCurrent = 9.67;

void setup() {
  Wire.begin();
  Serial.begin(9600);
  if(!adc.init()){
    Serial.println("ADS1115 not connected!");
  }

  /* Set the voltage range of the ADC to adjust the gain
   * Please note that you must not apply more than VDD + 0.3V to the input pins!
   * 
   * ADS1115_RANGE_6144  ->  +/- 6144 mV
   * ADS1115_RANGE_4096  ->  +/- 4096 mV
   * ADS1115_RANGE_2048  ->  +/- 2048 mV (default)
   * ADS1115_RANGE_1024  ->  +/- 1024 mV
   * ADS1115_RANGE_0512  ->  +/- 512 mV
   * ADS1115_RANGE_0256  ->  +/- 256 mV
   */
  //adc.setVoltageRange_mV(ADS1115_RANGE_6144); //comment line/change paramater to change range

  /* Set the inputs to be compared
   *  
   *  ADS1115_COMP_0_1    ->  compares 0 with 1 (default)
   *  ADS1115_COMP_0_3    ->  compares 0 with 3
   *  ADS1115_COMP_1_3    ->  compares 1 with 3
   *  ADS1115_COMP_2_3    ->  compares 2 with 3
   *  ADS1115_COMP_0_GND  ->  compares 0 with GND
   *  ADS1115_COMP_1_GND  ->  compares 1 with GND
   *  ADS1115_COMP_2_GND  ->  compares 2 with GND
   *  ADS1115_COMP_3_GND  ->  compares 3 with GND
   */
  //adc.setCompareChannels(ADS1115_COMP_0_GND); //uncomment if you want to change the default

  Serial.println("Strom- und Leistungssensor mit ADS1115");
  Serial.println();
}

void loop() {
  float voltage = 0.0;

  adc.setCompareChannels(ADS1115_COMP_0_1);
  adc.setVoltageRange_mV(ADS1115_RANGE_0256);
  adc.startSingleMeasurement();
  while(adc.isBusy()){}
  voltage = adc.getResult_mV(); 
  Serial.print("Shuntspannung [mV]: ");
  Serial.println(voltage);

  float current_mA = voltage * voltageToCurrent;
  Serial.print("Busstrom      [mA]: ");
  Serial.println(current_mA);

  adc.setVoltageRange_mV(ADS1115_RANGE_6144);
  adc.setCompareChannels(ADS1115_COMP_2_3);
  adc.startSingleMeasurement();
  while(adc.isBusy()){}
  voltage = adc.getResult_V(); 
  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 sieht die Ausgabe am seriellen Monitor aus:

Ausgabe von Stromsensor_ADS1115_komplett.ino
Ausgabe von Stromsensor_ADS1115_komplett.ino

Überwachung von Strömen

Der ADS1115 besitzt einen Alarm Pin, den ihr so konfigurieren könnt, dass er bei Überschreitung bestimmter Werte aktiviert wird. Wenn ihr den Alarm Pin mit einem Interrupt Pin des Arduino verbindet, könnt ihr so ganz bequem Ströme überwachen. Ihr habt damit (fast) die volle Funktionalität eines INA226 Stromsensors. Näheres zur Programmierung des Alarm Pins findet ihr in meinem Beitrag zum ADS1115.

Stromsensor mit Operationsverstärker

Die Ergebnisse mit Shunt und ADS1115 sahen nicht schlecht aus, jedoch habe ich unter den von mir gewählten Bedingungen selbst bei höchster Verstärkung nur ca. 10 % des Messbereiches des ADS1115 verwendet. Je nachdem, welche Auflösung ihr benötigt und welche Shuntspannungen ihr erzeugt, könnte eine weitere Verstärkung angebracht sein. Dafür bietet sich ein Operationsverstärker an. 

Was macht ein Operationsverstärker?

Operationsverstärker, schematisch
Operationsverstärker, schematisch

Operationsverstärker (Operational Amplifiers, kurz: OpAmps) sind ausgesprochen vielfältig einsetzbare Bauteile, über die sich ganze Bücher schreiben lassen. Ich will deswegen gar nicht erst versuchen, hier so etwas eine Einführung zu geben. Als absolutes Minimum aber solltet ihr wissen:

  • OpAmps dienen der Spannungsverstärkung.
  • Sie besitzen einen invertierenden („-„) Eingang, einen nicht-invertierenden Eingang („+“) und einen Ausgang (VOUT).
  • Die Spannungsversorgung ist meistens symmetrisch (V+ / V-), es gibt aber auch Anwendungen mit V+ / GND.
    • Wir beschäftigen uns hier mit Letzteren.
  • Der OpAmp erhält seine Funktion erst durch Beschaltung mit weiteren Bauteilen.
  • OpAmps können als invertierende oder nicht invertierende Verstärker, als Differenzverstärker, Integrierverstärker, Summierverstärker, u.v.m. eingesetzt werden. 

Wenn ihr Einsteiger seid und mehr wissen wollt, empfehle ich diese Stelle im Netz.

Einige Vertreter

OpAmps gibt es verschiedenen Bauformen. Meistens werden sie als ICs angeboten, die mehrere OpAmps enthalten. Für den Beitrag habe den MCP6002, LM358 und den TLV2462 ausprobiert.

Es sei vorweggenommen, dass ich mit dem TLV2462 Probleme mit der Linearität bei kleinen Spannungen hatte.

OpAmps für den Stromsensor: TLV2462, LM358, MCP6002
OpAmps für den Stromsensor: TLV2462, LM358, MCP6002

Alle genannten Vertreter besitzen 2 OpAmps und haben dieselbe Pinbelegung: 

Pinout für den MCP6002, LM358 und TLV2462
Pinout für den MCP6002, LM358 und TLV2462

Der OpAmp als Differenzverstärker

Für die Verstärkung der Shuntspannung habe ich den OpAmp als Differenzverstärker eingesetzt. Um die Differenz zwischen zwei Spannungen V1 und V2 zu verstärken, wird der OpAmp folgendermaßen beschaltet:

Verstärkerschaltung für den Stromsensor: Differenzverstärker
Verstärkerschaltung für den Stromsensor: Differenzverstärker

Wenn R1 gleich R2 ist und R3 gleich R4, dann gilt für VOUT:

V_{OUT}=\frac{R_3}{R_1}\cdot(V_2-V_1)

Warum das so ist, könnt ihr hier nachlesen. Als R1 bzw. R2 habe ich 3,9 kOhm gewählt 330 kOhm als R3 bzw. R4. Damit beträgt der Verstärkungsfaktor theoretisch 84,6. Bei einem Messbereich bis 5 Volt kann man damit Shuntspannungen von bis zu 5 V / 84,6 = 59,1 mV erfassen. Das wiederum entspricht einem maximalen Strom von 591 mA.

Für diejenigen, die sich mit OpAmps auskennen: ich hatte zunächst versucht, den OpAmp als nicht-invertierenden Verstärker, so wie hier beschrieben, einzusetzen. Damit habe ich keine stabilen Verstärkungen hinbekommen und die Verstärkungen waren wesentlich höher als berechnet – hat jemand eine Idee, woran das liegen könnte? Wie auch immer funktioniert die Differenzverstärkerschaltung sehr gut.

Kalibrierung des OpAmp basierten Stromsensors

Schaltung

Zur Kalibrierung müssen wir auch hier wieder praktisch ermitteln, wie die verstärkte Shuntspannung von der Stromstärke abhängt. Dazu braucht ihr also ein Gerät zur Spannungs- und eines zur Strommessung. Ich habe mein Multimeter zur Strommessung eingesetzt und zur Spannungsmessung den ADS1115. Natürlich hätte ich auch direkt den A/D-Wandler des Arduino zur Spannungsmessung verwenden können. Mich hat aber interessiert, ob auch bei kleinen Spannungen eine lineare Abhängigkeit vorliegt. Und dazu wollte ich die hohe Auflösung des ADS1115 nutzen. Noch einfacher wäre es, zwei Multimeter zu verwenden. Aber die hat ja nicht jeder.

Der Shunt ist diesmal hinter dem Verbraucher positioniert (Low-Side). Alle Komponenten haben dabei eine gemeinsame Masse.

Mit einer getrennten Stromquelle für den Verbraucher und vor allem mit einer getrennten Masse lässt sich auch die High-Side Konfiguration realisieren. VCC des Verbrauchers verbindet man für diesen Fall mit der Masse der restlichen Schaltung. Das Problem ist dabei jedoch die Messung der Busspannung, die dann im negativen Bereich liegt. 

Stromsensor Kalibrierung mit dem ADS1115
Stromsensor Kalibrierung mit dem ADS1115

Als Testverbraucher mit unterschiedlichen Stromstärken habe ich wieder ausgewählt, was auf meinem Tisch herumlag.

Sketch für die Kalibrierung

Der Sketch ist spezifisch für meine Art der Kalibrierung. Wenn ihr mehrere Multimeter besitzt, braucht ihr gar keinen Sketch, sondern messt direkt.

#include<ADS1115_WE.h> 
#include<Wire.h>
#define I2C_ADDRESS 0x48

ADS1115_WE adc(I2C_ADDRESS);

void setup() {
  Wire.begin();
  Serial.begin(9600);
  if(!adc.init()){
    Serial.println("ADS1115 not connected!");
  }

  /* Set the voltage range of the ADC to adjust the gain
   * Please note that you must not apply more than VDD + 0.3V to the input pins!
   * 
   * ADS1115_RANGE_6144  ->  +/- 6144 mV
   * ADS1115_RANGE_4096  ->  +/- 4096 mV
   * ADS1115_RANGE_2048  ->  +/- 2048 mV (default)
   * ADS1115_RANGE_1024  ->  +/- 1024 mV
   * ADS1115_RANGE_0512  ->  +/- 512 mV
   * ADS1115_RANGE_0256  ->  +/- 256 mV
   */
  adc.setVoltageRange_mV(ADS1115_RANGE_6144); //comment line/change paramater to change range

  adc.setCompareChannels(ADS1115_COMP_0_GND); //comment line/change paramater to change channel

  adc.setMeasureMode(ADS1115_CONTINUOUS); //comment line/change paramater to change mode

  Serial.println("Stromsensor - Shuntspannung am Opamp");
  Serial.println();
}

void loop() {
  float voltage = 0.0;
  voltage = adc.getResult_mV(); 
  Serial.print("Shuntspannung [mV]: ");
  Serial.println(voltage);
  Serial.println("-------------------------------");
  delay(2000);
}

 

Ergebnis der Kalibrierung

Die ermittelten Messwerte lagen alle sehr nahe an einer Ausgleichsgeraden, zumindest gilt das für den MCP6002 (Ergebnisse unten abgebildet) und den LM358. Bei 0 Milliampere sollte die verstärkte Shuntspannung 0 Millivolt betragen. Die OpAmps haben aber eine Offsetspannung an VOUT, die man entsprechend herausrechnen muss.

Messdaten für die Kalbrierung des Stromsensors
Messdaten für die Kalbrierung des Stromsensors (ermittelt mit dem MCP6002)

Beim TLV2462 knickten die Messwerte bei kleinen Spannungen Richtung Nullpunkt weg. So als ob die Offsetspannung verschwindet. Warum das so ist, weiß ich nicht – ich hatte keine Lust weiter nachzuforschen.

Der vollständige Stromsensor

Der Rest ist einfach. Die verstärkte Shuntspannung könnt ihr nun direkt am Arduino auslesen und in den Strom umrechnen. Die Busspannung ist normalerweise so hoch, dass ihr sie nicht verstärken müsst.

Wenn ihr die Busspannung an VCC des Verbrauchers auslest, dann ist da auch noch ein kleiner Anteil Shuntspannung drin. In erster Näherung die das der Strom, multipliziert mit 0,1. Zu guter Letzt könnt ihr dann problemlos die Leistung errechnen.

Hier der Vollständigkeit halber die Schaltung:

Der OpAmp basierte Stromsensor
Der OpAmp basierte Stromsensor

Und hier noch der vollständige Sketch:

const float calibrationFactor = 8.77;
const int offsetValue = 15;
const int opampVOutPin = A0;
const int busAnalogPin = A1;

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

void loop(){
 
  float amplifiedShuntVoltage_mV = (analogRead(opampVOutPin) - offsetValue) * 5.0 / 1.024;
  Serial.print("Verstärkte Shuntspannung [mV]: ");
  Serial.println(amplifiedShuntVoltage_mV);

  float current_mA = amplifiedShuntVoltage_mV / calibrationFactor; 
  Serial.print("Strom [mA]                   : ");
  Serial.println(current_mA);
  
  // Wir ziehen die Shuntspannung ab, um die reine Busspannung zu haben
  float busVoltage_V = (analogRead(busAnalogPin) * 5.0 / 1024) - (current_mA * 0.1 / 1000);
  Serial.print("Busspannung [V]              : ");
  Serial.println(busVoltage_V);

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

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

 

Danksagung

Das schon mehrfach verwendete Bild des Strommessers für das Beitragsbild stammt aus dem Free-Photos Fundus von Pixabay. Die meisten Werkzeuge habe ich Clker-Free-Vector-Images zu verdanken. Die Bohrmschine stammt von Francis Ray auf Pixabay.

30 thoughts on “Stromsensor selber bauen

    1. Hi Wolfram, da fehlt der Widerstand den ich in meinen Schaltungen als „R4“ bezeichnet habe. Ich denke das würde so nicht funktionieren. Und 50 A bei einem Shunt von 0.01 Ohm würde einen Leistungsverlust von 25 Watt bedeuten. Das ist heftig. Da wird dem Shunt ziemlich warm.

      Bevor du irgendetwas fest verbaust würde ich es testen. Gehe einfach mit der maximal zu erwartenden Shuntspannung vorne rein in den Verstärker und miss was hinten rauskommt.

      Und ganz wichtig: wenn du nicht 100% sicher bist, was du tust, dann lasse das von einem Fachmann prüfen. Nicht dass dir dein Haus oder deine Wohnung abfackelt. Ich gebe meine Ratschläge nach bestem Wissen, muss aber jegliche Haftung ausschließen. Außerdem kann es immer eine Diskrepanz zwischen Schaltplan und Umsetzung geben.

      VG, Wolfgang

      1. Hallo, ich denke, dass die 50A nicht per Shunt-Widerstand gemessen werden sollten, sondern mit einem passenden Gleichstromsensor, der den Hall-Effekt nutzt. Am optimalsten gleich einen Hall-Sensor der nicht in den 50A-Strang geschaltet werden muss, sondern bei den der 50A-Draht kontaktlos durch den Sensor geführt werden kann – also nach dem Prinzip, wie auch ein Zangenamperemeter für Gleichströme arbeitet. Da gibt’s sogar fertige kleine Platinchen für, z.B. mit Messbereich 50A oder 100A, die sehr erschwinglich sind.
        VG, Florian

        1. Per Hall-Effekt ist es sicherlich am einfachsten, aber nicht unbedingt am genauesten. Da muss man wissen, was man möchte. Allerdings sollte man bei 50 A auch wirklich wissen, was man tut, damit man sich nicht das Haus abfackelt. Sollte man aber wissen, was man tut oder zieht einen Elektriker zurate, dann sind Messungen von 50 A per Shunt kein Problem. Es gibt auch Shunts für 100 A, z.B. auf Amazon. Bei Conrad habe ich auch welche für 1000 A gesehen.
          VG, Wolfgang

  1. Hallo Wolfgang,

    ich möchte mit einem Step-Down Wandler (XR4016) ein einstellbares Netzteil bauen; ein Laptopnetzteil mit 19V 9A hat genügend „Dampf“. Ich möchte den Strom über den Spannungsabfall über einen Messwiderstand (0,1 Ohm) messen – muß ich die Masse meines Wandlernetzteil mit der „Arduino“-Masse verbinden oder reicht die differentielle Messung über den Shunt? Ein Multimeter hat doch auch nur die Strom-„Rein“ und Strom-„Raus“ Messbuchsen?
    Vielen Dank für Deine Antwort; Du schreibst IMMER sehr gute und verständliche Artikel!

    1. Hallo Harald,

      die Masse des Multimeters ist der negative Anschluss. Wenn der Arduino über Batterien liefe, dann könntest du auch einen Messfühler an GND anschließen und den anderen an einen analogen Eingang. Egal, woran du GND dann anschließt, es wird auf das gleich Spannungslevel gezogen. Das, woran du GND anschließt ist dann dein Bezugspunkt. Du könntest den Shunt dann direkt messen (sofern natürlich alles schön isoliert ist). Wenn du nicht mit einer Batterie arbeitest, sondern zum Beispiel über die USB-Versorgung vom Computer, dann geht das natürlich nicht. Also sagst du dir: dann gehe ich doch einfach an zwei analoge Eingänge, mich interessiert ja nur die Differenz. Trotzdem brauchst du einen gemeinsamen Bezugspunkt für beide Eingänge, sonst kannst du auch die Differenz nicht messen. Und die Spannung an den Eingängen liegt ja auch „irgendwo“. Ich kann das leider nicht besser ausdrücken. Vielleicht fällt mir noch eine bessere Erklärung ein.

  2. Hallo Wolfgang,
    ich wollte mir diesen Stromsensor nachbauen, benötige allerdings einen Messbereich von 0 bis ca.15A.
    Ich unterstelle dass ich da die Widerstände entsprechend ändern muss…
    Als Shunt wollte ich 0,02 oder 0,01 Ohm einsetzen, – welche Werte sollte ich für R1 bis R4 wählen? (bin da leider sehr unsicher…)

    Und ein kleiner Hinweis: Bei dem zweiten Bild aus Fritzing ist der ADS falsch angeschlossen, – VCC und GND sind am Steckbrett vertauscht (wundert mich dass das noch niemandem aufgefallen ist).

    Gruß und Danke, – auch für die vielen anderen Artikel, da haben mir schon viele weiter geholfen.
    Herbert

    1. Hallo Herbert,

      das Schaltungsschema werde ich gelegentlich mal ändern – vielen Dank für den Hinweis. Bei 15 A und 0.01 Ohm wäre die maximale Spannung 0.15 Volt. Um die Berechnungen einfach zu halten, würde ich, so wie in meinem Beispiel, die Widerstände R1 und R2 und die Widerstände R3 und R4 in gleicher Größe wählen. Wenn du eine Spannung bis 5V am ADS1115 messen willst, müsstest du eine Verstärkung von 33,3 anwenden. Du könntest es mal mit R3 = R4 = 330 kOhm und R1 = R2 = 10 kOhm probieren.

      Bevor du dir aber Umstände mit dem Opamp machst, würde ich erst einmal probieren ohne zu arbeiten. Bei deinen hohen Strömen hast du ja schon ganz beachtliche Shuntspannungen für die der interne Verstärker des ADS1115 auch reichen könnte. Mit einem Shunt von 0.02 würdest du bis 0.3 Volt erzeugen, die du mit den Messbereichen 256 mV / 512 mV abdecken könntest.
      Viel Erfolg!
      Wolfgang

      1. Hallo Wolfgang,
        danke noch mal !

        Ich verwende ein LGT8F329P Bord und will keinen ADS verwenden sondern direkt auf die Analogeingänge gehen. Der LGT hat eine 12 Bit AD Wandler, die Genauigkeit reicht mir.
        Ich mache das bisher mit den INA282 Boards mit geändertem Shunt, – das Ergebnis passt schon, aber schön ist es nicht wirklich…

      2. Hallo Wolfgang,
        noch mal ich und noch mal Danke
        Die Werte für die Widerstände passen perfekt, – was mich aber wirklich begeistert: Die Schaltung funtioniert um Welten besser als die Ina282 mit dem umgelöteten Shunt. Mit den INAs schwanken die AD Werte um +- 10, mit dem Eigenbau bestenfalls mal um 1 Stelle !

  3. Hallo Wolfgang, vielen Dank für die schnelle und hilfreiche Antwort. Gilt das dann auch für die anderen beiden Modi also singleended und comparator oder muss man dann hier aufpassen das die Eingangsspannung nicht über die Limits der jeweiligen Verstärkungen liegt?

    1. Natürlich muss jeder, der dieses Projekt nachbaut, es auf seine Bedürfnisse anpassen. Dazu gehört, die Shuntgröße den erwarteten Strömen anzupassen, und natürlich auch darauf zu achten, dass z.B. die Eingangsspannung an den A/D-Wandlern nicht zu überschreiten. Das habe ich deshalb ja auch extra in fetter Schrift oben angemerkt. Eine Gefahr besteht allerdings nicht: Wird der OpAmp mit 5 Volt betrieben, kann auch nicht mehr als 5 Volt Ausgangsspannung herauskommen. Wenn der Verstärkungsfaktor zu hoch gewählt wird, stößt man an diese Sättigungsgrenze. Dann misst man zwar Blödsinn, aber es geht jedenfalls nichts kaputt.

  4. Hallo Wolfgang, habe da mal eine Frage. Es gibt da was, was ich nicht ganz verstehe. Ich denke mal du benutzt 5V als Stromversorgung was heißen würde das an A0 & A1 auch ca. 5V anliegen. Als Voltage Range nimmst du die kleinste (16fache Verstärkung). Würde heißen das die 5V auf 80V verstärkt werden und somit weit über der internen Referenz von 4.096V liegt. Warum zerstört es dann nicht den ADC?

    1. Hallo Andreas, bei allen Schaltungen wird nur die Spannungsdifferenz verstärkt, also die über den Shunt abfallende Spannung. Dein Einwand wäre korrekt, wenn die absoluten Spannungen verstärkt würden und dann davon die Differenz ermittelt würde. VG, Wolfgang

  5. Hallo Wolfgang, zu Beginn hast du den Kontaktwiderstand der Steckverbindung des Shunts angesprochen und die sich daraus ergebenden Messungenauigkeiten. Diese Problematik darf man wohl grundsätzlich nicht ignorieren. Ich habe kürzlich einen Batteriemonitor installiert, der Ströme bis zu 200A messen kann. Der Shunt (0.001 Ohm!) hat separate Anschlüsse für den zu messenden Strom und die Messleitungen. Die Messleitungen werden zwischen dem eigentlichen Shunt und den Lastanschlüssen angeklemmt, so dass sie unbeeinflusst bleiben von den Übergangswiderständen der Lastanschlüsse. Die Übergangswiderstände der Messleitungsanschlüsse sind wahrscheinlich irrelevant, weil da praktisch kein Strom fließt.

  6. Ich müsste feststellen, ob in einem Stromkreis mit 230V AC, wo maximal 100mA Strom fließen, überhaupt Strom fließt. Ein Leitungsbruch des Verbrauchers muss dadurch erkannt werden. Der Strom, der als „AUS“ gilt, wäre bei unter 10mA. Eignet sich dieser Aufbau auch für diese Anforderungen?

  7. Hallo Wolfgang,
    die bildhaften Stromlaufpläne sind für den Anfänger wahrscheinlich sehr nützlich. Ich fände es aber zumindest genauso gut, wenn daneben noch ein Stromlauf in klassischer Form (so wie die Skizze des Differenzverstärkers) vorhanden wäre. Die Schaltung wäre dann mit einem Blick lesbar und verständlich, zumindest für die nicht-Anfänger.
    Viele Grüsse, Willi

    1. Hallo Willi,

      danke für den Kommentar und die Anregung. Ich kann den Punkt nachvollziehen. Eigentlich finde ich auch klassische Schaltpläne besser lesbar. Das geht allerdings nicht jedem so. Ich weiß nicht, ob ich wirklich alles doppelt abbilden möchte. Da muss ich nochmal drüber nachdenken.

      VG, Wolfgang

  8. Hallo Herr Wolfgang,
    ich bin im Moment mit einem Projekt beschäftigt. Das Thema heißt: Messverstärker bauen. ich muss also einen Fluke i3000S Stromklemme nachmachen. Nicht die Spule nur der Elektronische Teil. ich habe die Platine entworfen. Sie ist sogar schon in meinem Besitzt. Die Funktioniert sehr gut bei 50Hz. Ich habe sogar einen sehr kleinen Phasenfehler im Vergleich zu Fluke.
    Mein Problem ist, wenn man an den Grundschwingung einen Oberschwingung kleiner als 1A bei 250Hz oder mehr hinzufügt, funktioniert meine Platine nicht mehr. Sie zeigt einfach Null. Die Platine funktioniert wieder einwandfrei, sobald ich mit der Oberschwingung über 1A gehe. Ich weißt im Moment nicht, wie ich dieses Problem lösen könnte. Ich arbeite mit dem OPV 177 und werde demnächst andere OPV Kombinationen versuchen, aber ich glaube auch nicht, dass das Problem an den OPV liegt.

    Bitte können Sie mir helfen?

    1. Hallo,

      Ich glaube, da muss ich leider sagen, dass ich nicht helfen kann. In diesem Bereich ist mein Wissen begrenzt. Vielleicht kann ein anderer Leser etwas dazu sagen? Kann man die Schwingungen vielleicht herausfiltern oder würde das die Messung verfälschen?

  9. Lieber Wolfang

    Kannst Du (ich sag einfach mal Du) mir sagen, bis zu welcher Verstärkung resp. welchem Verstärkungsfaktor man mit den oben beschriebenen OpAmps arbeiten kann (z.B. Verstärkungsfaktor 1000)? Wo sind hier die Limite? Welches sind die begrenzenden Teile/ Elemente? Besteht die Gefahr bei zu grosser Verstärkung, dass nur noch ein Rauschen verstärkt wird?

    1. Hallo Yves,

      der ideale Operationsverstärker kann unendlich verstärken. Ich habe die Grenzen nicht selbst ausgetestet, aber man findet doch an vielen Stellen Hinweise, dass Verstärkungen von 10000 bis über 100000 tatsächlich real möglich sind. Ein limitierender Faktor ist dabei die Betriebsspannung – mehr kann, salopp gesagt, nicht hinten rauskommen (meist auch noch weniger). D.h. wenn du den OPAMP mit sagen wir +/-12V betreibst und du gehst an die Grenzen, dann wärst du mit dem maximalen Eingangssignal bei einer Verstärkung von 100000 bei höchstens +/-120 µV. Da braucht man dann schon sehr rauscharme Eingangssignale, damit das Ganze Sinn macht. Eine genauere Antwort kann ich die nicht geben.

      VG, Wolfgang

    1. Hallo Manfred, schön wieder von dir zu hören. Vielen Dank für den Link – das ist dann die fortgeschrittene Variante. Passt gut zum Beitrag! VG, Wolfgang

Schreibe einen Kommentar

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