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?
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?
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 ;-)
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?
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.
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...
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.