Hallo zusammen, ich möchte mit einem ESP32 einen analogen Messwert erfassen. Wenn ich den Input mit einem 10k Drehpotentiometer beschalte, dass einen Spannungsteiler zwischen GND und 3.3V aufspannt, funktioniert das: Ich messe den erwarteten Zahlenwert zwischen 0 und 4095 je nach Lage des Potis. Trivial. Aber: Wenn ich den Input Pin ausschließlich über einen 470 Ohm Widerstand gegen GND beschalte, erhalte ich die im Anhang geplotteten Werte (Abstand zwischen dne Messwerten: 1 sec): - es gibt jeweils eine zeitlang (20-30 sec) dauerhaft den erwarteten Wert 0 - der erhaltene wert steigt auf Werte bis ca 240 an und fällt wieder auf 0 ab (Dauer jeweils 30 - 60 sec). Woher kommt das und was kann ich dagegen tun? Der Artikel in Beitrag "ESP32 Analog Wert am Spannungsteiler ungenau vs Arduino Analog Wert" und auch die ESP32 Doku beschreibt, dass der ADC ungenau bzw. unlinear ist. Aber daraus kann ich mir nicht diese zyklischen Schwankungen ableiten. Was ich schon ausgeschlossen habe: - WLAN-Schnittstelle ist deaktiviert - verschiedene Inputs zeigen das gleiche Verhalten (z.B: Input 0 und Input 32) - verschiedene Devices am USB-Port (unterschiedliche Computer, Netzteile, USB-Kabel), da es Hinweise im Netzt gibt , dass der ESP Probleme mit der Spannugnsversorgung haben kann: https://arduino-hannover.de/2018/07/25/die-tuecken-der-esp32-stromversorgung/ - setup des IOs mit "pinMode(analogpin,INPUT_PULLUP)" statt nur "pinMode(analogpin,INPUT)" (ich programmiere den ESP32 mit Arduino) Wozu das alles? Ich habe einen Stromzähler mit 4-20mA Ausgang (aktiv). Ich möchte den Sensor per ESP32 auslesen. Dazu soll der Spannungsabfall über der Bürde am analog-IO-Pin des ESP gemessen werden. Ich weiß: dafür gibt es extra Sensor-Schaltungen, die per I2C angebunden werden können. Aber warum sollte das nicht auch so funktionieren? Und das obige Problem tritt ganz ohne angeschlossenen Sensor auf: einfach nur ein Widerstand zwischen IO-Pin und GND und sonst nichts.
Ulrich Winter schrieb: > Woher kommt das und was kann ich dagegen tun? Mal am Eingang messen (Oszi, MM) was tatsächlich anliegt? Welche Einheit haben die ominösen "240"?
Ulrich Winter schrieb: > Woher kommt das und was kann ich dagegen tun? Wie sieht die tatsächliche Schaltungsaufbau samt Stromversorgung aus? Ist der "GND" bei der 240 Ohm Lösung der selbe wie bei der Spannungsteiler-Variante? > den erwarteten Zahlenwert zwischen 0 und 4095 je nach Lage des Potis. Und der ist auch dauerhaft stabil, wenn du das Poti z.B. auf den Wert 100 einstellst?
:
Bearbeitet durch Moderator
Ulrich Winter schrieb: > Woher kommt das und was kann ich dagegen tun? Benutzt Du ein Steckbrett? mfg Klaus
ja. Außerdem habe ich auch schon einen Ladekondensator 100nF zwischen Input und GND geschaltet. Wie hier empfohlen: Beitrag "Re: ESP32 Analog Wert am Spannungsteiler ungenau vs Arduino Analog Wert"
Nick M. schrieb: > Welche Einheit haben die ominösen "240"? Das ist der Zahlenwert des 12Bit AD-Wandlers am analogen Eingang. 0: 0V 4095: 100% des Messbereiches: in diesem Fall 3.3V Wenn ich an den Input das Drehpoti anschließe, liegen diese Werte genau in diesem Bereich: 0 bis 4095 je nach Stellung. > Mal am Eingang messen (Oszi, MM) was tatsächlich anliegt? Guter Punkt. Oszi hab ich keines. Multimeter: zwischen Input-PIN und GND: Hier messe ich 2 mV Aber: So lange die Multimeter-Messspitzen anliegen, liefert der ADC konstant den Wert 0. Nehme ich die Messspitzen wieder weg, schwankt der Zahlenwert, den "analogRead()" liefert wieder.
Lothar M. schrieb: > Ulrich W. schrieb: >> ja. > ... ist die Antwort auf welche der 6 Fragen? Sorry, für die Unachtsamkeit. die Frage war: >Benutzt Du ein Steckbrett? JA ich benutze ein Steckbrett.
Ulrich W. schrieb: > Nehme ich die Messspitzen wieder weg, schwankt der Zahlenwert, den > "analogRead()" liefert wieder. Na, dann weißt du ja wo du suchen musst. Jedenfalls nicht im Code, sondern der 'Mechanik'. Lötstelle? Gar keine Masseverbindung? Wackelkontakt?
Lothar M. schrieb: > Ulrich Winter schrieb: >> Woher kommt das und was kann ich dagegen tun? > Wie sieht die tatsächliche Schaltungsaufbau samt Stromversorgung aus? Ich habe ein Modul "NodeMCU 'ESP32" von Joy-IT http://anleitung.joy-it.net/?goods=nodemcu-esp32 Das wird über USB mit Strom versorgt. Das ist der selbe USB-Port, über den auch die Arduino-IDE den code hochlädt, bzw. die Messwerte über den Seriellen Port ausgelesen werden. Das Modul steckt auf einem Breadboard. An das Modul angeschlossen sind: - der genannte 470 Ohm Widerstand zwischen PIN 33 und dem GND-Pin des DevModuls - der 100nF Ladekondensator zwischen PIN 33 und GND (den kann ich weglassen, da ändert sich nix) > Ist der "GND" bei der 240 Ohm Lösung der selbe wie bei der > Spannungsteiler-Variante? ja - identisch. Nur ist eben bei der Spannungsteiler-Variante auch der 3.3V-Pin des Dev-Moduls an den 3. Pin des Potis angeschlossen. >> den erwarteten Zahlenwert zwischen 0 und 4095 je nach Lage des Potis. > Und der ist auch dauerhaft stabil, wenn du das Poti z.B. auf den Wert > 100 einstellst? Ja - hab ich schon minutenlang laufen lassen. Da schwankt nix.
Ulrich W. schrieb: > Ja - hab ich schon minutenlang laufen lassen. > Da schwankt nix. Dann nimm mal deine "Potilösung", stell das Poti "unten" auf 470 Ohm ein und lass den "oberen" 3,3V Anschluss offen:
1 | 3V3 o-- |
2 | |
3 | |
4 | x |
5 | | |
6 | - |
7 | | | |
8 | | | |
9 | | | |
10 | | |<----->> ADC-Eingang |
11 | | | 470R |
12 | - µC |
13 | | |
14 | GND o------o------->> GND |
Was passiert?
:
Bearbeitet durch Moderator
Nick M. schrieb: > Ulrich W. schrieb: >> Nehme ich die Messspitzen wieder weg, schwankt der Zahlenwert, den >> "analogRead()" liefert wieder. > > Na, dann weißt du ja wo du suchen musst. Jedenfalls nicht im Code, > sondern der 'Mechanik'. > Lötstelle? Gar keine Masseverbindung? Wackelkontakt? Die Frage ist nur, was da getan werden kann. Die Schaltung steckt auf einem Steckbrett (siehe Foto). Ich habe alle Verbindungen mehrfach neu gesteckt. Es sind ja nicht viele: nur der Widerstand und zwei Drahtbrücken.
Lothar M. schrieb: > Dann nimm mal deine "Potilösung", stell das Poti "unten" auf 470 Ohm ein > und lass den "oberen" 3,3V Anschluss offen: > Was passiert? Alles klar - Problem gefunden: Die Versorgungsleitungen am Rand des Steckbrettes sind in der Mitte unterbrochen. (In dem Foto der Schaltung ist an den Stellen ein "W" im Brett zu sehen.) D.h. der Widerstand war nicht mit GND verbunden. Der IO-Pin war also letztlich offen. Anfängerfehler. Vielen Dank allen Beteiligten.
Ulrich W. schrieb: > (siehe Foto). Ich vermute: Dort wo das W auf dem Steckbrett zu finden ist, sind die langen Leiterbahnen unterbrochen. Der Rechte Schaltungsteil ist somit abgekoppelt. EDIT: Zu spät, aber doppelt hält besser.
Ulrich W. schrieb: > D.h. der Widerstand war nicht mit GND verbunden. Da hattest du aber echt "Glück", dass am Poti die 3,3V anlagen. Einen Pin weiter und du hättest diesen "W"-Effekt selber herausgefunden. > Alles klar - Problem gefunden Deshalb gleich meine allererste Frage nach dem realen Aufbau... ;-)
:
Bearbeitet durch Moderator
Ich finde es dennoch spannend, dass da an einem offenen ADC-Eingang so ein Verlauf erscheint. Also nicht irgendwelche Zufallswerte, sondern eben sowas wie ein Signal, das langsam ansteigt und auch zeitweise (10-20 sec) ganz auf 0 liegt. Lässt sich sowas erklären?
Ulrich W. schrieb: > Lässt sich sowas erklären? Ja klar! Ein offener Eingang ist eine Antenne, welche jeden Dreck, den das Universum von sich gibt, einsammelt und an deine Auswertungseinheit weiter gibt. Wo das Signal her kommt, und wie es aussieht, ist dabei total uninteressant. Dreck ist Dreck, und bleibt Dreck.
Ulrich W. schrieb: > Lässt sich sowas erklären? Interferenzartefakte durch Unterabtastung. Ein auch mit digitalen Oszis gern gemachter Messfehler: https://de.wikipedia.org/wiki/Alias-Effekt Wenn du schnell genug abgetastet (so im kHz-Bereich), wirst du sehen, dass da viel, viel mehr passiert als du da siehst.
:
Bearbeitet durch Moderator
Ulrich W. schrieb: > Ich finde es dennoch spannend, dass da an einem offenen ADC-Eingang so > ein Verlauf erscheint. Kommt vom Funksignal. Offene Leitungen empfangen Funksignale und in Kombination mit den ESD Schutzdioden im Eingang des Mikrocontrollers hast du einen Gleichrichtenden Effekt, daher positive Messwerte. Wenn du das mal mit einem empfindlichen Mikrofon-Verstärker machst kannst du auf diese Art mit etwas Glück einen Radiosender empfangen.
Bin zwar jetzt auch zu spät, aber genau diesen Effekt hatte ich bei Arduino auch, als dort mal de Masse zum AD-Eingang fehlte. Hat also alles "richtig" gemacht und der ESP ist auch "ok" :O) Same Procedure as every Year!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.