Kennt jemand einen mathematischen Zusammenhang, wie sich durch
Oversampling eines ADC der nutzbare Wertebereich erweitert?
Habe selbst ein paar Testreihen gefahren, Ergebnisse weiter unten.
Testplattform war ein mit einem AVR Tiny1627 bestückter
Batterieschalter. Skizze anbei, nur als Orientierung. An ADC0...4 hängt
der ADC-Mux des Tiny. Dessen ADC hat nominell 12 Bit Auflösung.
Eigentlich reicht die für den primären Zweck, mir kam aber noch die Idee
über Ströme die SoC (state of charge) der Batterien abzuschätzen. Da die
Shunts aus thermischen Gründen klein dimmensioniert sind, wäre eine
5-stellige Spannungauflösung (dez) sinnvoll. Das entspricht 14 Bit, mehr
als der ADC liefert. Und zumindest das LSB ist eh "Rauschen", also nicht
stabil. In der Praxis noch mehr.
Aber mit Oversampling sollte es gehen, ist alles zeit-unkritisch.
Die neueren Tinys der Serie 2 bieten einen Akkumulator für den ADC für
bis zu 1024 Werte (10 Bit), ohne dass man dafür SW bemühen muss. Den
habe ich verwendet.
Außerdem noch im letzten Test eine gleitende Mittelwertbildung von 128
Werten (7 Bit) on Top.
Hier die Ergebnisse meiner Testreihe. Mit "Rauschen" meine ich instabile
Werte. Bei 2 Bit beispielsweise, wenn der Messwert von 12,000V bis
12,003V schwankt. Die 12V Speisebatterie hat 50 Ah, die sollte im
betrachteten Zeitraum absolut stabil sein.
1
ADC Add Mittlung Zusammen Anzeige - "Rauschen" Stabil
2
12 Bit + 2 Bit + 0 Bit = 14 Bit => 14 Bit - 4 Bit = 10 Bit
3
12 Bit + 8 Bit + 0 Bit = 20 Bit => 14 Bit - 3 Bit = 11 Bit
4
12 Bit +10 Bit + 0 Bit = 22 Bit => 14 Bit - 2 Bit = 12 Bit
5
12 Bit +10 Bit + 7 Bit = 29 Bit => 17 Bit - 2 Bit = 15 Bit
Die Tabelle ist so zu lesen, dass ich mit einem 12 Bit ADC plus 4-fach
oversampling (2 Bit) eine stabile Anzeige von 10 Bit Genauigkeit
erhalte.
Oder von 29 Bit am Ende 15 Bit stabil anzeigbar sind.
Nochmal die Frage: hat jemand dazu eine theoretische Ableitung zur Hand?
Wulf D. schrieb:> Demnach führt vierfaches Oversampling zu jeweils einem Bit größerem> Wertebereich.
Der Wertebereich kann nicht größer werden als der Umfang / die Auflösung
des A/D-Wandlers.
Im realen Aufbau wackelt das letzte Bit, vielleicht ist sogar auf das
vorletzte wenig Verlass. Da kommt Oversampling ins Spiel, der Mittelwert
mehrerer Messungen verringert die Streubereite.
Manfred P. schrieb:> Der Wertebereich kann nicht größer werden als der Umfang / die Auflösung> des A/D-Wandlers.
Das stimmt so nicht, sowohl die App-Note als auch meine Messungen zeigen
eine Wertebereichs-Erweiterung. Rauschen spielt eine Rolle, schau dir
das Paper an.
In meiner Tabelle fällt die erste Zeile aus der Rolle, muss mal
kontrollieren ob das ein Messfehler ist.
Wulf D. schrieb:> Rauschen spielt eine Rolle, schau dir> das Paper an.
Das ist der entscheidende Punkt aber für mehr als 2 BIT mehr auch nicht
zu gebrauchen. Ist wie in den Spionagefilmen in denen man aus einem
unscharfen Bild ein gestochen, scharfes Bild macht. In der Praxis nicht
sehr gut hinzubekommen.
Wulf D. schrieb:> Rauschen spielt eine Rolle, schau dir> das Paper an.
So ist es, ohne ein Störsignal läßt sich kein einziges Bit mehr
erzielen.
Besser als Rauschen ist aber ein Dreieck oder Sägezahn, um den Bereich
der Subbits gleichgewichtet zu durchfahren. Ansonsten bleiben die alten
ATmega stabil auf 10 Bit stehen.
Nimmt man irgendein Störsignal, erzielt man zwar Subbits, aber das sind
dann Mondwerte, d.h. ohne jeden linearen Zusammenhang.
Ich wollte mal einen 3000V Meßbereich und habe daher über je 1024
Meßwerte gemittelt. Es war schön zu sehen, wie die Anzeige jeweils in
3-er Schritten einrastete. Zwischenwerte erschienen jeweils nur bei
Änderung der Eingangsspannung.
Das 3000V Netzteil war einfach zu stabil und mein Layout zu störarm.
In vielen Schaltungen hat man ja sinusähnliche 50Hz Brummeinstreuungen.
Das ergibt zwar keine lineare Subbits, aber sie sind wenigstens monoton.
Das große Erstaunen kommt dann aber, wenn die Schaltung für
Batteriebetrieb sein soll und dann außerhalb des Labortisches mit der
50Hz Einstreuung plötzlich die Subbits fehlen.
Oder die Subbits davon abhängen, wie rum der Netzstecker eingesteckt
ist.
Manfred P. schrieb:> Der Wertebereich kann nicht größer werden als der Umfang / die Auflösung> des A/D-Wandlers.
Wie kommst du darauf? Du darfst keine rauschfreien Signal betrachten.
Für die kann das nicht funktionieren.
Damit Oversampling die Auflösung erhöht, muss natürlich möglichst ein
amplitudenmäßig gleichverteiltes Rauschen vorhanden sein, dessen
Amplitude in der Größenordnung von ein LSB liegt. Sonst hängt der ADC
auf einer Bit-Stufe und man hat gar nichts vom Oversampling.
Bernd N. schrieb:> Das ist der entscheidende Punkt aber für mehr als 2 BIT mehr auch nicht> zu gebrauchen.
Nach ein paar mehr Messungen sehe ich das genau so. Zumindest bei meinem
Aufbau sind mehr als 14 Bit nur noch Zufallszahlen.
Bin aber ganz ohne Oversampling deutlich von 12 Bit, der ADC-Auflösung,
entfernt. Zu viel Geräusch.
Wahrscheinlich muss man die CPU während der Konvertierung stilllegen,
will man stabile Werte haben.
> Ist wie in den Spionagefilmen in denen man aus einem> unscharfen Bild ein gestochen, scharfes Bild macht. In der Praxis nicht> sehr gut hinzubekommen.
Damit der Vergleich nicht so sehr hinkt, macht man aus 1000 unscharfen
Bildern vom gleichen Objekt ein Scharfes. Das könnte gehen.
Dieses ganze Schönrechnen bringt nur minimal etwas. Was man auch immer
anstellt, ist die Genauigkeit der Messwerte von der Linearität des ADCs
abhängig, und diese ist rechnerisch nicht zu verbessern.
Ralf K. schrieb:> AVR121: Enhancing ADC resolution by oversampling
Der Autor hätte besser zwischen Auflösung und Genauigkeit unterscheiden
sollen. Oversampling kann nur eine höhere Auflösung liefern, aber nichts
an der Genauigkeit ändern. Lediglich der Quantisierungsfehler lässt sich
durch Oversampling verringern.
(S.1 "In most cases 10-bit resolution is sufficient, but in some cases
higher accuracy is desired.")
https://ww1.microchip.com/downloads/en/appnotes/doc8003.pdf
Rainer W. schrieb:> Damit Oversampling die Auflösung erhöht, muss natürlich möglichst ein> amplitudenmäßig gleichverteiltes Rauschen vorhanden sein, dessen> Amplitude in der Größenordnung von ein LSB liegt.
Der Witz ist aber, dass das letzte "echte" Hardware-LSB eben schon mit
+-1/2 LSB spezifiziert ist. Im Idealfall sieht es also so aus:
1
HW ADC
2
0 1 2 3 4
3
Oversampling
4
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Wenn es mit der Nichtlenarität des realen ADC dumm läuft, dann könnte
die Schrittweite so aussehen:
1
HW ADC
2
0 1 2 3 4
3
Oversampling
4
0 1 2 3 4 5 6 7 8 9 101112 13 14 15 161718
Dan der Nichtlienarität des HW-ADCs ist also der oversampelte
1-LSB-Schritt von 5 nach 6 "gleich viel wert" wie die 3 Schritte von 1
nach 4.
Leicht erkennbar: man kann auf diese Art nicht aus einem billigen,
schlechten ADC einen billigen, guten ADC mit mehr Auflösung und
Linearität machen.
Und genauso leicht erkennbar: spätestens bei 3 zusätzlichen
oversampelten Bits geht das dann je nach Baustein dramatisch schief.
Wulf D. schrieb:> Damit der Vergleich nicht so sehr hinkt, macht man aus 1000 unscharfen> Bildern vom gleichen Objekt ein Scharfes. Das könnte gehen.
Wie sollte das gehen?
Man könnte bestenfalls aus 1000 "gestörten", aber scharfen Bildern 1
ungestörtes scharfes Bild machen. Und das macht das Oversampling dann
letztlich: es fügt Störungen hinzu, die sich dann wieder "rausmitteln".
Aber das Wandlungsergebnis des ADC an sich ist schon "scharf".
Lothar M. schrieb:> Und genauso leicht erkennbar: spätestens bei 3 zusätzlichen> oversampelten Bits geht das dann je nach Baustein dramatisch schief.
Ich bin jetzt ganz, ganz fies mit einem Gegenbeispiel: delta-sigma ADC
:D
Aber im Grunde hast du völlig recht!
Einzig gibt's die Ausnahme, dass du die Kennlinie gerade biegen kannst,
wenn du einen wirklich monotonen ADC hast und den auch vernüngtig
charakterisieren kannst.
Das aber gut zu machen ist aber nicht wirklich einfach...
73
Hans W. schrieb:> Ich bin jetzt ganz, ganz fies mit einem Gegenbeispiel: delta-sigma ADC
Ja, da geht das genau deshalb wieder gut, weil der nur 1 einziges
HW-Bit hat. Und das ist zu sich selber ausreichend linear ;-)
1
HW ADC
2
0 ... 1
3
Oversampling
4
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
> wenn du einen wirklich monotonen ADC hast und den auch vernüngtig> charakterisieren kannst.
Ja, "einen", in Zahlen 1, denn diese Lösung ist garantiert nichts für
irgendeine Serie. Und der DAC, der den einen billigen ADC dann
charakterisieren soll, muss mindestens die Auflösung und Linearität
haben, die letztendlich gewünscht ist.
Lothar M. schrieb:> Und der DAC, der den einen billigen ADC dann> charakterisieren soll, muss mindestens die Auflösung und Linearität> haben, die letztendlich gewünscht ist.
Und das ist genau der Punkt bei 1 BIT Wandler, also auch nix.
Lothar M. schrieb:> Wulf D. schrieb:>> Damit der Vergleich nicht so sehr hinkt, macht man aus 1000 unscharfen>> Bildern vom gleichen Objekt ein Scharfes. Das könnte gehen.> Wie sollte das gehen?>> Man könnte bestenfalls aus 1000 "gestörten", aber scharfen Bildern 1> ungestörtes scharfes Bild machen. Und das macht das Oversampling dann> letztlich: es fügt Störungen hinzu, die sich dann wieder "rausmitteln".> Aber das Wandlungsergebnis des ADC an sich ist schon "scharf".
Ich meine das so, dass man zunächst die Bilder jedes für sich auf eine
höhrere Auflösung interpoliert. Damit ist erstmal nichts gewonnen, nur
Platz geschaffen.
Im nächsten Schritt alle überlagern. Durch das Rauschen vom Bildsensor
werden die nicht alle gleich sein.
Wäre mal ein interessantes Experiment, mit einer Digitalkamera und
Matlab / Octave leicht umzusetzen. Ist mir aber gerade zu aufwändig.
Das Beispiel vom Delta-Sigma-Wandler hinkt aus meiner Sicht, die HW mit
der Subtraktion vom analogen Eingangswert etc ist doch nicht mit dem
Oversampling der Ausgangswerte vergleichbar.
Lothar M. schrieb:> Der Witz ist aber, dass das letzte "echte" Hardware-LSB eben schon mit> +-1/2 LSB spezifiziert ist.
Richtig, nur der Quantisierungsfehler lässt sich durch Oversampling
reduzieren.
Ein überlagerter Sägezahn und dazu phasensynchronisierte Abtastung wäre
eine Methode, um bei einem idealen ADC ohne Rauschstatistik Sub-Bits zu
erzeugen. Da würde man z.B. mit 4 Abtastungen bei 0°, 90°, 180° und 270°
bereits 2 Bit gewinnen.
ADCs in Microcontrollern haben natürlich immer das Problem die ganzen
Störungen von den anderen Funktionen auf dem Chip mit abzubekommen.
Dazu kommt dann noch die Frage was von außen dazu kommt und wie die
Stromversorgung ausgelegt ist. Die Datenblätter der Hersteller gaben da
typischerweise einige Hinweise was man machen soll, damit der ADC sauber
läuft.
Ich hatte hier kürzlich sogar den Effekt, dass zu viel Groundplane und
Durchkontaktierungen zu dieser ein Problem erzeugten. Klingt erst mal
komisch, aber die sind im Endeffekt kleine Schwingkreise mit
Kondensatoren und Spulen. Wir haben dann eine Groundplane raus geworfen
und damit war der ADC ruhig.
Guido K. schrieb:> Ich hatte hier kürzlich sogar den Effekt, dass zu viel Groundplane und> Durchkontaktierungen zu dieser ein Problem erzeugten. Klingt erst mal> komisch, aber die sind im Endeffekt kleine Schwingkreise mit> Kondensatoren und Spulen. Wir haben dann eine Groundplane raus geworfen> und damit war der ADC ruhig.
Ich habe eine 2-Lagen PCB mit einer recht flächig ausgebildeten
Masselage. Die untersten zwei Bits von 12 kann man ohne Oversampling
komplett vergessen.
Geht das bei dir besser? Wieviel Bits hat dein ADC?
Wie sieht das Layout nun aus, kann mir unter „rausgeworfener
Groundplane“ nichts genaues vorstellen?