Voltmeter mit LCD erzeugt Induktionen

Hallo,

ich habe mir ein Gleichspannungs-Voltmeter auf der Basis eines Arduino Nano zusammengestöpselt und mit einem 20x4 LCD von WayinTop verbunden. Das Ganze soll als Batteriespannungsprüfer dienen. Im Prinzip funktioniert auch alles, aber es macht doch einen deutlichen Unterschied, ob das LCD angeschlossen ist oder nicht. Ohne das LCD werden bei 0 V Eingangsspannung auch 0 V auf dem Serial-Monitor angezeigt. Mit LCD erscheinen bei 0 V Eingangsspannung plötzlich Werte, die bis zu 0,3 V betragen können. Positive Spannungen erscheinen entsprechend erhöht. Ein 9 V Akku, für den ohne LCD 9,08 V auf dem Serial-Monitor angezeigt werden, bringt es bei angeschlossenem LCD plötzlich auf bis zu 9,5 V. Die Stärke des Messfehlers hängt davon ab, wo ich die Drähte vom LCD zum Nano hinbiege. Irgendwo fängt sich der Nano offenbar eine induktive Spannung ein, die die Messung additiv überlagert, sobald das LCD ins Spiel kommt. Wie kann ich das unterbinden?

Anbei ein Prinzip-Schaltbild, ein Verdrahtungsfoto und der Sketch.

Wie man aus dem Schaltbild ersehen kann, verwende ich einen Spannungsteiler für die Messung. R1 hat einen Wert von 100 kOhm und R2 einen Wert von 10 kOhm.

Hier noch der Sketch:

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

int analogInput = 0;
float vin = 0.0;
int values = 0;

void setup() {

  Serial.begin(9600); //Seriellen Monitor einbinden
  pinMode(analogInput, INPUT);

  lcd.init();                  // LCD initialisieren
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Spannung: ");

}

void loop() {

  values = analogRead(analogInput);   // Werte am analogen Pin auslesen
  vin    = values * 55.0 / 1024.0;            // Messwerte in Volt umrechnen = zu messende Spannung
  
  lcd.setCursor(10, 0);
  lcd.print(vin);
  lcd.print(" V");

  Serial.print("Digital values: ");
  Serial.print(values);
  Serial.print(" V = ");
  Serial.println(vin); // Messwerte am anologen Pin im seriellen Monitor anzeigen

  delay(1000);

}

Vielen Dank für Eure Unterstützung

So wie das aussieht hast Du da das China Board im einsatz. Keine Angst habe ich auch die Teile. Aber nimm mal dein Messgerät und schau mal wie schön diese Verbindungen wackeln. Die haben auch schon mal leicht 6 Ohm od. mehr.
Dann bewegst das LCD und irgendwas wackelt an den Leitungen.
So meine vermutung.

Hallo,

mess doch mal die Versorgungsspannung (5V) mit und ohne Display. Vermutlich geht die etwas runter. Damit sinkt auch die Vref für den AD-Wandler. Du könntest mit analogReference(EXTERNAL);” auf den externen Pin als Referenzspannung umschalten und dann eine stabile Referenzspannung (mit einer Referenzspannungsdiode) zur Verfügung stellen.

Gruß Bepo

1 Like

Algemein ist so ein Aufbau nur für Test, ich nutze

Damit isr alles fest verbunden.
Manchmal lochstreifen Platine mit Buchsen fur den Nano, und alles verlötet

Zum test A1, A2, A3 mit GND vrbinden

Hallo fullcane,

halte doch mal einen Magnet an die Verbindungsleitungen. Wenn es da eine Anziehung gibt, ist statt Kupfer Eisen verbaut und das macht mit seinem Widerstand gerne mal Probleme.

Nicht das Eisen, Probleme macht das Steckboard, wenn schon, ausgeleiert.

Dein Problem hat nichts mit Induktion zu tun.
Da fällt einfach die Betriebsspannung deines Nanos zusammen, die du als Referenz verwendest. Nutze die interne Referenz des Nanos und dein Problem wird kleiner.

Durch meine Bemerkung, dass das Bewegen der Drähte einen Einfluss auf die Messung hat, habe ich hier vielleicht einige auf eine falsche Fährte gebracht. Es geht nicht um Wackelkontakte, sondern um das Phänomen, dass durch das Anschließen des LCD an A0 eine höhere Spannung anliegt als ohne LCD. Statt 0 V wie im Lehrbuch bekomme ich plötzlich einen leicht positiven Wert, der anscheinend Induktionsbedingt schwankt und ich möchte verstehen, wo der herkommt und wie ich ihn neutralisieren kann. Das gilt übrigens auch, wenn ich A0 einfach mit GND verbinde. A1, A2 und A3 mit GND verbinden wie von fony empfohlen hat das Phänomen leider nicht beseitigen können.

