[AVR] ADC oversampling, nutzbarer Wertebereich

OP #7892785
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?

Angehängte Dateien:
#7892860
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.

OP #7892865
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.

#7892918
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.

#7892924
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.

OP #7892982
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.

#7892994
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

Moderator (Firma: Titel) Persönliche Seite #7892995
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".

(Firma: Wilhelm.Consulting) #7893003
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

Moderator (Firma: Titel) Persönliche Seite #7893006
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.

OP #7893014
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.

#7893015
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.

(Firma: Code Mercenaries GmbH) #7893089
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.

OP #7893184
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?

(Firma: Funkenflug Industries) #7893236
Lesenswert?

Evtl. den internen ADC vergessen und z.B. einen ADS1115 über I2C anbinden. So habe ich das gerade mit einem ESP32 auf Lochraster gemacht und das funktioniert ziemlich stabil, obwohl direkt daneben ein einphasiger StepUp-Wandler mit über 500W (~22V->40V) läuft.

Einziger Nachteil: Der ADS1115 scheint extrem langsam zu sein, wenn man gewohnt ist, mit einem µC-internen ADC zu arbeiten.

#7893772
Lesenswert?

Lothar M. schrieb:

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.

Hmmm? Es gibt doch auch Multibit-Delta-Sigma-Wandler z.B. MCP3461/2/4 (Bild) Vom Prinzip her ist das Verfahren auch nicht nur auf AD- bzw. DA-Wandlung begrenzt.

Die quantisierte Gegenkopplung (hier mit dem DAC) ist der Trick! Damit lassen sich die Fehler zum bereits quantisierten Signal aufintegrieren.

Könnte man auch zu Fuß mit dem ADC des AVR realisieren.

Gruß Jobst

Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren