Forum: Mikrocontroller und Digitale Elektronik Berechnung der ADC-Auflösung


von Jan (Gast)


Lesenswert?

Hi.

Ich habe ein kleines Problem mit der Auflösungsberechnung meines 10bit
ADC.

Überall lese ich, dass die Auflösung 1024 Schritte der Vref ist.
Gerechnet wird dann für z.b. 5,12 Vref: 5120 mV / 1024 = 5mV
Auflösung.

Meiner Meinung nach ist das aber falsch, da die 0 mitzählt und der ADC
maximal den Wert 1023 annimmt sollte das der Teiler sein. Also 5120 mv
/ 1023 = 5,00488 mV

Praktisch ergibt sich das daraus, wenn ich intern rechne 5mV pro LSB,
und die Vref an den ADC halte, dann kommen da 5mV zu wenig raus, weil
das maximum ja lediglich 1023 sind.

Wer hat hier den Denkfehler?

Gruß, Jan

von André (Gast)


Lesenswert?

Du, weil es trotzdem 1024 moegliche Schritte sind :)

MfG

von Jan (Gast)


Lesenswert?

ich weiß dass es 1024 schritte sind

aber zur berechnung darf ich nur die 1023 heranziehen. sonst fehlt mir
ein digit, weil ich die null nicht mitzähle

1024 schritte sind von 0 bis 1023. und nicht von 0 bis 1024, das wären
dann 1025 schritte

ich hab ja vorgerechnet wie es läuft, und selbst mit mc probiert.

von Jan (Gast)


Lesenswert?

oder anders ausgedrückt:

0-1023 sind zwar 1024 stationen, aber nur 1023 einheiten
("zwischenräume"), daher darf ich Vref auch nur auf diese 1023 teile
aufteilen.

verzeiht das doppelposting

von Hannes Hering (Gast)


Lesenswert?

Hallo!

Bist bestimmt einer, der ziemlich arg auf genauigkeit verhockt, oder?
Ich würd dir Vorschlagen, dass du bei deiner Referenzspannung bissel
umbauen musst oder mit der "Ungenauigkeit" von 4,88 * 10^-6 V leben
musst ... zumal ein üblicher ADC eine maximale Genauigkeit von +/- 1
LSB besitzt, kommst du mit nem 10-Bit Gerät kaum genauer als 10 mV hin.
Wenn du also deine genau 5 mV pro Digit haben willst, dann musst auf nen
12 oder 14 Bit ADC zurückgreifen und deine Referenzspannung mit einem
Hochgenauen Spannungsmesser einmessen und zusätzlich noch den ADc zu
kalbibrieren. Ansonsten musst du mit einer Messgenauigkeit von
mindestens +/- 1% rechnen. (Siehe auch diverse
Fehlerrechnungsabhandlungen)

MFG

Hannes

von Jan (Gast)


Lesenswert?

Hi.

Natürlich kann man mit dem ADC im Mega8 nicht das größte erreichen.

Es ging mir jetzt nur vielmehr darum, ob diese berechnung stimmt

denn ein 1024-stufiger ADC hat genau 1023 Einheiten. dass sich das
meßtechnisch in den ungenauigkeiten verliert dachte ich mir schon :)

natürlich ists "einfacher" zu rechnen. aber man sollte ja nicht
freiwillig noch unschärfen reinbringen.

von Matthias H. (Gast)


Lesenswert?

wenn man das mit nem 2Bit- ADC rechnet wirds einfacher.

4V/4=1V oder 4V/3=1.33V

binär 0  ->  0V  oder 0V
      1  ->  1V  oder 1.33V
      2  ->  2V  oder 2.66V
      3  ->  3V  oder 4V

damit ist die Frage doch erledigt, oder?

von Jan (Gast)


Lesenswert?

danke.

ich hatte das schonmal für 3bit durchgerechnet und kam halt zu dem
ergebnis. allerdings schien mir das so, als wäre ich damit allein im
wald, weil wirklich überall mit 1024 gerechnet wird.

selbst die hersteller der referenzspannungen werben damit, dass man
5,12V so schön durch 1024 teilen kann.

deswegen war ich mir etwas unsicher ob ich nicht falsch gerechnet
hätte.

von Wolfgang (Gast)


Lesenswert?

Denkfehler- Vergleich mit Dezimalsystem:  obwohl man durch 10 teilt,
gibt es nur die Zahlen 0-9
MfG
Wolfgang

von Jan (Gast)


Lesenswert?

@wolfgang:

