Forum: Mikrocontroller und Digitale Elektronik Berechnung zur Auflösung ADC - wie richtig?


von Hansen (Gast)


Lesenswert?

Hallöle!

Wie berechne ich die Auflösung meines AD-Wandlers korrekt? Es ist ein 
12Bit-Wandler, die Referenz ist 3V. Muss ich nun:

Auflösung = 3V / 2^n = 3V / 4096 = 732,4uV

oder:

Auflösung = 3V / (2^n - 1) = 3V / 4095 = 732,6uV

rechnen?

Ich weiß, der Unterschied ist lächerlich, aber nur generell zum 
Verständnis.

von Lehrmann M. (ubimbo)


Lesenswert?

Hansen schrieb:
> Auflösung = 3V / 2^n = 3V / 4096 = 732,4uV

Die ist richtig

Wie kommst du auf

Hansen schrieb:
> Auflösung = 3V / (2^n - 1) = 3V / 4095 = 732,6uV

????

Der Bereich geht von 0-4095 das macht 4096 Schritte ...

von Hansen (Gast)


Lesenswert?

Lehrmann Michael schrieb:
> Wie kommst du auf

Ich komme da drauf, weil die Umrechnung von anliegender Spannung zu 
ADC-Wert auch mit n-1 ist.

N_ADC = (2^n - 1)∙(VIN - VREF-) / (VREF+ - VREF-)

Und hier muss ja auch -1 mit rein, sonst stimmt die Rechnung nicht.

von U.R. Schmitt (Gast)


Lesenswert?

2^n - 1 ist eigentlich richtig, denn man 2^n Möglichkeiten den Wert 
darzustellen und 0 ist einer davon. Also bleiben nur 2^n - 1 weitere 
Werte bis zum maximalen Wert.

von Hansen (Gast)


Lesenswert?

Ja was denn nun? ;-) Immerhin ist die Frager dann doch wohl nicht so 
blöd...

von Karl H. (kbuchegg)


Lesenswert?

Einfach mal an einem ADC mit weniger Bits klar machen.
Angenommen dein ADC hätte nur 2 Bit und er muss 4V wandeln

Er liefert dann
1
 ADC Wert
2
           0V +
3
              |
4
    00        |
5
              |
6
           1V +
7
              |
8
    01        |
9
              |
10
           2V +
11
              |
12
    10        |
13
              |
14
           3V +
15
              |
16
    11        |
17
              |
18
           4V +
Der ADC teilt also den Bereich von 0 bis 4V auf in 4 Teile a 1V.

Entscheidend ist: Wieviele verschiedene Zahlen kann man mit 2 Bits 
darstellen. Und das sind nun mal 4. Auch 0 ist eine Zahl!

Was man sich klar machen muss, ist, dass ein Wert vom ADC nicht für eine 
ganz bestimmte Spannung steht, sondern für einen Spannungsbereich. 
Liefert der ADC den Wert 10 (= 2 dezimal), dann liegt die Spannung 
irgendwo im Bereich 2V bis 3V. Aber wo genau kann man nicht sagen.

Je mehr Bits ein ADC hat, in desto mehr Bereiche unterteilt er die 
Spannung. Ein 10 Bit ADC würde also die 4V in Bereiche aufteilen, von 
denen jedes 4 / 1024 V breit ist. Demenstprechend kleiner wird der 
jeweilige Spannungsbereich. Ändert allerdings aber nichts daran, dass es 
1024 sind und der ADC für den letzten davon den Wert 1024-1 = 1023 
liefern wird.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@  Hansen (Gast)

>Ja was denn nun? ;-) Immerhin ist die Frager dann doch wohl nicht so
>blöd...

Das hatten wir schon mehrfach. Ergebnis: 1/2^n ist richtig in BEIDEN 
Fällen.

Erklärung.

Man stelle sich einen AD-Wandler mit 1V Referenzspannung und 2 Bit 
vor, also 4 Messintervalle.

0mV  -250mV
250mV-500mV
500mV-750mV
750mV-1000mV

Wie berechnet man die Auflösung? 1V/2^2 = 1/4 V = 250mV

Wie groß ist der gemessene Analogwert?

Um = Uref/2^2 * ADC-Wert

Und man darf nicht vergessen, dass immer ein BEREICH von Messwerten 
innerhalb eines Intervalls auf ein einzige ZAHL abgebildet wird!

0-250mV -> 00
250mV-500mV -> 01
500mV -750mV -> 10
750mV-1000mV -> 11