Dann lies mal Post #7

sorry, einen Post habe ich übersehen, weil er reinkam während ich noch am Schreiben war. Dein Hinweis klingt so wie der von Bepo, aber ich rätsele noch, wie ich das mit der Referenzspannung anstellen soll.

Z.B. so:

void setup() {
  // Analoge Referenz auf intern 1.1V setzen
  analogReference(INTERNAL);
}

Und wer ist Bepo ?
Den sehe ich hier nicht.

Danke! Langsam komme ich dahinter. Die Versorgungsspannung am 5 V Pin sinkt tatsächlich um ca. 0,4 V, wenn ich das LCD anschließe. Allerdings verstehe ich noch nicht, wieso der Spannungsabfall nicht konstant ist, sondern um +- 0,2 V schwankt. Kann ich das mit analogReference(INTERNAL) stabilisieren?

Post #3

Ja, genau, das ist der Sinn dieser "Referenzspannung".

Und sorry, den Beitrag habe ich tatsächlich übersehen.
Somit ist der @arduinobepo-15 mir zuvor gekommen.

Die Stromaufnahme ist halt nicht konstant.

Nein, die Änderung der Versorgungsspannung durch das zusätzlich angeschlossene LCD kannst Du damit nicht beheben.

Die Verwendung der internen Referenzspannung für den AD-Wandler eliminiert nur den Effekt beim Messen der Versorgungsspannung mit dem ADC.

ich habe mir jetzt eine etwas andere Lösung ausgedacht. Den Spannungsteiler habe ich der Einfachheit erstmal weggelassen und habe A1 (uboundPin) mit dem 5V Pin verbunden und A2 (lboundPin) mit GND. Bevor ich jetzt einen Digitalwert an A0 (mPin) auslese, lese ich unmittelbar davor die (schwankenden) Messwerte an A1 (uvalue) und A2 (lvalue) aus. Bei der Berechnung der Spannung an A0 korrigiere ich den Sollwert von 5 V um den Faktor (uvalue-lvalue) / 1023.0. Auch den Messwert korrigiere ich entsprechend.

Das sieht im Code dann so aus:

  uvalue = analogRead(uboundPin);        // digitalen Spannungswert von Vin an A1 auslesen
  lvalue = analogRead(lboundPin);        // digitalen Spannungswert von GND an A2 auslesen
  mvalue = analogRead(mPin);             // digitalen Spannungswert der zu messenden Spannungsquelle an A0 auslesen
  vin = (5.0 * (uvalue-lvalue)  / 1023.0) * (mvalue-lvalue) / 1023.0;

Wenn ich jetzt A0 mit dem 5V-Pin verbinde, bekomme ich (bei angeschlossenem LCD) ca. 4,9 V angezeigt. Wenn ich A0 mit dem 3,3 V Pin verbinde, bekomme ich ca. 3,28 V angezeigt. Wenn ich A0 mit GND verbinde, bekomme ich exakt 0,00 V angezeigt. Ohne angeschlossenes LCD treten keine Spannungsschwankungen auf und ich bekomme im Serial Monitor immer exakt 5,00 V am 5V Pin, 3,31 V am 3,3V Pin und 0,00 V an GND angezeigt. Die Ergebnisse stimmen auch mit dem überein, was ich mit einem externen Spannungsmesser angezeigt bekomme.

Die Sache scheint insoweit prima zu funktionieren. Wenn es nichts Weiteres daran zu kritisieren gibt, betrachte ich das Problem hiermit als gelöst.

  • Mein Vorschlag wäre auch - nimm die interne Referenz.
  • Berechne deinen Spannungsteiler so hin, dass am Analogeingang max. 1.1 V anliegen können.
  • Sorge dafür, dass die Summe deiner Widerstände des Spannungsteilers zwischen 10K und 20K ist.

Das sehe ich aber nicht als brauchbare Lösung, sondern eher als einen Fehler umschiffen.
Nicht umsonst hat der Atmega328 entsprechende Technik eingebaut.

Da bist Du nicht allein mit dieser Meinung.

Mann kann ein Denkfehler nur beheben wenn man richtig macht . Nechme doch die 1.1V Referenz, wo aber mann muss sagen das auf grund Toleranzen die kann abweichen, jedoch bleibt immer Stabil im Spanungsbereich des ATmega 328P.
Wenn es geht um die Toleranzen dan bei 2 Nachkommastellen gibt es wo möglich 0.001V Fehler, dazu kommt das der 328P hat nur eine 10 Bit Abtastrate.