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.
Ja was denn nun? ;-) Immerhin ist die Frager dann doch wohl nicht so blöd...
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
@ 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"
Tja, in der Schule würdet ihr beide eine 6 bekommen. Weil ihr gegenseitig abgeschrieben habt ! So!
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.
Dann ist aber die "Equation 1" in dieser Application Note falsch, oder??
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.
:
Bearbeitet durch Moderator
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.
https://www.mikrocontroller.net/articles/AD-Wandler#Negative_Spannungen_messen Die Links am Ende des Abschnitts
@ 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.