Wer den Fehler noch "schönrechnen" will addiert zum Ergebnis immer noch 
ein halbes LSB, hier 125mV, damit sind die Fehlerzonen um die 
Schaltschwellen zentriert. Wie das bei den jeweiligen realen ADCs ist 
muss man ggf. mühsam aus dem Datenblatt ablesen, dort könnten die 
Schaltschwellen schon per Hardware um 1/2 LSB verschoben sein. Ist aber 
für 99% aller Anwendungen rein akademisch.

Das Ganze können die Mathematiker jetzt für beliebige Bitbreiten 
nachweisen ;-)

MFG
Falk

von Falk B. (falk)


Lesenswert?

Zu langsam :-0

von Karl H. (kbuchegg)


Lesenswert?

Falk Brunner schrieb:
> Zu langsam :-0

Macht nix. Doppelt hält besser.
Gut zu wissen, dass auch andere gerne die Technik benutzen "variiere den 
entscheidenden Parameter bis ins Absurde und sieh nach wo du landest"

von Matthias L. (Gast)


Lesenswert?

Tja, in der Schule würdet ihr beide eine 6 bekommen. Weil ihr 
gegenseitig abgeschrieben habt !

So!

von Thanh (Gast)


Lesenswert?

0mV  -250mV
250mV-500mV
500mV-750mV
750mV-1000mV

N_ADC = (2^n)∙(VIN - VREF-) / (VREF+ - VREF-)

q = 1/3 (V)

0-q/2        -> 00
q/2-3*q/2    -> 01
3*q/2 -5*q/2 -> 10
5*q/2 -6*q/2 -> 11

Nun haben wir

N_ADC = (2^n - 1)∙(VIN - VREF-) / (VREF+ - VREF-)


In Datenblätten des MK benutzt man den 2.Formel. Es hängt davon, wie die 
Struktur des DA-Wandlers aussieht. Ich bin mir auch nicht so sicher. 
Könnte jemand noch helfen ?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thanh schrieb:
> In Datenblätten des MK
Was ist der MK?

> In Datenblätten des MK benutzt man den 2.Formel.
Trotzdem ist diese Formel falsch (auch wenn sie von Programmierern gerne 
verwendet wird) und auch durch vielmaliges wiederholen wird sie nicht 
richtig. In der Praxis merkt man zum Glück von der falschen Steigung 
nicht so viel. Nur zum Bereichsende hin ist dann 1 LSB Fehler drin...

> Es hängt davon, wie die Struktur des DA-Wandlers aussieht.
Ja, das ist dann die passende Ausrede!
Kein Hardwareentwickler wird einen AD-Wandler mit 2^n-1 Bits machen. Das 
wäre ein unglaublicher Aufwand...

> In Datenblätten des MK benutzt man den 2.Formel.
Es gibt nachweislich sogar Datenblätter mit Fehlern. Und das ist sicher 
eines davon.

von Martin S. (drunkenmunky)


Angehängte Dateien:

Lesenswert?

Dann ist aber die "Equation 1" in dieser Application Note falsch, oder??

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Martin S. schrieb:
> Dann ist aber die "Equation 1" in dieser Application Note falsch, oder??

Ja. Meines Wissen ist das falsch.

Diese Aussage treffe ich jetzt aber unter Vorbehalt. Ich hoffe bald die 
Zeit zu finden, mir das mal durchzulesen.

Aber im Grunde ist die Gleichung eineindeutig beschrieben. Ich glaube 
kaum, dass Microchip etwas Anderes damit ausdrücken wollte.

Man muss sich einfach mal fragen, was 2^n und 2^n-1 überhaupt bedeuten.
Das ist sicher nicht höhere Mathematik, aber wenn man sich mal vor Augen 
hält, dass 2^n die Maximalanzahl und 2^n-1 die höchste damit 
darstellbare Größe (Maximalanzahl minus 1 wenn von 0 begonnen wird) ist, 
dann weiß man doch wie die Formel richtig lauten muss.

Die Auflösung ist somit der Spannungsbereich, durch die Anzahl an 
Zuständen (2^n) und nicht durch den höchsten Zustand.


_
Ich hoffe, dass wirkt jetzt nicht zu klug geschissen.
Ich kann die Frage ja auch verstehen.
Nur kann ich mir nicht erklären, unter welchen Umständen die andere 
Formel richtig sein soll.
Und somit, weshalb sie im Datasheet steht.

Gruß
BrEin

P.S.: Ich warte jetzt schon drauf, dass ich widerlegt werde. ;)

von André (Gast)


Angehängte Dateien:

Lesenswert?