genau das ist ja der denkfehler, der gemacht wird. es sind eben nicht
n-stellen gleich n-einheiten. sondern immer n-1 einheiten

wenn du 10 zaunpfähle aufstellst, sind trotzdem nur 9 zaunelemente
drin.

siehe das beispiel mit dem 2-bit AD, da sieht mans gut.

von Mike (Gast)


Lesenswert?

Jaja,

das neutrale Element machte schon den alten Griechen zu schaffen!

lol

LG
Mike

von Hannes Hering (Gast)


Lesenswert?

Hi!

Wieso is eigentlich noch nie einer auf die Idee gekommen, das es beim
ADC 512 Schritte in negativer und 511 in Positiver Richtung gibt und
der eine Schritt, der dazwischen liegt eben die 0 ist? (Angenommen man
verwendet den ADC Symmetrisch)

MFG

Hannes

von Jan (Gast)


Lesenswert?

dann sinds trotzdem nur 1023 schritte.

abgesehen davon kann der adc keine negative spannung zu Uref messen.

die normale zahl ist immer die spanne von der zahl selbst bis zum
beginn der nächsten zahl. sie ist sozusagen single-ended, da nur der
anfang definiert wird.

beim ADC allerdings ist die messeinheit die spanne zwischen zwei LSB,
sie ist also dual-ended. somit besteht bei 1024 bit nur eine anzahl von
1023 mess-spannen, da jeweils am anfang und am ende ein bit zur
definition der grenzen gebraucht wird, von hier aus aber kein wert mehr
definiert ist.

von Kupfer Michi (Gast)


Lesenswert?

Kinners, jetzt habt ihr mich aber ganz verwirrt??

wenn ich ins M16 DB schaue dann steht da:

The ADC converts an analog input voltage to a 10-bit digital value
through successive approximation. The minimum value represents GND and
the maximum value represents the voltage on the AREF pin minus 1 LSB.

Ist also reine (aber sinnvolle) Definition.

Oder anders ausgedrückt:
 ADC = Vin*1024/Vref
Wenn also Vin=Vref bekommt man ... einen Overflow.

Oder ging die Frage nur darum wieviel Lücken zwischen 10 Fingern sind?
(4, wenn man sie übereinander legt)

von Hannes Hering (Gast)


Lesenswert?

Die Formulierung hab ich schon lang gesucht! DANKÄ! ;)

MFG

Hannes

von Patrick (Gast)


Lesenswert?

Also ich bin gleicher Meinung wie Jan!!!

Die Spannung von einem Schritt zum anderen
= Vref/1023

und

Vout = (Vref/1023)*Eingangswert

mfg Patrick

von Kupfer Michi (Gast)


Lesenswert?

Ahh, ich seh schon...

Wie wärs, wir einigen uns darauf, dass wir die richtige Definition
(weil einzig logische) haben, verklagen Atmel da sie sich nicht daran
halten wegen logischer Grausamkeit gnadenlos auf Schadensersatz (sagen
wir 100 Megas für jeden von uns?) und sind zumindest bis zum Rest des
Jahres wieder glücklich und zufrieden... ;-)

Aber im ernst,
Atmel hat halt nunmal festgelegt dass der ADC Wert 1024 halt Vref
entspricht. Damit ist der Wert 1 = Vref/1024 und 1023 (der höchste
messbare Wert) = (Vref/1024)*1023.

Aber wahrscheinlich reden wir vollkommen aneinander vorbei und lassen
es für heute einfach einmal gut sein.

von Patrick (Gast)


Lesenswert?

Ahh, du siehst nichts...

Am besten ist, du zeichnest die Treppe mal auf (z.b. mit 2 Bit) und du
sieht von alleine, dass bei einem Eingangssignal von Vref der digitale
Wert auf 11 springt. Du siehst dann ebenfalls, dass du Vref/3 teilen
musst und nicht durch 4 weil es nur 3 Abstände sind von 0 bis Vref.

Aber für eure "Bastleranwendungen" kommt das eine Bit eh nicht zum
tragen. (Es gibt aber auch noch Präzisionsarbeiten wo es etwas anders
aussieht...)

Übrigens:
Ist mir eigentlich egal was Atmel sagt und tut.
Ich bin nicht "Atmel gezüchtet" wie viele von euch.
Ich kann selber rechnen, überlegen und Schema lesen, für das brauche
ich Atmel nicht.

Gruss Patrick

von Jan (Gast)


Lesenswert?

das stimmt schon, atmel hat die mathematik nicht gepachtet, und atmel
darf sich auch mal verrechnen.

man kann nicht einfach sowas definieren wie da im datenblatt, denn das
würde im klartext heißen 1023 = 1024 :)

für fast alle anwendungen ists vermutlich egal. aber wenn man ein
bischen geld in die ADC und referenzquellen investiert sollte man auch
genau rechnen...

von Patrick (Gast)


Lesenswert?

dann sind wir jetzt schon zu zweit die gleich (richtig) denken...

von Thomas Burkhardt (Gast)


Lesenswert?

Halt mal die Luft an.

Das ganze hat weder was mit "Bastlern" noch mit Atmel zu tun. Die
Definition, dass Fullscale (also 2^n-1) gerade einer Spannung von
Aref*(2^n-1)/(2^n) entspricht, ist nämlich in sich schlüssig.
Vermutlich wirst du selbige daher auch in MAXIM Datenblättern finden
können - und jetzt erzähl mir was zu "gezüchteten Bastlern".

von Patrick (Gast)


Lesenswert?

Also nochmal...

Was ich geschrieben habe, bezieht sich allgemein auf ADC
(Herstellerunabhängig). Das kann auch jeder mit einer kleinen Ahnung
von Digitaltechnik nachrechnen.


So, und jetzt ziehe ich mich zurück für heute und wünsche noch einen
diskussionsreichen Abend...


Gruss Patrick

von Hannes Hering (Gast)


Lesenswert?

Hallo,

mal ne Frage: Warum kacken sich Leute in die Hose wegen einem LSB? Von
wegen Ahnung von Digitaltechnik und nachrechnen und so: Alles prima,
theoretisch kann man alles fuzzelsgenau nachrechnen! Aber hat schonmal
jemand nen 1,00056729 Ohm Widerstand mit ner Genauigkeit von
0,0000000001 % gesehen? Nein? Ich au net! Deswegen frag ich mich, für
was des wichtig is, ob des jetz 5mV oder 5mv + 0,4µV pro Abschnitt
sind, außer für ein Fehlerrechnungslaborbericht im Grundstudium
Informationstechnik? Wie ich schonmal gesagt hab: Dieses eine Digit,
das bei 1024 (0-1023) Schritten fehlt, wird von allen ADC-Herstellern
als Toleranz angegeben. (Evtl. auch mehr) Deswegen: Blödsinn!

MFG

Hannes

von Thomas Burkhardt (Gast)


Lesenswert?

Und ebenfalls nochmal...

Was ich geschrieben habe, bezieht sich auch allgemein auf ADC/DAC und
ist herstellerunabhängig. Das kann sogar jeder ohne Ahnung
von Digitaltechnik nachrechnen, Grundkenntnisse der Grundrechenarten
vorausgesetzt.


Null: 0
Fullscale:  FS = 2^n-1
Das sind genau 2^n Schritte mit dem Abstand Aref/(2^n), also das, was
man gemeinhin als 1 LSB bezeichnet.

Der größtmöglich darstellbare Wert ist daher nicht Aref, sondern

Aref*(2^n-1)/(2^n) = FS * LSB

von thkais (Gast)


Lesenswert?

Ihr habt Probleme....
Nur gut, daß es Menschen wie Patrick gibt, die alles wirklich ganz
genau können. Ohne solche Menschen ist ein Atmel-gezüchteter Bastler
wie ich natürlich völlig aufgeschmissen. Danke, daß ich an dieser
wirklich lebensnotwendigen Diskussion teilhaben durfte.
Wer hats erfunden?

von Patrick (Gast)


Lesenswert?

Merci

von Jan (Gast)


Lesenswert?

schön, dass ihr euch so leucht be-trollen lasst :)

tatsächlich gibts da wohl zwischen atmel-datenblatt und realität einen
rechenfehler von 1 LSB. zugegeben, das ist nicht viel, aber im
ungünstigsten fall addiert sich das mit den anderen fehlern und dann
machts schon was aus.

und zur genauigkeit:

es gibt genug anwendungen die präzision erfordern, z.b. strommessungen
im 50-100 A bereich, bei denen am shunt nur wenige mV abfallen...

von Thomas Burkhardt (Gast)


Lesenswert?

Hi Jan,

lies doch das Datenblatt noch einmal. Es gibt keinen "Rechenfehler"
zwischen Atmel und Realität. Das es eine Abweichung zwischen idealem
Wandler und dem Tatsächlichen gibt, steht mal ausser Frage.

Die darstellbaren Werte eine 2^n Wandlers gehen binär offenbar von 0
bis 2^n - 1. Dies sind genau 2^n Werte, deswegen ist der Abstand
zwischen den einzelnen Werten auch gerade Aref/2^n.

Dies ist gängige Definition. Es ist müßig zu spekulieren, ob dies nun
in der Schweiz anders sein mag oder warum du auf deiner eigenen
Rechnung beharrst. Fakt ist, dass der größte messbare Wert nicht Aref,
sondern Aref*(2^n - 1)/ 2^n. Wenn du dir das einmal überlegst, lösen
sich deine anfänglichen Besorgnisse nämlich auf. Schau dir mal ein R2R
Netzwerk an (DAC nicht ADC), da wird dir klar, dass es schon
Schaltungsbedingt ist, dass durch 2^n und nicht wie du es vorschlägst
durch 2^n - 1 geteilt wird.

Es gibt in deinem angeführten Beispiel 1024 Werte (einschliesslich 0
bis einschliesslich 1023). Das es dazwischen einen "Abstand" weniger
gibt, spielt keine Rolle, denn nicht den "Abständen" sind Binärkodes
zugeordnet, sondern den Werten selbst (aka natürliche Zahlen).

von ...HanneS... (Gast)


Lesenswert?

Köstlich, wenn Trolle Anderen das Be-Trollen unterstellen...

von Jan (Gast)


Lesenswert?

ich nehme an das bezieht sich auf mich. wo bin ich denn hier in diesem
beitrag ein troll?

nur weil patrick meiner meinung vertritt, muss ich ja nicht für seine
methoden verantwortlich sein, oder?

ich kann von mir hier nur sachliche beiträge entdecken...

von Hannes Hering (Gast)


Lesenswert?

Bis jetzt! ;) @Jan

von ---- (Gast)


Lesenswert?

Nochmal zum Verständnis: (was ich aus obigen Posting von Thomas
Burkhardt herausinterpretiere):
Ist es richtig, daß ein 10Bit ADC mit Uref von genau 5V nur bis maximal
5V/(2^10-1) messen kann, d.h. zwischen 4,9951V und 5V kann der Wandler
nicht unterscheiden? D.h. dann auch, daß er nicht bis max. 5V wandelt
oder auflöst, sondern 1 Digit darunter?
Sind meine Annahmen korrekt?

----, (QuadDash).

von Markus (Gast)


Lesenswert?

@Thomas:
Das bedeutet doch dann, daß ein 1-Bit-ADC (oder DAC) (mit Vref=5V) die
Zuordnung 0=0V und 1=2,5V hat?

von Hannes Hering (Gast)


Lesenswert?

Hallo,

> Das bedeutet doch dann, daß ein 1-Bit-ADC (oder DAC) (mit Vref=5V)
> die Zuordnung 0=0V und 1=2,5V hat?

@Markus: So hätt ich des au gesehen! Im klartext heisst es:
0 =>   0V < Uin < 2,5V
1 => 2,5V < Uin < 5V

von Thomas O. (Gast)


Lesenswert?

Hallo,

Jan: Ist deine zu messende Analogspannung überhaupt so sauber? Wenn die
nämlich 10mV rauschen hat dann wird das eh nichts mit 10 Bit. Das ist
auch ein sehr häufiger Fehler das die Analogspannung nicht ausreichend
gefiltert ist und da nützt der genauste Wandler nichts.

von Simon Küppers (Gast)


Lesenswert?

Darum gehts hier verdammtnochmal nicht ist das klar?

Ich find das Thema sehr interessant und verfolge es, aber was mich hier
gewissermaßen, zu gut deutsch gesagt "ankackt", sind Leute die meinen,
dass es eh keine Rolle spielt wegen mechanischer und elektrischer
Ungenauigkeiten. Das mag ja so sein aber darum gehts hier einfach nicht
!

Es geht um die gewissermaßen mathematische Definition.

von Daniel (Gast)


Lesenswert?

Hallo,

hier kommt mein Senf auch noch dazu :

- Zum Thema Rauschen und sonstige Genauigkeitsverfälschungen kann ich
nur sagen : Total richtg ! 10 bit heißt bei 5V Aref ca. 5mV Auflösung.
Den Messaufbau muss man schon ziemlich gut aufbauen, wenn er das
wirklich leisten soll.

- Zum Thema ADC-Schritte : Die Schrittgröße (und damit der maximal
umfassbare Spannungsbereich bei einer gegebenen Bit-Zahl hängt IMHO
auch von dem verwendeten Wandlungsverfahren ab. Beim AVR-ADC ist das
Verfahren die "Sukkzesive Approximation". Bei diesem Verfahren wird
eben mit dem maximal erzeugten Ausgabewert (alle bits = 1) NIE der
Referenzspamnnungswert erreicht. (Das liegt daran, dass die Summe über
(2)^-k erst bei unendlich konvergiert. Man sehe nach warum ich das hier
bringe). Das Wandlungsverfahren geht folgendermaßen vor :
1. betrachtetes Bit b = MSB
2. verwendete Spannung ist U = Uref/2
3. aktueller Spannungswert des ADC Uadc= 0
4. vergleiche Eingangsspannung Uin mit Uadc + U
4a. ist Uin>Uadc+U -> (Uadc = Uadc + U), (setze b)
4b. ist Uin<Uadc+U -> (Uadc bleibt gleich), (negiere b)
5. U = U / 2
6. b ist das nächst niederwertige bit
7. falls die gewünschte Genauigkeit noch nicht erreicht ist, weiter bei
4

Dieses Verfahren kann aus o.g. Gründen Uref nicht erreichen.


Es gibt noch andere Verfahren (z.B. dual-slope, direct-conversion), die
anders funktionieren (wer hätt's gedacht). Diese Verfahren können auch
Wertebereiche von 0 bis Uref einschließlich abbilden.

Das direct-conversion-Verfahren besitzt für jede (beliebig wählbare)
Schwelle einen Vergleicher, der dann einen bestimmten Zahlenwert als
Ergebnis der Wandlung ausgibt. Mit direct-conversion können auch
logarithmische oder irgendwelche Phantasieskalierungen des Ergebnisses
realisiert werden.

Bei dual-slope wird mit einer Konstantstromquelle ein Kondensator
geladen und anschließend wieder entladen. Während dem ganzen Vorgang
läuft ein Zähler mit einer bestimmten Frequenz. Der Zählerstand, wenn
man den Kondensator wieder entladen hat ist das Wandlungsergebnis.



Wenn jetzt noch jemand ein wenig Polemik über Definitionen bei der
AD-Wandlung äußern möchte, dem sei gesagt, dass die Theorie wurschtegal
ist, wenn im Datenblatt des ADC etwas anderes steht. Bei der technischen
Realisierung (und außer dieser ist ein ADC nicht sinnvoll - wozu Werte
im Kopf AD-wandeln ?) kommt es auf das Verhalten eines Steinchens an
und nicht auf die theoretische (ethisch korrekte am besten noch)
Verhaltensrichtlinie für Elektronikteile.

MfG, Daniel

von Daniel (Gast)


Lesenswert?

Ergänzung zu dual-slope : Natürlich wird mit dem Laden des Kondesators
aufgehört, wenn die Kondensatorspannung gleich der zu wandelnden
Spannung ist und mit Entladen begonnen - sont wäre das ja ein tolles
Phantasieverfahren.

Übrigens noch folgende kleine Anekdote :
In einer meiner Vorlesungen erklärte der Dozent 90 Minuten lang
AD-Wandler und zwar wirklich gut und verständlich. Am Ende meldet sich
eienr und sagt : "ALso ich habe das alles auch ganz gut verstanden mit
der verschiedenen Verfahren, ich muss das wahrscheinlich noch mal
anschauen, aber ich denke ich hab's. Eine Frage hätte ich dann
trotzdem noch : Warum macht man all den Kram mit der AD-Wandlung
eigentlich - man kann den Wert doch einfach messen ?!"
Darauf wusste der Dozent leider so schnell auch keine Antwort.

MfG, Daniel

von Rahul (Gast)


Lesenswert?

Eigentlich ist es doch so, dass bei den meisten AD-Wandler-Verfahren ein
Vergleich, ob die gemessene Spannung grösser als eine Referenzspannung
ist, durchgeführt.
Da das alles diskrete Spannungswerte sind (ist nunmal bei digital so),
gibt die vom ADC gelieferte Zahl die untere Grenze eines Intervalls mit
der breite LSB wieder.
Deswegen sind es bei 10Bit 1024 mögliche Werte (0-1023).

Spannungsreferenzen haben dann Werte von 2,55V oder 5,12V, weil das der
"nächste" Wert einer Messung wäre.

Wenn man sich die Wertigkeit der einzelnen Bits ansieht, stellt man ja
auch fest, dass das MSB Uref/2 widerspiegelt. Das setzt sich so bis zum
LSB fort. Somit ist es unmöglich, festzustellen, ob es sich bei der
gemessenen Spannung um Uref-LSB, Uref oder eine höhere Spannung
handelt.

Das sollte jetzt nur noch eine Ergänzung sein. Daniel hat Recht..

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.