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