Ich mache zu dem Thema am besten mal einen neuen Thread auf anstatt den alten mit ungenauem Titel weiterzuverwenden.
Eigentlich ist der ESP32 ja ein toller Controller, aber nach einigem Lesen stellt man fest, daß die Chinesen zwar laut Datenblatt gerne gekonnt hätten, aber es dann stellenweise leider doch nicht so gut konnten. Bestes Beispiel ist der ADC, der zwar viele Kanäle und 12 Bit hat, dafür aber mit großen Nichtlinearitäten und hohem Offsetfehler glänzt, zudem ist er sehr viel langsamer als im Datenblatt angegeben.
Ich würde trotzdem gerne eine MSR-Aufgabe mit diesem Schaltkreis probieren, die WLAN-Konnektivität ist der ausschlaggebende Punkt, aber ich brauche trotzdem einen einsetzbaren ADC.
Daher die Frage, wie holt man zumindest in dem Messbereich, in dem der ADC des EPS32 ausreichend linear arbeitet, das beste Ergebnis heraus? Wer hat Erfahrungen mit dem ADC, was machen machen sollte und was besser nicht bzw. was hat keinen Sinn?
Die Alternative wäre sicherlich ein externer 8fach 12/16Bit ADC, der sich über SPI oder I2C anbinden lässt, aber habe ich nicht da, kostet Geld und ich wüsste auch erstmal keinen, bzw. nur 4fach gibt's bei der Arduino-Fraktion gute Lösungsansätze. Aber dann brauche ich auch keinen ESP32, dann kann ich die eigentliche Regelaufgabe auch mit einem AVR machen und zur Kommunikation den einfacheren ESP8266 verwenden.
Die Alternative wäre sicherlich ein externer 8fach 12/16Bit ADC, der
sich über SPI oder I2C anbinden lässt, aber habe ich nicht da, kostet
Geld und ich wüsste auch erstmal keinen
So unintelligent, wie es klingt ist es nicht, wenn die ADC über ein kleines Binärprogramm (in Assembler geschrieben) die Werte einlesen würden. (Hobby)Theoretisch bringt das was, praktisch ist es vergeudete Lebenszeit.
Wenn es noch viel langsamer sein darf, wäre "Oversampling" beim Einlesen ein Methode. Hierzu gibt man zusätzliche bekannte modulierte kleine Störspannungen auf den Eingang und rechnet das korrigierend heraus.
Die Alternative wäre sicherlich ein externer 8fach 12/16Bit ADC, der
sich über SPI oder I2C anbinden lässt, aber habe ich nicht da, kostet
Geld und ich wüsste auch erstmal keinen
Ich würde trotzdem gerne eine MSR-Aufgabe mit diesem Schaltkreis
probieren, die WLAN-Konnektivität ist der ausschlaggebende Punkt, aber
ich brauche trotzdem einen einsetzbaren ADC.
Was ist denn die Aufgabe? Ich vermute das für deine Aufgabe der ESP schon ausreichend gut genug ist und falls nicht, eine Kalibrierung in Software ausreichend ist.
Danke euch allen und danke für die Links, da habe ich erstmal was zum Lesen.
Oversampling wäre das einzige, was mir bislang brauchbar erschien. Die aktive Einkopplung einer Störspannung kann man sich beim ESP32 sparen, das macht der mit aktiviertem WiFi ganz alleine.
Ich wollte erst einmal ein wenig mit dem Ding herumprobieren, evtl. mal einen Solar-MPP-Tracker damit bauen. Wenn er das kann, dann reicht er für alles andere auch.
Solange WLAN aktiv ist, bleiben dir von den vielen Bits des ADC nicht einmal 8 Bits übrig. Der größte Knackpunkt ist die Nähe des zum RF Schaltkreis. Die Naturgesetze gelten auch für Espressif.
Auch ich empfehle dir die Nutzung eines externen ADC. Mit dem MCP3208 bin ich sehr gut zurecht gekommen. Abstand zum ESP Modul, eine gut gefilterte Stromversorgung, niederohmige Widerstände und eine externe Antenne können hilfreich sein.
Solange WLAN aktiv ist, bleiben dir von den
vielen Bits des ADC nicht einmal 8 Bits übrig.
Mich würde interessieren ob das auch noch gilt wenn ich 64 oder 128 ADC-Messungen zusammenaddiere und die unteren 6/7 Bits vom Ergebnis wegschmeiße. Wie genau ist der Teil, der dann noch stehenbleibt?
Mich würde interessieren ob das auch noch gilt wenn ich 64 oder 128
ADC-Messungen zusammenaddiere und die unteren 6/7 Bits vom Ergebnis
wegschmeiße. Wie genau ist der Teil, der dann noch stehenbleibt?
Das wirst du im Einzelfall durchprobieren müssen. Bedenke, dass die Aktivität im WLAN kaum vorhersehbar ist und ganz andere Störungen verursacht, als allgemeines Rauschen.
Yep, sehe das schon kommen... aber wenns schiefgeht kann ich die Platine mit dem ESP32 immer noch wieder runternehmen und stattdessen eine mit AVR oder externen ADCs draufpacken, dann würde die Schaltung immerhin trotzdem funktionieren.
Was ich mit dem ESP32-Board mal testen werde: 47k/47k Spannungsteiler mit 3,3V an den ADC-Eingang, mal mit und mal ohne Abblock-C, WiFi im Access-Point Mode (dann hat man alle 100ms schicke Beacons) und mal schauen was passiert, evtl. ein kurzes Script drauf was den Mittelwert über viele Messungen und die maximalen Abweichungen speichert.
Für den "professionellen Einsatz" habe ich mich schon damit abgefunden, daß die internen ADCs nicht zu gebrauchen sind und man zwingend was externes braucht. Schade, macht solche Projekte dann wieder ein gutes Stück teurer.
Zu hochohmig, da streut dir das Funksignal stark rein. Gehe auf 2,2 kΩ runter oder schalte einen Kondensator parallel zum "unteren" Widerstand, um HF Anteile kurz zu schließen.
mal mit und mal ohne Abblock-C
Meinst du damit einen Abblock-Kondensator an der Stromversorgung? Auf den sollte man nie verzichten. Typischerweise 100 bis 220 µF an VCC/GND zusätzlich zu den kleineren Kondensatoren, die sich bereits unter dem Abschirmblech befinden.
Ich versuche es eigentlich zu vermeiden, mehr als 0,5 oder 0,1mA durch solche Spannungsregler zu jagen - ich will einfach sehen wie schlecht das Ergebnis wirklich wird.
Praktisch nehme ich für sowas gerne 10k als unteren Spannungsteilerwiderstand, oder 4,7k wenn's sein muss, aber das ist dann echt schon viel Strom durch das Ding. Normalerweise wird das Ergebnis eines (10 Bit) AVR-ADCs mit 10k/10nF schon sehr gut und stabil.
Meinst du damit einen Abblock-Kondensator an der Stromversorgung?
Nein, daß man den nicht weglassen darf, ist mir klar.
Ich meinte den Kondensator parallel zum unteren Spannungsteilerwiderstand, mit dem man sonst versucht, ein stabileres Signal hinzukriegen. Espressif selbst hätte da gerne satte 100nF an ADC-Pins, aber wenn man etwas mehr Streuung für Oversampling möchte, dann interessiert mich, in welchen Bereichen man damit arbeiten kann.
Solange WLAN aktiv ist, bleiben dir von den vielen Bits des ADC nicht
einmal 8 Bits übrig.
Was verstehst du unter "WLAN aktiv"?
Solange gerade nicht gesendet wird, kann sooh viel schlimmes nicht passieren.
Ansonsten ist es vielleicht sinnvoll, ADC- und WLAN-Aktivität zeitlich aufeinander abzustimmen.
Ansonsten ist es vielleicht sinnvoll, ADC- und WLAN-Aktivität
zeitlich aufeinander abzustimmen.
Keine Chance, man weiß ja nicht wann über die WLAN-Verbindung Daten hereinkommen und ich weiß nicht ob der IC sowas kann wie RX only und dann später kein TX mehr nachdem man die Antwort gesendet hat. Kein Plan, ob man das synchronisiert bekommt, selbst bei nur RX müsste man ja auch ein Ack senden, nachdem man einen Datenframe empfangen hat.
Dabei will man das Eigen-Rauschen des ADC nutzen,
die zu messende Spannung muss stabil sein.
Nein. Der ADC des AVR z.B. ist in sich so stabil, daß das eigene Rauschen dafür nicht reicht. Man kann das Oversampling ja auch benutzen, um einem ADC zu mehr Auflösung zu verhelfen - dazu pro zusätzlichem Bit die Samples vervierfachen, alles addieren und das Ergebnis halbieren. Wenn das Rauschen zu gering ist, entstehen Treppeneffekte und dann muss man ein zusätzliches Störsignal in die Messgröße oder in die Referenzspannung einkoppeln.
Mich interessiert im Moment, ob man das Ergebnis damit einfach nur stabil und ausreichend genau bekommt, wenn man z.B. 128 Messungen addiert, aber keine zusätzlichen Bits nutzt. 12 Bit Auflösung würden mir eigentlich reichen, aber Auflösung alleine bringt genau gar nichts wenn die Genauigkeit für'n Arsch ist und sich auch nicht durch eine einfache Offset-Kompensation zurechtbiegen lässt.
Mich interessiert im Moment, ob man das Ergebnis damit einfach nur
stabil und ausreichend genau bekommt, wenn man z.B. 128 Messungen
addiert,
Wenn die WLAN-Störungen die Anzahl der effektiven Bits gegenüber der Wandlerauflösung um vier reduziert, d.h. um einen Faktor 16, sollte Oversampling mit einem Faktor 256 (=(16)^2) die Sache wieder gerade biegen - vorausgesetzt die Störungen sind ausreichend stationär und unkorreliert. Genau das könnte zum Problem werden. ;-)