Forum: Mikrocontroller und Digitale Elektronik ESP32 ADC misst falsche Spannung


von Jonas B. (holocron)


Lesenswert?

Hallo,
ich wollte mit dem ESP32 ADC ein Spannungssignal messen. Das hat auch 
geklappt, als ich für die Schaltung (RC-Glied) die maximale Spannung 
verwendet hab. Weil diese aber zu groß für den ADC war (3.3 V, er misst 
nur bis 2.5 V) wollte ich mit dem DAC ein Spannungssignal erzeugen das 
bei 2.5 V liegt. Das hat auch geklappt (hab's mit dem Multimeter 
nachgemessen), nur wenn ich mit dem ADC messe kommen auf einmal seltsame 
Werte heraus. Die Spannung liegt auf einmal immer nur bei ~ 1.8 V (bzw. 
bei ~2990 in Bits, wobei die Auflösung auf 2¹² gestellt ist).
Hat jemand eine Idee woran das liegt?

Danke und Grüße

von Kevin M. (arduinolover)


Lesenswert?

Der ESP32 misst doch bis 3,3V soweit ich weiß. Das würde passen, 2990 
würde dann 2,41V entsprechen. Ich meine mich zu erinnern das der ADC 
nicht so ganz linear war und etwas unter dem eigentlichen Wert lag. 
Demnach wäre der gemessene Wert etwas größer als 2,41V. Mein alter ESP 
hatte bei ca. 3,25V seinen Maximalwert.

Eine Fehlerquelle könnte aber auch die Ausgangsimpedanz des DACs sein, 
sofern er intern keinen Buffer hat.

von Klaus R. (klara)


Lesenswert?

Jonas B. schrieb:
> Hat jemand eine Idee woran das liegt?

Ich habe noch etwas zur Vertiefung zum ADC.
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html#overview

Der eigentliche ADC misst nur von 0 V bis 1,1 V. Durch eine äußere 
Beschaltung mit einem Spannungsteiler kann er auch 3,3 V messen.

Es gibt sogar 2 ADC. Der zweite ADC wird allerdings auch beim WiFi vom 
System mitbenutzt. Also, so bald WiFi aktiv ist kann der ADC2 nicht 
genutzt werden.

Es gibt dann noch etwas zur Rauschminimierung und zur Kalibration.
mfg Klaus

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Jonas B. schrieb:
> Hat jemand eine Idee woran das liegt?

Der ADC ist ein grobes Schätzeisen

- Er hat einen DC Offset um 150mV.
- Die Referenzspannung kann bis 10% vom Ideal (1,1V) abweichen.
- Er misst nicht linear
- Er lässt sich vom HF Signal der WiFi Schnitstelle beeinflussen

Alles zusammen führt dazu, dass Abweichungen bis 20% völlig normal sind. 
Und wenn er gerade sendet, dann noch mehr.

> Die Spannung liegt auf einmal immer nur bei ~ 1.8 V (bzw.
> bei ~2990 in Bits, wobei die Auflösung auf 2¹² gestellt ist).

Hier würde ich erst mal eine andere Signalquelle an den ADC anschließen, 
zum Beispiel ein 10kΩ Poti. Und dann schauen, ob du dessen 
Ausgangsspannung halbwegs korrekt messen kannst. Wenn nicht, liegt wohl 
ein Softwarefehler vor. Und wenn es geht, dann hast du wohl ein Problem 
mit deinem DAC oder den Verbindungen dazwischen.

