Forum: Mikrocontroller und Digitale Elektronik [AVR] ADC oversampling, nutzbarer Wertebereich


von Wulf D. (holler)


Angehängte Dateien:

Lesenswert?

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?

von Ralf K. (kurtx)


Lesenswert?

Vor über 12 Jahren Jahren hat Atmel dazu schon eine App-Note 
veröffentlicht:

AVR121: Enhancing ADC resolution by oversampling

von Wulf D. (holler)


Lesenswert?

Danke, eine wirklich gute App-Note.

Demnach führt vierfaches Oversampling zu jeweils einem Bit größerem 
Wertebereich.

von Manfred P. (pruckelfred)


Lesenswert?

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.

von Wulf D. (holler)


Lesenswert?

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.

von Bernd N. (_bn_)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

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.

: Bearbeitet durch User
von Wulf D. (holler)


Lesenswert?

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.

von Mi N. (msx)


Lesenswert?

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.

von Rainer W. (rawi)


Lesenswert?

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

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


Lesenswert?

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".

: Bearbeitet durch Moderator
von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

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

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


Lesenswert?

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.

: Bearbeitet durch Moderator
von Bernd N. (_bn_)


Lesenswert?

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.

von Wulf D. (holler)


Lesenswert?

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.

von Rainer W. (rawi)


Lesenswert?

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.

von Guido K. (Firma: Code Mercenaries GmbH) (thebug)


Lesenswert?

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.

von Wulf D. (holler)


Lesenswert?

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?

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.