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.
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.
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.
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.
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.
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.
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?
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.
Das sehe ich aber nicht als brauchbare Lösung, sondern eher als einen Fehler umschiffen.
Nicht umsonst hat der Atmega328 entsprechende Technik eingebaut.
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.