Komischer Weise ist das überall anders beschrieben...
Das hier stammt aus dem Buch: Thomas Mühl, Einführung in die elektrische 
Messtechnik.. (Notizen bitte übersehen, stammen aus dem ersten Semseter)

Ist die Quantisierungsstufe jetzt gleichzusetzen mit dem LSB?

Ich habe einen 10 Bit ADC und 5V=Uref

In andern Dokumenten steht:

LSB=Uref/2^n

LSB=FS/(2^n-1)

mit FS=Vref-1LSB

(Der ADC, bzw. Fullscale erreicht wohl nie ganz Vref. Würde auch Sinn 
machen mit meiner Skizze. Aber jenachdem ob ich durch 1024 oder 1023 
teile..)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

André schrieb:
> In andern Dokumenten steht:
> LSB=Uref/2^n
Das ist richtig.

Im Buch selber steht doch: der Wertebereich des ADC ist 0 bis 255.
Und das sind dann ganz einfach 256 Stufen. Und für 256 Stufen muss ich 
256 Schritte machen. Oder durch 256 teilen...

Der Herr Mühl hat hier den mathematisch korrekten Weg dem optisch 
schöneren Weg von Umax=Vref geopfert, nur damit in der Anzeige bei 
Fullscale dann Vref steht. Das wird aber sowieso so langsam zur Mode. 
Insofern leigt er voll im Trend.

Mich würde interessieren, wie er das "Problem" der Grenzwerte bei einem 
PWM-Signal angeht. Da haben wir das selbe Problem: mit "marktüblichen" 
Methoden wird eine PWM entweder nie voll high oder nie ganz low.

: Bearbeitet durch Moderator
von Ulrich H. (lurchi)


Lesenswert?

Bei den D/A bzw. A/D Wandlern reicht der Bereich je nach Typ bis U_ref 
oder U_ref- 1 LSB. Bei vielen Wandlern sind die Toleranzen auch schon so 
groß, dass es da keinen wirklichen Unterschied macht ob man die 2^n oder 
2^n-1 nimmt. Wie das mit den Werte-bereichen ist, die jedem Wert 
zugeordnet sind ist ggf. auch noch verschieden. Da kann der Wert 0 ggf. 
auch für weniger als 0,5 LSB stehen.

von Falk B. (falk)


Lesenswert?


von Falk B. (falk)


Lesenswert?

@ Lothar Miller (lkmiller) (Moderator) Benutzerseite

>schöneren Weg von Umax=Vref geopfert, nur damit in der Anzeige bei
>Fullscale dann Vref steht. Das wird aber sowieso so langsam zur Mode.
>Insofern leigt er voll im Trend.

Willst du niht im Treand liegen? Lieber abseits?

>Mich würde interessieren, wie er das "Problem" der Grenzwerte bei einem
>PWM-Signal angeht. Da haben wir das selbe Problem: mit "marktüblichen"
>Methoden wird eine PWM entweder nie voll high oder nie ganz low.

Was sind "marktübliche" Methoden?

von Bitflüsterer (Gast)


Lesenswert?

Ich möchte noch eine Überlegung zum Thread hinzufügen, die, so hoffe 
ich, etwas erhellend wirkt.

Nimmt man einmal an, dass der AD-Wandler, in der oben von Karl Heinz 
bezeichneten Weise die Intervalle auf jeweils eine Zahl abbildet, dann 
ergeben sich aus den beiden Berechungsmethoden (an sich war ja die 
Ausgangsfrage, die Frage nach der Berechnung der Auflösung die dann mit 
der Frage nach der Berechnung des Meßwertes verknüpft wurde), dann 
ergeben sich nach folgendem Bild auch die folgenden Toleranzen.

 ADC Wert         2^n            2^n-1
                  U=Uref/2^n*x   U=Uref/(2^n-1)*x

           0V +   0V+1V          0V+1V
              |
    00        |
              |
           1V +    1V+1V
              |                  1.333V  -0.333+0.666V
    01        |
              |
           2V +   2V+1V
              |
    10        |
              |                  2.666V -0.666+0,333V
           3V +   3V+1V
              |
    11        |
              |                  3,999V -0,999+0,0001V
           4V +

Fehler-Lage:      + 1V          Variabel
Anzeige:          0V kein Uref  0V Uref


Man sieht, dass sich das Toleranzfeld bei dem Verfahren in der rechten 
Spalte mit wachsendem AD-Wert im Relation zum Nennwert nach unten 
verschiebt, während es seine Lage bei dem linken Verfahren beibehält.
Die Toleranzfelder decken sich zwar, aber ihr Zentrum nicht.

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.