Hi,
Ist es möglich, den Messbereich einer Spannungsmessung nach der Messung
via Software zu erweitern? Ziel wäre es, die untersten Bits des
ADC-Wandlers auch zu nutzen?
Ich meine folgendes:
ADC: 10bit - 2^10 = 1014
Zu messende Höchstspannung: 5V
5V / 1024 bit = 0,0048828125 V / bit = 4,8828125 mV / bit
Gewünscht wäre es aber 488,28125mV statt 4,8828125 mV.
Ist es möglich, via Software die Auflösung zu verbessern, indem man
Bitverschiebung und dann welche Filterung (LP / PT1) verwendet?
Hat jemand vlt. bessere Idee?
Irgendwie passt da was nicht zusammen...
Der Messbereich wird nicht erweitert, da maximal 5V gemessen werden
sollen und ~488 mV statt ~4.88 mV erweitert den Bereich auch nicht und
verschlechtert die Auflösung...
Sind da vielleicht ~488 uV statt 4.88 mV gemeint?
Falls ja: Geht theoretisch und praktisch, wenn das Eingangssignal
genügend rauscht (oder Rauschen hinzugefügt wird (Dithering)).
http://www.atmel.com/images/doc8003.pdf
Arc N. schrieb:> Irgendwie passt da was nicht zusammen...
Sehe ich auch so, Vili.
Beschreibe an einem Beispiel, wo Dein Problem ist. Sagen wir, Dein
AD-Wandler spuckt adWert=205 aus, was etwa 1.0V = 1000mV entspricht.
Geht es Dir um Die Umrechnung im µC in Ganzzahl? Die ist für U in mV:
Umv=(adWert*5000)/1024 (bei uint32)
Wenn Du in 16-Bit bleiben willst, dann kannst Du 5000/1024 entsprechend
kürzen, z.B. mit
Umv=adWert*200/41 (wenn adWert < 300)
Umv=(adWErt*50/41)*4 (wenn >= 300)
Das kannst Du natürlich noch beliebig "optimieren", doch macht man das
eigentlich nicht
- man lässt den Compiler die 32-Bit-Rechnungen erledigen
- oder verwendet gleich float/double
- UND macht zum Zwecke der Kalibrierreserven 0..5V = 0...1000LSB was die
Rechnung auf "*5" reduziert.
Arc N. schrieb:> Irgendwie passt da was nicht zusammen...
Ja.. die Frage habe ich doof gestellt. Danke für den Link, der hat mir
mal weiter geholfen.
Achim S. schrieb:> Beschreibe an einem Beispiel, wo Dein Problem ist
zu messende Spannung: 5V
Input Signal: 2500 mV
ADC in Differential-Modus
Auflösung, mit der die gemessene Spannung bereitgestellt werden muss:
1LSB= 0,000244140625mV -> 0,244140625uV
Faktor: 244140625
Offset: 1000000000 (1 000 000 000)
2^16 = 65.536 -> 5000mV / 65536 bit = 0,0762939453125 mV/bit ->
76,2939453125 uV -> 76uV
2^17 = 131.072 -> 5000mV / 131072 bit = 0,03814697265625mV/bit ->
38,146,97265625 uV -> 38uV
2^18 = 262.144 -> 5000mV / 262144 bit = 0,019073486328125mV/bit ->
19,073486328125 uV -> 19uV
Theorie:
f_oversampling = 4^n * f_nuyquiest
sf = 2^n
Rohrwert: gemessen mit 16 Bit Auflösung
2500 / 5000 * 65536 = 32768 (Rohrwert / Registerwert)
Verbesserung der Auflösung um 1 Bit:
------------------------------------
Extra samples : 4
n = 1
Extra samples : 32.764 + 32.769 + 32.768 + 32.766 = 131.067
Verschiebung um 1 : 131.067 >>= 1 -->> 65533
Rückrechnung:
17 Bit : 2500 / 5000 * 65.533 = 32.767
Verbesserung der Auflösung um 2 Bit:
------------------------------------
Extra samples : 6
n = 2
Extra samples : 4 * (32.764 + 32.769 + 32.768 + 32.766) = 131.066
Verschiebung um 1 : 8008 >>= 4 -->> 16383
Rückrechnung:
18 Bit : 2500 / 5000 * 262144 = 131.072
RegVal = x * Faktor / Offset
x - Spannung in mV
Ergebnis bei 16 Bit:
--------------------
RegVal = 32768 * 244140625 / 1000000000 = 8.000
Ergebnis bei 17 Bit:
--------------------
RegVal = 65533 * 244140625 / 1000000000 = 16.000
Ergebnis bei 18 Bit:
--------------------
RegVal = 16383 * 244140625 / 1000000000 = 32.000
Achim S. schrieb:> Geht es Dir um Die Umrechnung im µC in Ganzzahl?
Ich habe was gerechnet, sollte soweit passen. Aber irgendwie habe noch
nicht ein vollständiges Bild bekommen, ob das so wirklich stimmt.
Was ändert sich, wenn ich Float statt Ganzzahl nehme? Werden bei der
Berechnung die Kommastellen auch mitberücksichtigt. Dadurch wird meine
Berechnung noch pünktlicher, gell?
Moin,
Das sieht alles recht wirr aus und hat einen Haufen Tipp- und
Rechenfehler.
Was willst du tatsaechlich machen? Welche konkrete Messaufgabe mit
welchem konkreten Equipment?
Wenn man die "untersten bits" des ADC-Wandlers nicht "nutzen" kann, ist
die Frage erstmal: Haeh - Warum nicht?
Gruss
WK
Dergute W. schrieb:> Was willst du tatsaechlich machen?
Ich möchte die Spannung messen und die dann mit einer Auflösung von
0,000244140625mV bereitstellen. Die Höchstspannung liegt bei +/- 5V.
Als ADC verwende ich ein 16Bit DS-ADC im Differential-Modus.
Vili schrieb:> Ich möchte die Spannung messen und die dann mit einer Auflösung von> 0,000244140625mV bereitstellen. Die
Das sind 0.24 µV. Ist das Dein Ernst?
Vili schrieb:> Ich möchte die Spannung messen und die dann mit einer Auflösung von> 0,000244140625mV bereitstellen. Die Höchstspannung liegt bei +/- 5V.> Als ADC verwende ich ein 16Bit DS-ADC im Differential-Modus.
Und wo ist jetzt das Problem?
Die Auflösung des 16Bit ADC ist größer als deine Anforderung.
Dann ist doch alles in Ordnung, auch ohne Oversampling.
Vili schrieb:> Ich möchte die Spannung messen und die dann mit einer Auflösung von> 0,000244140625mV bereitstellen. Die Höchstspannung liegt bei +/- 5V.> Als ADC verwende ich ein 16Bit DS-ADC im Differential-Modus.
Für die Auflösung brauchst Du aber einen 24-Bit ADC. Schau Dir z.B.
mal ADS1299 von TI an.
Vili schrieb:> Theorie:> f_oversampling = 4^n * f_nuyquiest
Alle Theorie ist grau.
In der Praxis habe ich noch keinen einzigen ADC erlebt, der genauer als
seine Bitauflösung war.
Anders gesagt, die hinzu geschummelten Subbits eignen sich bestenfalls
als Lottozahlen und sind in der Regel nichtmal monoton.
Moin,
Vili schrieb:> und die dann mit einer Auflösung von> 0,000244140625mV bereitstellen.
Hmmm. Okeeeeeeeeey.
Wem willst du die bereitstellen, was will der mit diesen vielen
Nachkommastellen?
Gruss
WK
Vili schrieb:> Ich möchte die Spannung messen und die dann mit einer Auflösung von> 0,000244140625mV bereitstellen. Die Höchstspannung liegt bei +/- 5V.> Als ADC verwende ich ein 16Bit DS-ADC im Differential-Modus.
Also, +-5V = 10V Spannungsbereich bei einer ADC Auflösung von 16 Bit
ergeben 152,58uV. Und selbst das finde ich jetzt sehr sportlich. INL und
DNL sowie Offset-Fehler des ADC mahl nicht berücksichtigt. Dazu kommt
noch ein super gutes Layout mit spitzen Filtern und einem Linearregler
mit einem PSRR >100dB.
Ich denke, du hast bei deiner Aufgabe etwas falsch verstanden. Was du
machen könntest, ist eine "manuelle" Bereichsumschaltung über einen
Vorverstärker (Achtung Linearität, PSRR...): Bei kleinen Input-Signalen
(z.B. +-100mV, oder +-1mV) jeweils auf den vollen Eingangsbereich des
ADC verstärken (*100 resp. *1000).
Btw. schau dir mal gute Multimeter an. Diese sind meistens auch mit
Bereichsumschaltung und im uV-Bereich noch genau, aber die kosten über
600Euro.
Und ausserdem wird dir die Anzeige sowieso nichts bringen, weil
vermutlich ein schaltendes Gate des uC oder ADC schon einen spürbaren
Einfluss hat, mal von EMV und thermischen Einflüssen abgesehen...
Vili schrieb:> Was ändert sich, wenn ich Float statt Ganzzahl nehme? Werden bei der> Berechnung die Kommastellen auch mitberücksichtigt.
Das sind aber Grundlagen! Du hast es ja schon selber gesagt: Ganzzahl
kennt keine Kommastellen. Bei einer Division wird alles nach dem Komma
ignoriert. Wird dann wieder multipliziert, sind die Kommastellen
verloren und dein Resultat verfälscht. Also musst du entweder die
Rechnung entsprechend umstellen+skallieren, oder du rechnest mit einem
grossen Zeitaufwand in float (manche uC haben FPUs, die dir das abnehmen
könnten).
> Dadurch wird meine Berechnung noch pünktlicher, gell?
Ich weiss jetzt ehrlich gesagt nicht, was du da mit einer Uhrzeit
meinst... ;)
Ich wollte erst fragen, ob Du die Frage vielleicht besser in Englisch
stellst, da es anscheinend ernste Schwierigkeiten mit der Bedeutung von
Begriffen gibt. Ich sehe aber, dass Du mit Zahlen ähnlich frei umgehst.
Vielleicht kann man es abkürzen: Wenn das folgende Deine Messwerte sind
Vili schrieb:> Extra samples : 4 * (32.764 + 32.769 + 32.768 + 32.766) = 131.066
dann musst Du von Deinen 16 Bit eher 2 Streichen als noch mehr
herauskitzeln zu wollen.
Peter D. schrieb:> Vili schrieb:>> Theorie:>> f_oversampling = 4^n * f_nuyquiest>> Alle Theorie ist grau.> In der Praxis habe ich noch keinen einzigen ADC erlebt, der genauer als> seine Bitauflösung war.
Es gibt schlechte ADCs und brauchbare. Viele LTC24xx haben nominal
24-Bit, aber noch 4 Sub-LSBs, die für's Oversampling nutzbar sind.
Diese Form von Oversampling ist völlig normal. Bestes Beispiel:
Delta-Sigma-ADCs, die, in der einfachsten Form, exakt mit einem einzigen
Bit auflösen...
> Anders gesagt, die hinzu geschummelten Subbits eignen sich bestenfalls> als Lottozahlen und sind in der Regel nichtmal monoton.
Das ist ja gerade der Witz bei Delta-Sigma-Modulatoren erster Ordnung
(im Gegensatz zu denen höherer Ordnung), dass die Ausgangsfunktion
monoton und inhärent linear ist...
Patrick B. schrieb:> Vili schrieb:>> Ich möchte die Spannung messen und die dann mit einer Auflösung von>> 0,000244140625mV bereitstellen. Die Höchstspannung liegt bei +/- 5V.>> Als ADC verwende ich ein 16Bit DS-ADC im Differential-Modus.>> Also, +-5V = 10V Spannungsbereich bei einer ADC Auflösung von 16 Bit> ergeben 152,58uV. Und selbst das finde ich jetzt sehr sportlich. INL und> DNL sowie Offset-Fehler des ADC mahl nicht berücksichtigt. Dazu kommt> noch ein super gutes Layout mit spitzen Filtern und einem Linearregler> mit einem PSRR >100dB.
Wir sind nicht mehr in den 1980ern...
ADCs die das auch über den gesamten industriellen Temperaturbereich
schaffen gibt's genug. Als Filter reichen (bei vielen
Delta-Sigma-Wandlern) häufig passive erster oder zweiter Ordnung
(X2Y-Kondensatoren sind da ganz nützlich).
Linearregler sind bei 16-Bit nicht unbedingt nötig (ADCs haben auch ein
PSRR...).
Stand der Dinge sind z.Z. SAR-ADCs wie der LTC2508-32 mit 32-Bit
Auflösung, INL/DNL oder Delta-Sigmal-Wandler wie der ADS1263 oder
AD7177-2 mit 32-Bit Auflösung. Die entwickeln und bauen die Hersteller
nicht zum Spaß, weil sie niemand kauft und einsetzen kann... Beim ADS
reicht definitiv ein passiver Filter zweiter Ordnung und eine saubere
Versorgung um auf die Datenblattangaben zu kommen. Nicht nur in klinisch
sauberer Umgebung...
Allerdings gibt es heute immer noch ein Problem, dass es auch in den
1980ern gab: Die Spannungsreferenz. Da hat sich seit der LTZ1000 nicht
wirklich was getan.
(die Links zu den Papern wie man u.a. die INL, mit Hausmitteln, messen
und korrigieren kann, fliegen hier in anderen Threads rum)
Arc N. schrieb:> Viele LTC24xx haben nominal> 24-Bit, aber noch 4 Sub-LSBs, die für's Oversampling nutzbar sind.
Den LTC2400 habe ich früher auch eingesetzt. Der ist im Eingang sehr
giftig, unter 2,5V treibt er Strom, darüber zieht er Strom.
Man braucht einen niederohmigen OPV am Eingang und auf keinen Fall
Kondensatoren. Eine schlechte Eingangsbeschaltung sieht man an nicht
monotonen Sprüngen.
Die 4 Sub-Bits sind wirklich Lottozahlen. Auch wenn man über 10 Minuten
aufsummiert, bleiben sie Lottozahlen. Da ist absolut nichts
rauszukitzeln.
Ich setze lieber etwas teuere und dafür bessere Wandler ein, z.B.
AD7194BCPZ.