ESP32: zyklische Schwankungen bei analogem Input

Gast #6149350
Lesenswert?

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.
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #6149398
Lesenswert?

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?
#6149602
Lesenswert?

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.
#6149625
Lesenswert?

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.
Moderator (Firma: Titel) Persönliche Seite #6149640
Lesenswert?

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?
#6149644
Lesenswert?

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.
Angehängte Dateien:
#6149662
Lesenswert?

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.
Gast #6149693
Lesenswert?

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.
Gast #6149810
Lesenswert?

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.
Gast #6149847
Lesenswert?

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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren