Forum: Mikrocontroller und Digitale Elektronik ADC-Wert berechnen


von Peter (Gast)


Lesenswert?

Sorry für die blöde Frage aber ... die Formel, um einen ADC-Wert in eine
Spannung umzuwandeln lautet ja: ADC-Wert/X*Vref, wobei X von der
Auflösung des ADC abhängt. Nehmen wir mal einen 10-Bit ADC an. Muß X
dann 1024 oder 1023 sein? Ich würde sagen 1024, da es ja 1024
Abstufungen sind, aber wenn ich mir irgendwelche Programme anschaue,
dann wird da 1023 benutzt. Was stimmt jetzt?

von Bernd (Gast)


Lesenswert?

Das ist eine Frage des Verständnisses.

Versuch es doch einfach mal mit einem 2-Bit Wandler.
Teilst du dann durch 3 oder 4 ?

von Peter (Gast)


Lesenswert?

4. Danke für den Hinweis. Wieso benutzen denn dann bloß so viele Leute
(ADC-Bits^2)-1 statt ADC-Bits^2 ...

von Kowalkowski (Gast)


Lesenswert?

(ADC-Bits^2)-1 ist der höchste Wert, den der ADC annehmen kann.

Für das 2-Bit Beispiel heisst dass, dass Du 2^2 also 4 Werte hast,
nämlich 0,1,2,3. Der höchste ist also 2^2-1 = 3

von Peter (Gast)


Lesenswert?

Ja schon klar. Aber um die Spannung zu erhalten muß man durch 4 Teilen.
Ein 2-Bit ADC kann 4 Werte annehmen (Vref=1V):

Spannung von 0-0,25V:   ADC-Wert 0
   "      "  0,25-0,5V:     "    1
   "      "  0,5-0,75V:     "    2
   "      "  0,75-1V:       "    3

Beispiel: Vin = 0,75V. Der ADC-Wert beträgt 3. Geteilt durch 3 erhielte
man 1V. Geteilt durch 4 ergibt 0,75V, also ist letzteres richtig.

von Bernd (Gast)


Lesenswert?

Gut.

Nun sag mir bitte welche Spannungen du den Werten 0 bis 3 zuordnest.

von Peter (Gast)


Lesenswert?

Bernd: das habe ich doch oben geschrieben, oder meinst Du etwas anderes?

von Bernd (Gast)


Lesenswert?

Nein ich meine ist was du an Spannungen annimmst bei den ADC-Werten
0,1,2 und 3

von Rahul (Gast)


Lesenswert?

Man kann keine genaue Spannungen für einen 2 Bit AD-Wandler angeben;
immer nur Intervalle.
Diese Intervalle werden aber immer kleiner, je grösser die Auflösung
des ADC ist. Dazu habe ich letztens irgendwo schöne Excel-GRafiken
gesehen...

von Karl H. (kbuchegg)


Lesenswert?

Alles schoen und gut.
Nur, worauf Bernd hinaus will: Welchen Wert schreibst
Du auf das LCD hin (so eines vorhanden ist)? Ich hab
noch nie ein Voltmeter gesehen, dass mir hinschreibt:
Ihre Spannung liegt zwischen 0.25 und 0.5 Volt :-)
Da steht immer nur 1 Zahlenwert.

von castle (Gast)


Lesenswert?

o gott... verzeih diesen menschen der so eine frage stellt.

von Rahul (Gast)


Lesenswert?

deswegen benutzt man wohl auch eher selten 2bit-AD-Wandler.
wenn man die gegebene Formel benutzt, dann bekommt man ja nur einen
Wert und kein Intervall. Die Genauigkeit dieser Spannung hängt halt von
der Auflösung des AD-Wandlers ab, sie wird aber nie besser als 1 LSB.

von peter dannegger (Gast)


Lesenswert?

Der andere Peter hat es schön erklärt, es sind Intervalle.

Ganz exakt müßte man also die Mitte des letzten Intervalls nehmen, also
1023,5.

Es ist also wurscht, ob 1023 oder 1024, aber 1024 läßt sich schneller
rechnen (Schieben um 10 Bit).


Peter

von Bernd (Gast)


Lesenswert?

Ich verstehe nicht ganz.
Scheinbar ist es unsagbar schwer diese einfach Frage zu beantworten
obwohl hier alles auf einer Simplen Mathematischen Fprmel beruht.

Sicher kaum einer würde mit einem 2 Bit-Wanlder Arbeiten.
Der 2 Bit-Wandler ist ja nur eine Vereinfachung gewesen um das Prinzip
leichter zu verstehen.
Aber es spielt keine Rolle ob 1,2 oder 24 Bit nimmt,die Berechnungen
sind immer die gleichen.


Klar ist auch das es Intervalle sind,is ja Digital,aber wie K.H.
Buchegger schon richtig sagte wird dem Intervall am Ende ein Wert
zugeschrieben.


Also welche Werte würdet ihr den zuordnen ?
Nehmt meinentwegen an das ganze soll ein kleines Votlmeter werden.

von Rahul (Gast)


Lesenswert?

Du kannst den unteren Wert des Intervall nehmen, dann hast du einen
Wertebereich von 0...Umax-Ulsb; oder den oberen Wert, dann hast
Spannungen von 1Ulsb bis Umax.
Mit dem 2Bit-Wandler könntest du 0, 0,25, 0,5 und 0,75 oder 0,25, 0,5,
0,75 und 1 anzeigen.
Du kannst auch eine Tabelle machen, und jedem der 1024 Werte des
AD-Wandlers einen komplett anderen zuweisen.
Es liegt bei dir, die Entscheidung zu treffen, was angezeigt wird.

von Manos (Gast)


Lesenswert?

Hm.. vielleicht liege ich ja ganz falsch.. aber wenn ich in meinem
Ergebnis bei 2 Bit den Wert 0 und max (in diesem Fall 1) drin haben
will bleiben mit noch 2 Werte für den Bereich dazwischen.

0 = 0
1 = 0,33
2 = 0,66
3 = 1

oder ich hätte bei einer 0,25er Einteilung 5 Werte...

von Hannes L. (hannes)


Lesenswert?

Neee...

0 = 0,125
1 = 0,375
2 = 0,625
3 = 0,875

Und das bei einer Toleranz von plus/minus 0,125

;-)

...

von Mario Schrenk (Gast)


Lesenswert?

Nehmen wir mal an, wir hätten ein Digitalmultimeter mit 4 Bit Auflösung
bei einem Meßbereich von 1V. Wenn keine Spannung anliegt, dann soll das
Meßgerät doch auch 0V anzeigen und nicht 0,125V. Ebenso bei 1V auch 1V
und nicht 0,875V - sonst hätten wir ja keinen Meßbereich von 1V,
sondern einen Meßbereich von 0,875V.

Also, deswegen halte ich die Wertedarstellung von Manos für die
richtige.

Und um zur Ursprungsfrage zurück zu kommen, der Wert muß demnach dann
1023 sein. Analog zu unserem 4Bit-Beispiel: höchster gemessener Wert
ist 3: 3 * 1V / 3 = 1V

Nebenbei: Auch in der digitalen Welt gilt immer noch - vielleicht sogar
um so mehr - die alte Meßtechnikerweisheit: Wer mist, mist Mist!
Insbesondere, wenn man 20 Stellen nach dem Komma anzeigt ;-)

von Hannes L. (hannes)


Lesenswert?

Ist das so schwer zu begreifen?

0 = 0,125 +/- 0,125 = 0,000..0,250
1 = 0,375 +/- 0,125 = 0,250..0,500
2 = 0,625 +/- 0,125 = 0,500..0,750
3 = 0,875 +/- 0,125 = 0,750..1,000

Korrekte Werte würde man bei 10 Bit Auflösung erreichen, wenn man die
Hälfte der Auflösung zum Messwert dazu addieren würde und dann durch
1024 teilen würde. Allerdings bringt das nix, da die Genauigkeit des
ADC bedeutend schlechter ist.

Auch der Streit, ob man durch 1023 oder 1024 teilen soll, ist
lächerlich, denn der Unterschied ist kleiner als 0,1%, also bedeutend
geringer als der unvermeidliche Messfehler aufgrund Rauschen der
Messspannung und Nichtliniarität des ADC.

...

von Bernd (Gast)


Lesenswert?

Ist denn keiner in der Lage eine antwort zu geben ohne sich hinter
Auflösungen oder Praktischen Ungenauigkeiten zu verstecken ?

von Hannes L. (hannes)


Lesenswert?

@Bernd:

Suchst du jetzt solange Lösungen, bis dir eine gefällt? Versuche lieber
das bereits Geschriebene zu verstehen.

Das ist doch, wie mit einer zweistelligen Dezimalzifferanzeige, mit der
man Prozent darstellen möchte. Es gibt 100 verschiedene Werte, aber
keine "100". Da jeder Wert "gerundet" ist (oder einfach ohne
Rundung abgeschnitten) stellt jeder Wert einen Bereich dar, der (wenn
nur abgeschitten) von der Zahl bis (fast) zur nächsten Zahl reicht.
0 = 0,0000..0,9999
1 = 1,0000..1,9999

Bei Rundung reicht er von halb unter dem Wert bis halb über den Wert.
1 = 0,5000..1,4999

...

von Bernd (Gast)


Lesenswert?

@Hannes

"Suchst du jetzt solange Lösungen, bis dir eine gefällt?

Wie kommst du darauf ?
Habe ich denn irgendwo eine bestimmte bevorzugt ?



"Versuche lieber das bereits Geschriebene zu verstehen."

Ja das ist das Problem.
Ich hätte gerne nur eine Antwort auf die Frage die Erklärend ist.

Ein "Das ist eben so" ist keine Antwort sondern nur der Umstand das
derjenige selber nicht weiß wie er es denn überhaupt macht oder der
andere Umstand das derjenige es zwar weiß und zu faul ist es zu
erklären.
Bringt in beiden fällen nichts.


"Das ist doch, wie mit...."

Dh. wenn ich den gesammten Messbereich anzeigen will dann muß der
Referenzspannungsbereich an einem Ende des Messbereiches darüber
hinausgehen sonst wäre bei zb. 0.99999999999......... Ende.
Dh. ebenfalls das der Angezeigte Wert angibt das die zu messende
Spannung diesen Anzeigewert entweder überschritten oder noch nicht
erreicht hat.

Ist das so richtig ?

von Hannes L. (hannes)


Lesenswert?

Jedes Messen ist ein "Rastern".
Der Messwert wird also in das Raster gepresst.
Beim 10-Bit-ADC hat man 1024 Werte.
Man kann also nur 1024 verschiedene Ergebnisse erziehlen.
Ist der tatsächliche Messwert kleiner oder größer als der Messbereich,
dann wird eben 0 oder 1023 ermittelt.
Jeder ermittelte Wert stellt keinen absoluten Wert dar, sondern einen
Bereich von..bis.

Nun kommt es auf die Interpretation der Werte an. Nimmt man die
Zahlenwerte so, wie sie ermittelt werden (also 0..1023), dann
repräsentiert jeder Wert den Bereich vom Wert bis zum darauf folgendem
höheren Wert. Die Grenze geht dabei im Rauschen unter. Das unterste Bit
wird immer "klappern", wenn sich der Messwert im Grenzbereich zwischen
zwei Rasterwerten befindet.

Willst du die Werte für eine Ausgabe skalieren, dann könntest du die 10
Bit linksbündig ausrichten und die unteren 6 (unbenuzten) Bits auf 1
setzen, was einer Addition der halben Auflösung entspricht. *)
Diesen Wert kann man dann zum Skalieren auf den anzuzeigenden
Zahlenbereich benutzen.

Aber wie gesagt, das bringt praktisch kaum etwas, der ADC ist
schließlich nicht ideal.

*) Das entspräche dem dezimalen Runden auf ganze Zahl, indem man erst
0,5 addiert und dann die Nachkommastellen wegwirft.

...

von Hagen (Gast)


Lesenswert?

>>Ist denn keiner in der Lage eine antwort zu geben ohne sich hinter
>>Auflösungen oder Praktischen Ungenauigkeiten zu verstecken ?

Mathematisch ist 1024 richtig, und nichts anderes. Bei 10 Bit Auflösung
gibt es exakt 2^10 mögliche Werte, der Wertebereich geht von 0 bis 1023,
ergo 1024 Werte, ergo wird durch 1024 dividiert.

Möchte man den Ausgabewert in die Mitte eines Intervales legen so ist
das mathematisch eine Verschiebung des Meßwertes. Dies ist nicht durch
eine Division mit zb. 1023 oder 1022 oö. erreichbar, sondern durch
Addition/Subtarktion eines Korrekturwertes.

Die Divison mit 1023 ist also nicht nur mathematisch unrichtig sondern
technisch auch unclever da 1024 schon ein perfektes Merhfaches von 2
darstellt. Man kann also eine Zahl mit 1024 sehr schnell per Shifts
dividieren. Das ist mit 1023 nicht möglich.

Eine Division eines 10 Bit Wertes durch zb. 512 stellt eine
Verkleinerung des Wertebereiches durch 2 dar. Man kann also mit der
Division/Multipikation einen Wertebereich scalieren aber eben NICHT im
Interval verschieben. Das geht nur mit Addition/Subtraktionen.

Ergo: divison mit 1024 ist die richtige Antwort.

Gruß Hagen

von Ratber (Gast)


Lesenswert?

Moin

@Bernd

Vorschlag:

Schnapp dir ein stück Papier,Taschenrechner und zeichne einwenig.
(Kariert ist praktisch.mm-Papier auch.)

Bleib erstmal beim 2 Bit Modell und probier mit den Elektrischen
Schaltpunkten herum und schau wie die Abstände zwischen den Punkten
sind.
Informationen zu Wandlungsverfahren findest du reichlich im Internet um
das gegenzuprüfen.

Dann kannst du alle Modelle und Gedanken daran ausprobieren und
durchrechnen.
Dabei fallen auch die Abweichungen in Zahlen ab.

Deinen Gedanken oben zu Uref>Umax bzw. GNDref<GNDmin und der
Auflösungserweiterung solltest du festhalten und auch mal
durchspielen.

Was man selber rechnet versteht man auch besser. '-)

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.