von Wolfgang (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Und dann schauen, ob du dessen Ausgangsspannung halbwegs korrekt messen
> kannst. Wenn nicht, liegt wohl ein Softwarefehler vor.
... oder es fehlt ein Kondensator.

von tester (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich hab mich auch mal gefragt wie man genauer messen kann ohne was an 
der Außenbeschaltung zu machen. Somit hab ich mir aus dem Internet ein 
Script zusammen "geklaut" und ein bisschen erweitert. Da sind fast alle 
ADC Einstellungsmöglichkeiten aufgeführt.

ich hatte das mal ein Tag laufen lassen und mir min/max/ist ausgegeben. 
Jeh nachdem was ich gemessen hab, war teilweise ein drift von mehr als 
200 dabei. Wobei ich versucht hab alles Temperatur stabil zu halten.

Verglichen habe ich normalen AnalogRead mit der "bessere Mess" Funktion 
ohne was an der Hardware zu ändern. Der drift ging durch die Funktion 
zurück.

Evtl hilft es dir ja, sonst scroll weiter ;)

Gruß

von Klaus R. (klara)


Lesenswert?

tester schrieb:
> ich hatte das mal ein Tag laufen lassen und mir min/max/ist ausgegeben.
> Jeh nachdem was ich gemessen hab, war teilweise ein drift von mehr als
> 200 dabei.

Oh je! Wenn das eine echte Drift ist, dann muß man den zu erwartenden 
Meßfehlerbereich deutlich erhöhen. Die Ungenauigkeit läge bei 5%. Wenn 
man einen Mittelwert hat, dann liegt der Toleranzbereich bei +/- 2,5%.

Frage: Du hast am ADC-Input Spannungen vorgegeben? Das waren 
Gleichspannungen die Du mit einem Meßgerät ausgemessen hast? Ein 
Rauschen war da nicht überlagert?

Gemäß espressif, Minimizing Noise, liegt das Rauschen bei grob +/- 20 
Bit, ohne 100 nF. Mit 100 nF geht es herunter auf grob +/- 5 Bit. Das 
schränkt aber die Bandbreite ein, je nach Innenwiderstand der Quelle.

Hier ist aber nach meiner Ansicht der Spannungsteiler, mit dem erst 
Messungen von 3,3 V möglich sind, noch berücksichtigt.

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html#minimizing-noise

Soll dieser Ausdruck die Messung linearisieren?
Woher kommt diese Info?
1
 return -0.000000000000016 * pow(reading, 4) + 0.000000000118171 * pow(reading, 3) - 0.000000301211691 * pow(reading, 2) + 0.001109019271794 * reading + 0.034143524634089;

mfg klaus

von tester (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

hab in vielen anderen Foren gelesen das der ADC wohl misst sein sollte. 
Dann bin ich auf den Github Post gestoßen.

https://github.com/G6EJD/ESP32-ADC-Accuracy-Improvement-function

getestet hatte ich ein Drucksensor der eine gleichbleibende Druck 
bekommen hat und ein Poti bei beiden das verhalten.

Drucksensor . 5V GND PIN34
Poti 3.3V PIN34 GND

die Drucksensor daten hab ich sogar gefunden. Alle 10 Sekunden wurde 
gemessen.

Klaus R. schrieb:
> Frage: Du hast am ADC-Input Spannungen vorgegeben? Das waren
> Gleichspannungen die Du mit einem Meßgerät ausgemessen hast? Ein
> Rauschen war da nicht überlagert?

Ja einmal durch ein Drucksensor und einmal ein Poti. Jop 
Gleichspannungen. Hab dir oben geschrieben wie ich das angeklemmt hab. 
Die Spannungen waren vom esp32 Diot Board.

Hab auch irgendwo gelesen, dass wenn man ADC2 nur benutzen soll wenn 
Wifi deativiert ist.

Drucksensor:
https://de.rs-online.com/web/p/entwicklungstools-sensorik/1887119/?relevancy-data=7365617263685F636173636164655F6F726465723D31267365617263685F696E746572666163655F6E616D653D4931384E53656172636847656E65726963267365617263685F6C616E67756167655F757365643D6465267365617263685F6D617463685F6D6F64653D6D61746368616C6C7061727469616C267365617263685F7061747465726E5F6D6174636865643D5E5B5C707B4C7D5C707B4E647D2D2C2F255C2E5D2B24267365617263685F7061747465726E5F6F726465723D313333267365617263685F73745F6E6F726D616C697365643D59267365617263685F726573706F6E73655F616374696F6E3D267365617263685F747970653D4B4559574F52445F53494E474C455F414C5048415F4E554D45524943267365617263685F7370656C6C5F636F72726563745F6170706C6965643D59267365617263685F77696C645F63617264696E675F6D6F64653D4E4F4E45267365617263685F6B6579776F72643D465352343032267365617263685F6B6579776F72645F6170703D465352343032267365617263685F636F6E6669673D3026&searchHistory=%7B%22enabled%22%3Atrue%7D

von tester (Gast)


Lesenswert?

ups,

in der Daten.txt

Zeit   : ADC-Value : Ist-Value : min-Value : max-Value : difference

von tester (Gast)


Lesenswert?

sry noch zu früh am morgen...

der zweite wert ist nicht direkt der ADC Value .. guckt einfach im Code 
der weiter oben gepostet wurde :)

von Stefan F. (Gast)


Lesenswert?

tester schrieb:
> getestet hatte ich ein Drucksensor der eine gleichbleibende Druck
> bekommen hat und ein Poti bei beiden das verhalten.

Kannst du bitte mal einen klaren Gedanken fassen und den dann auch 
unmissverständlich kommunizieren? Mit ist jetzt weder klar, was du 
gemacht hast, noch was dabei heraus gekommen ist.

Es kann ja wohl nicht so schwer sein, einfach mal ein Poti anschließen 
und dann die Messwerte für ein paar Einstellungen zu notieren:

Linker Anschlag Spannung=0V, Messwert=
Mitte Spannung=1,6V, Messwert=
Rechter Anschlag Spannung=3,3V, Messwert=

von tester (Gast)


Lesenswert?

:D okay.

esp32 Diot Board
Sensor: link oben
Porti: 10k

Spannungen vom Board genommen.

1. Gewichtsstück auf Sensor (5V Pin34 GND) gelegt 10 Stunden lang 
gemessen -> drift festgestellt.

2. Poti genommen (3.3V Pin34 GND) auf irgendeine Stellung eingestellt 
und 10 Stunden lang gemessen. Dift festgestellt.

Weiter oben ist der Code.

Sry für den ganzn Quatsch :D

Gruß

von Stefan F. (Gast)


Lesenswert?

Hallo tester,
ich habe dich mit Jonas verwechselt. Was den Drift angeht: Damit musst 
du leben. Der interne ADC des ESP ist halt kein Präzisions-Messgerät.

Hallo Jonas,
Mache bitte drei Messungen machen mit ganz bestimmten Spannungen machen. 
Nur dann kann man prüfen, ob das Ergebnis korrekt ist. Wenn es nicht 
korrekt ist, dann geben die konkreten Zahlen mit Glück sogar einen 
Hinweis zur Fehlerursache.

Linker Anschlag Spannung=0V, Messwert=
Mitte Spannung=1,6V, Messwert=
Rechter Anschlag Spannung=3,3V, Messwert=

von tester (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wenn du irgendwas misst, bekommt du irgendwelche Messwerte. Da kann man
> kaum klare Aussagen darüber treffen, ob die Messwerte nun richtig oder
> falsch sind.
Das mir auch klar :D

Stefan ⛄ F. schrieb:
> Also nochmal:
>
> Linker Anschlag Spannung=0V, Messwert=
> Mitte Spannung=1,6V, Messwert=
> Rechter Anschlag Spannung=3,3V, Messwert=

Das war für mich irrelevant. Ich wollte nur eine stabile Messung über 
Zeit. Sry das das alles für Verwirrung gesorgt hat.

War doch wohl nicht passend zum Thema.

Mir ist das aufgefallen weil ich Gehäuse Verformungen über 3 Monate 
messen wollte (bzw. bleibt der Aufbau druck stabil) oder sind die 
Gehäusewände zu dünn gewählt. Dabei ist mir das driften aufgefallen und 
hab mir ein externen ADC besorgt.

PEACE

von Stefan F. (Gast)


Lesenswert?

> Mache bitte drei Messungen machen mit ganz bestimmten Spannungen machen.

Und vergiss nicht, es zu machen :-)
Was war da los?

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
Noch kein Account? Hier anmelden.