Hallo Zusammen, ich beschäftige mich gerade mit einer Schaltung mit AD-Wandler. ich habe aber ein Problem mit der Eingangsspannung. wenn ich die Spannung mit LtSpice Simuliere komme ich auf den Richtigen Wert, allerdings variiert der Wert wenn ich es mit der Formel vom ADC berechne ----> Uin= ADC*Uref/2^n. ich berechne eine Abweichung von fast 0.003 V. ich weiss aber nicht woran es liegt. hat jemand zufällig eine Antwort. Danke im Voraus.
Vermutlich hast du vergessen zu berücksichtigen, dass Uin= ADC*Uref/2^n nur näherungsweise gilt und unterschlägt, dass ein kleiner Strom in den ADC Eingang fließt?
Naja, die Formel ist falsch. Off by one. 8 bit., Nur sind's dann eher 4 mV.
welche Formel soll ich hier benutzen? Joe F. schrieb: > ermutlich hast du vergessen zu berücksichtigen, dass Uin= ADC*Uref/2^n > nur näherungsweise gilt und unterschlägt,
ADC schrieb: > ich berechne eine Abweichung von fast 0.003 V das klingt bei dir ja fast so als ob das viel sein sollte, 3mV. Vlt. zeigst du mal eine Schaltung?
Off by one heißt: einen daneben. Du teilst durch 2^n, der Maximalwert ist aber 2^n-1. Also bei 8 bit durch 255 teilen, nicht 256.
ADC schrieb: > ich habe aber ein Problem mit der Eingangsspannung. wenn ich die > Spannung mit LtSpice Simuliere komme ich auf den Richtigen Wert, > allerdings variiert der Wert wenn ich es mit der Formel vom ADC berechne > ----> Uin= ADC*Uref/2^n. > > ich berechne eine Abweichung von fast 0.003 V. LTSpice ist nur eine Schaltungssimulation. Wenn das Ergebnis der Rechnung oder der Simulation vom richtige Wert abweichen, passen Rechnung und/oder Simulation, die auch nur eine Rechnung ist, nicht zur Realität. Also was simulierst du in LTSpice? Woher hast du den "richtigen Wert"? Was genau soll deine Formel beschreiben? Beispiel: Ein ADC mit 4 Bit kann 16 Werte annehmen, also gäbe es zwischen 0V und URef genau 15 Intervalle (Zwischenräume). Wie kommst du in diesem Zusammenhang auf obige Formel?
A. S. schrieb: > Also bei 8 bit durch 255 teilen, nicht 256. Nö. Beim Skalieren/Umrechnen ist die Länge der Skala entscheidend, also 256, nicht der Maximalwert der Skala.
Leera schrieb: > Beim Skalieren/Umrechnen ist die Länge der Skala entscheidend, > also 256, nicht der Maximalwert der Skala. Die Standardkonvention ist, dass Du mit einer Referenz von 5V eine Spannung von 0..5V messen kannst, d.h. der ADC dies in Wert von 0..2^n-1 wandelt. Wenn Du nun bei 8 (oder n) Bits den ADC-Wert entsprechend skalierst (U=5V*ADC/256), dann ist der maximal mögliche Wert 5V*255/256. Und das sind halt nicht 5V. Man nennt das "off by one" oder "Zaunlattenproblem". Das führt auch immer zu der interessanten Frage, wie der ADC den Wert 0 bzw. 2^n-1 behandeln soll. Beispiel: Ein ADC wandelt 0..1V in Werte von 0..10. Da würde man annehmen, die Umschaltschwellen liegen bei 0.05V, 0.15, … 0.95V. Ein Wert von 3 entspricht dann 0.3V+-0.05V. Dabei überdecken die Rand-Werte (0 und 10) aber nur ein halbes Bit ;-)
Zum Thema ADC-Kennlinie gibt es längere Abhandlungen, z.B. die AN2438 ADC Definitions and Specifications von J.Feddeler und B.Lucas (freescale Semi, jetzt NXP) https://www.nxp.com/docs/en/application-note/AN2438.pdf
Hi, Ich muss leider sagen, dass ich nichts verstanden habe. Könnte sich jemand erbahmen und mich etwas unterstützen? Meine Fähigkeiten liegen eher in der 3d Modell-Erstellung, 3d Druck und Holz + Leder Bearbeitung. Jedenfalls baue ich mit Hilfe eines Esp32 und eines kapazetiven Erdfeuchte Messer von Alibaba eine Pflanzesteuerung. Nun scheitere ich am auslesen des Signals, weil ich es nicht auf die 1v für den ADC Pin runter bekomme. Habe bereits eine Schaltung mit 3,3v Eingang, 47k und 10k Ohmen in Reihe geschalteten Widerstände gebaut und zwischen den beiden Widerständen eine Gound Verbindung gemessen. Hier habe ich sie gefunden https://www.androegg.de/?product=esp8266-esp32-esp8285-k-0135-regen-wasser-rain-water-1v-adc-sensor-kit Klappte leider nicht und ich verzweifel. Hilfe brauche ich bei dem Problem, aber wenn sich jemand an dem Projekt beteiligen möchte und mit uns bis zur Platinenentwicklung gehen möchte, würde ich mich sehr freuen. LG Kai
Kai schrieb: > Meine Fähigkeiten liegen eher in ... Holz + Leder Bearbeitung. Jetzt wird mir klar, woher das Sprichwort kommt: "Schuster, bleib bei deinem Leisten"!
Kai schrieb: > Ich muss leider sagen, dass ich nichts verstanden habe. Du bist aber nicht der TO, oder? Schildere dann bitte Dein Problem, da Du schwerlich das "Luxusproblem" (<<1% Ungenauigkeit) des TOs hast, oder?
Hallo A.S., vorab schon mal Danke, dass du mir eine Chance gibst ;) Mein Problem ist, dass der ADC Pin des ESP32 nur eine maximale Eingangsspannung von 1V zulässt (bevor er zerstört wird), der verwendete Sensor aber ein Analoges Signal von 3,3V bis 0V ausgibt (bei 3,3V Eingangsspannung direkt vom ESP32 am Sensor: https://www.amazon.de/Docooler-Kapazitiv-Feuchtigkeit-Stromspannung-Korrosionsbest%C3%A4ndigkeit/dp/B07H56W48G/ Ich verstehe die Schaltung nicht, die mit z.B. mit zwei Wiederständen (30kO und 10Ko in Reihe) das Signal auf die maximalen 1V verringert. Ich habe mir auch den Thread hier durchgelesen, bin aber wegen der Eingangsspannung verunsichert: Beitrag "ESP32 Analog Wert am Spannungsteiler ungenau vs Arduino Analog Wert" LG Kai
:
Bearbeitet durch User
ADC schrieb: > Uin= ADC*Uref/2^n. Bedenke hierbei: ADC kann nie 2^n werden sondern nur 2^n-1 da der Spass ja bei 0 beginnt zu zählen, nicht bei 1. A. S. schrieb: > Die Standardkonvention ist, dass Du mit einer Referenz von 5V eine > Spannung von 0..5V messen kannst, d.h. der ADC dies in Wert von 0..2^n-1 > wandelt. Genau genommen kannst du 5V nicht messen denn das wäre der ADC-Wert 2^n, der ADC macht aber insgesamt 2^n-Werte und beginnt bei 0 zu zählen (das ist sein 1. Wert), daher kann er maximal nur als Wert 2^n-1 annehmen ;)
M. K. schrieb: > Bedenke hierbei: ADC kann nie 2^n werden sondern nur 2^n-1 da der Spass > ja bei 0 beginnt zu zählen, nicht bei 1. Ich möchte dir auch was zu denken geben: Das Datenblatt der AVR, und da mal konkret des ATMega328P (nur als Beispiel) behauptet exakt das Gegenteil. (leider kenne ich das Datenblatt des ESP32 nicht so gut auswendig) Einer von euch beiden liegt falsch. Du, oder das Datenblatt.
Arduino Fanboy D. schrieb: > M. K. schrieb: >> Bedenke hierbei: ADC kann nie 2^n werden sondern nur 2^n-1 da der Spass >> ja bei 0 beginnt zu zählen, nicht bei 1. > > Ich möchte dir auch was zu denken geben: > Das Datenblatt der AVR, und da mal konkret des ATMega328P (nur als > Beispiel) behauptet exakt das Gegenteil. Vielleicht kannst du mal etwas genauer zitieren. Das Datenblatt wird wohl kaum behaupten, dass ein 10-Bit Wandler als Wandlungsergebnis 2^10 = 0x0400 liefern kann.
Wolfgang schrieb: > Vielleicht kannst du mal etwas genauer zitieren. > > Das Datenblatt wird wohl kaum behaupten, dass ein 10-Bit Wandler als > Wandlungsergebnis 2^10 = 0x0400 liefern kann. Nein, macht es tatsächlich nicht. Genau genommen steht dort: "An n-bit single-ended ADC converts a voltage linearly between GND and VREF in 2n steps (LSBs). The lowest code is read as 0, and the highest code is read as 2n-1." Das klingt für mich exakt gleichlautend zu der Aussage von M.K., nicht nach deren exaktem Gegenteil. Ein Stück weiter unten im Datenblatt steht dann: ADC=V_IN*1024/Vref Umgeformt wird daraus: V_IN = Vref*ADC/1024 und die maximal mögliche Spannungsangabe für V_IN wird damit zu Vref*1023/1024. Der maximal mögliche Spannungswert, den der ADC liefern kann, wäre bei Vref=5V also 5V*1023/1024=4,995V - wie es M.K. geschrieben hat. Streng genommen sagt der Maximalwert des ADCs natürlich nur aus, dass die Analogspannung irgendwo zwischen 4,995V und 5V liegt. Wo genau innerhalb dieses Quantisierungsintervalls sie liegt lässt sich nicht bestimmen. Man könnte den größten ADC-Wert also ebensogut mit dem Mittelpunkt des Quantisierungsintervalls 4,9975V gleichsetzen (und den kleinsten möglichen ADC-Wert mit 2,44mV). Das macht AVR in dem mir vorliegenden Datenblatt aber nicht. Daher verstehe ich ebenfalls nicht, wo der Widerspruch zwischen M.K.s Beitrag und der Darstellung im Datenblatt liegen soll.
http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf 24.7 ADC Conversion Result page 256 Dort findest du die Formel. (passend umstellen, wirst du schaffen. die 1024 ändern sich dabei nicht)
Kai H. schrieb: > Ich verstehe die Schaltung nicht, die mit z.B. mit zwei Wiederständen > (30kO und 10Ko in Reihe) das Signal auf die maximalen 1V verringert. Es gibt keine "Wiederstände" (oder was soll da wieder stehen) und deine Einheitenzeichen für die Werte scheint auch für die Tonne zu sein. https://de.wikipedia.org/wiki/Internationales_Einheitensystem#Abgeleitete_SI-Einheiten_mit_besonderem_Namen
Achim S. schrieb: > Das klingt für mich exakt gleichlautend zu der Aussage von M.K., nicht > nach deren exaktem Gegenteil. Ich habe das so verstanden, dass ihm > Uin= ADC*Uref/2^n nicht geschmeckt hat und er statt dessen > Uin= ADC*Uref/(2^n-1) sehen wollte. evtl. ein Missverständnis?
Kai H. schrieb: > Mein Problem ist, dass der ADC Pin des ESP32 nur eine maximale > Eingangsspannung von 1V zulässt (bevor er zerstört wird) Der taugt dank seines lausigen ADC sowieso nicht zum genauen Messen. Nimm einen externen ADC. Siehe dazu den Beitrag "ESP32 analogRead Schwankungen" Achim S. schrieb: > he lowest code is read as 0, and the highest code is read as 2n-1." Und das sind dann genau wieviele mögliche Zustände? Zählen wir mal 0 = 1. 1 = 2. 2 = 3. : : : n-1 = n. Und weil es doch ziemlich schwierig ist, das mit 8- oder 10- oder noch mehr Bit Wandlern zu verstehen, empfehle ich mal die Betrachtung mit einem 2 Bit Wandler und einer Referenzspannung von 4V. Dieser ADC hat also bei folgenden Eingangsspannungen folgende 4 Stufen: Eingangsspannung => ADC-Wert 0,0V..0,99V => 00 = 0 1,0V..1,99V => 01 = 1 2,0V..2,99V => 10 = 2 3,0V..3,99V => 11 = 3 Beim der Formel U = 4V*ADC/4 kommt dann das raus, was man "eigentlich" erwarten würde: ADC => mit der Formel 4V*ADC/4 berechnete Spannung 0 => 0,00 1 => 1,00 2 => 2,00 3 => 3,00 Mit der Formel U = 4V*ADC/3 kommt was raus, was der ADC eigentlich gar nicht kann: ADC => mit der Formel 4V*ADC/3 berechnete Spannung 0 => 0,00 1 => 1,33 2 => 2,66 3 => 4,00 Diese Formel ergibt also schon bei einem Eingangswert von 3,0V eine berechnete Spannung von 4V, die der ADC aber eigentlich gar nicht mehr wandeln kann. Aber das kann jeder machen wie er will. Man sollte sich nur bewusst sein, was man da gerade tut...
:
Bearbeitet durch Moderator
Arduino Fanboy D. schrieb: > evtl. ein Missverständnis? da würde ich denn mal auch auf Missverständnis tippen. Denn für sich allein betrachtet - ohne eigene, weitergehende Interpretationen dazuzufügen - stimmt das von M.K. geschriebene vollständig mit der Darstellung im AVR-Datenblatt überein. Inklusive der Tatsache, dass die Zahlen von 0 bis 2^n-1 des ADCs natürlich 2^n unterschiedliche Werte(intervalle) darstellen.
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.