Forum: Mikrocontroller und Digitale Elektronik ADC: Messwert beruhigen.wie am besten?


von Guido (Gast)


Lesenswert?

Hallo zusammen!

Folgendes: Ich habe einen ADC, welcher einen Druck misst...also er misst 
natürlich die Spannung des Drucksensors. Problem ist, dass mein Wert 
ziemlich wackelt. Wie kann ich diesen am besten beruhigen?

Wenn ich die Sample-Rate runter stelle, dann wird das Ding 
schneckenlangsam. Mit einer höheren Sample-Rate und Averaging durch eine 
bestimmte Zahl an Messwerten bringt auch Zappeln oder Schneckentempo. 
Aber auch im Schneckentempo springt der Wert, nur halt langsamer.

Es ist ein 20-Bit SD-Wandler (den hatte ich grad hier)
In einem Metallgehäuse das ganze und sehr weit getrennt von irgendwas 
digitalem. Klar, Layout macht viel aus, aber was kann ich jetzt tun, um 
den Wert zu beruhigen?

von Frank B. (f-baer)


Lesenswert?

In welchem Umfang zappelt der ADC denn?

von 1275 (Gast)


Lesenswert?

Hi,

der Sigma Delta Wandler benötigt ein Sample&Hold Glied, wenn er noch 
keines integriert hat. Er bildet den Mittelwert der Eingangsspannung, 
also wenn die während einer Messung davonläuft dann macht der Käse am 
Ausgang.

von raketenfred (Gast)


Lesenswert?

gleitender Mittelwert über eine gewisse anzahl?!

oder in der hardware nen leichten pufferkondensator davor, um peaks weg 
zu filtern.

von Bernd N (Gast)


Lesenswert?

20 BIT und welche Eingangsspannung wird gemessen ?

Beispiel: 0-5 Volt bei 20 BIT = 1048576 Schritte oder anders formuliert:

5V / 1048576 = 4,76 µVolt. Was erwartest du da ?

Da gehts dann schon mit dem Layout los, sag jetzt nicht das Ganze ist 
auf nem Lochraster Board.

von Hannes (Gast)


Lesenswert?

20 Bit löst keiner so easy auf. Da zappeln immer die letzten paar Bit.

von Hannes (Gast)


Lesenswert?

Öha, Bernd war schneler. Meint aber das gleiche.

von Guido (Gast)


Lesenswert?

1275 schrieb:
> wenn er noch
> keines integriert hat

Das ist ein fertigr Wandler für Brückenmessungen. Direkt zum anschließen 
mit integriertem PGA.

Frank Bär schrieb:
> In welchem Umfang zappelt der ADC denn?

Die Werte liegen im "Nullzustand" zwischen 502764 und 502806. Ich weiß, 
das ist nicht soooo viel, aber ich seh es auf dem Display und in meinem 
Stromausgang. Wie könnte ich das los werden?

von Lukas K. (carrotindustries)


Lesenswert?

1275 schrieb:
> der Sigma Delta Wandler benötigt ein Sample&Hold Glied

Gerade eben nicht. Der ΔΣ-Wandler liefert einen kontinuierlichen 
Bitstrom. Erst der digitale Filter, der den Bitstrom in einen Wert 
umrechnet, sorgt für eine Abtastrate.

von Guido (Gast)


Lesenswert?

Bernd N schrieb:
> 5V / 1048576 = 4,76 µVolt. Was erwartest du da ?

3V / 1048576 = 2,86uV

Mir ist das völlig klar! Und es ist kein Lochraster, nein. Ich suche ja 
nur nach einer geeigneten Möglichkeit, das ganze nachträglich in 
Software zu beruhigen, ohne dass die ganze Geschichte extrem langsam 
wird.

Einfach die letzten Stellen abschneiden?

von Guido (Gast)


Lesenswert?

raketenfred schrieb:
> gleitender Mittelwert über eine gewisse anzahl?!

Also ich habe jetzt eine bestimmte anzahl von messungen und mache da 
draus den Mittelwert. Aber der SD-Wandler ist ja eh schon ne Schnecke. 
Momentan liest er mit 10SP/s ein. Da dann noch nen Mittelwert und das 
Display hinkt.

Ich kann die SP/s jetzt hochdrehen, aber das ändert nichts.

von Bernd N (Gast)


Lesenswert?

>> Einfach die letzten Stellen abschneiden?

So ist es. Wie sinnvoll das ist ergibt sich aber erst aus dem 
Zusammenhang. Was willst du messen und wie genau willst du es messen ? 
Was soll denn die Anzeige später einmal anzeigen ? Druck in welchen 
Schritten ?

von Frank B. (f-baer)


Lesenswert?

Guido schrieb:
> Die Werte liegen im "Nullzustand" zwischen 502764 und 502806. Ich weiß,
> das ist nicht soooo viel, aber ich seh es auf dem Display und in meinem
> Stromausgang. Wie könnte ich das los werden?

Bilde einen gleitenden Mittelwert über ~20 Werte, damit kriegst du das 
weggebügelt.

von Paul (Gast)


Lesenswert?

Am Meßeingang C gegen Masse (von 20 pF bis einigen nF) je nach 
Geschwindigkeitsanforderung.

In der Software entweder einen gleitenden Mittelwert oder besser einen 
Medianfilter programmieren. Elegant wäre das Mittelwertfilter gleich als 
Standard FIR-Filter zu programmieren, um die Filtercharakteristik später 
optimieren zu können.

von Lukas K. (carrotindustries)


Lesenswert?

Du hast ein Rauschen von ca. 120µV. Wie steht es um die Abschirmung des 
ADCs, der Referenzspannungsquelle und dem Rauschen auf der 
Refrenzspannung selbst? Der LTC2400 (24bit) ist mit 0,3ppm RMS Rauschen 
angegeben, das macht bei 5V Referenz 4.2µVpp. Was für einen Wandler hast 
du denn genau?

Guido schrieb:
> Einfach die letzten Stellen abschneiden?

Kosmetik

von Bürovorsteher (Gast)


Lesenswert?

> Einfach die letzten Stellen abschneiden?

Das ist auch keine Lösung: stelle dir mal vor, dass der Messwert z.B. 
genau auf der Hälfte deines Bereiches liegt.
Es zappelt dann trotzdem...

von me (Gast)


Lesenswert?

Auf wie schnelle Änderungen willst du reagieren können? -> passender 
Tiefpassfilter.
Möglichst alle Störquellen deaktivieren (µC - sleepmodi).
Wobei alles >15bit schon recht sportlich wird.
moving average filter glätten ohne langsamer zu werden.

von Guido (Gast)


Lesenswert?

Paul schrieb:
> Am Meßeingang C gegen Masse (von 20 pF bis einigen nF) je nach
> Geschwindigkeitsanforderung.

Ich habe da einen 1u Kondensator an jedem Eingang

von coolcoker (Gast)


Lesenswert?

Vielleicht versuchst Du auch mal zu klären ob Du Dir Störung von der 
Sensor Seite einfängst. Also speise doch mal eine saubere Gleichspannung 
aus z. B. einer Batterie ein. Vielleicht hast Du aber auch Spikes auf 
der Versorgungsspannung für die Brücke. Klemm doch mal ein Scope ran.

von Lars (Gast)


Lesenswert?

Luk4s K. schrieb:
> Gerade eben nicht. Der ΔΣ-Wandler liefert einen kontinuierlichen
> Bitstrom. Erst der digitale Filter, der den Bitstrom in einen Wert
> umrechnet, sorgt für eine Abtastrate.

Von Abtastrate habe ich auch nichts gesagt.

von Guido (Gast)


Lesenswert?

Luk4s K. schrieb:
> Was für einen Wandler hast
> du denn genau?

Einen MAX11206

von Purzel H. (hacky)


Lesenswert?

Exponentieller Average ist ein Ansatz, der kontinuerlich Werte liefert, 
ohne viel zu Rechnen zu geben.

von Bernd N (Gast)


Lesenswert?

>> Das ist auch keine Lösung: stelle dir mal vor, dass der Messwert z.B.
>> genau auf der Hälfte deines Bereiches liegt.

Es ist dann keine Lösung wenn es ohne Sinn und Verstand erfolgt. Ein AD 
Wandler wandelt immer eine Eingangsgröße in eine Ausgangsgröße. Wenn das 
mit 16 BIT geht dann kann er die letzten 4 BIT sehrwohl verwerfen.

Leider immer noch keine Angaben über die Anzeige und somit ist die 
Diskussion sinnfrei.

von Lukas K. (carrotindustries)


Lesenswert?

Guido schrieb:
> Einen MAX11206
Auf dem Papier sieht der doch schonmal ganz gut aus.
Und jetzt noch: Was für eine Refrenzspannungsquelle?

von Guido (Gast)


Lesenswert?

Bernd N schrieb:
> Leider immer noch keine Angaben über die Anzeige und somit ist die
> Diskussion sinnfrei.

Ich würde mir gerne den Druck mit einer Auflösung von 0,1mbar anzeigen 
lassen. Meine Anzeige schwankt drucklos zwischen -0,5 und + 0,2.

von Guido (Gast)


Lesenswert?

Luk4s K. schrieb:
> Guido schrieb:
>> Einen MAX11206
> Auf dem Papier sieht der doch schonmal ganz gut aus.
> Und jetzt noch: Was für eine Refrenzspannungsquelle?

Eine LT1406CIS. Die Initialgenauigkeit ist hierbei egal, da mit dieser 
Quelle kalibriert wird.

von Paul (Gast)


Lesenswert?

Was ist mit der Referenz? Ist die stabil und rauscharm?

von Guido (Gast)


Lesenswert?

Guido schrieb:
> Eine LT1406CIS.

LT1461CIS, sorry!

von Lukas K. (carrotindustries)


Lesenswert?

Lars schrieb:
> Luk4s K. schrieb:
>> Gerade eben nicht. Der ΔΣ-Wandler liefert einen kontinuierlichen
>> Bitstrom. Erst der digitale Filter, der den Bitstrom in einen Wert
>> umrechnet, sorgt für eine Abtastrate.
>
> Von Abtastrate habe ich auch nichts gesagt.

Doch, ein Sample&Hold impliziert eine Abtastrate.

von Bernd N (Gast)


Lesenswert?

Guido, wir reden leider immer noch aneinander vorbei. 0,1 mBar verstehe 
ich aber ich wüßte gerne folgendes:

Beispiel:
Anzeige von 0-2 Bar, Schrittweite = 0,1 mBar.

Welche Eingangsspannung entspricht 2 Bar ? Wie ist der Bereich 
ausgenutzt ? Kannst du nicht einfach mal alle Daten zusammenhängend 
herausrücken und dann mal mit z.B. 16 BIT rechen und selbst dabei 
erkennen ob 16 BIT dafür ausreichen ?

UREF ?

Dann kann man immer noch Mittelwertbildung, TP etc. in Software angehen. 
Im ersten Schritt kann man jedenfalls durch einfache Mathematik 
bestimmen welche Auflösung für die Aufgabe benötigt wird und genau 
dieses Konzept hätte ich gerne von dir in einem Rutsch.

von Lukas K. (carrotindustries)


Lesenswert?

Guido schrieb:
> LT1461CIS, sorry!

Die macht ca. 24µVpp Rauschen. Jetzt hast du mehrere Möglichkeiten:
Du willst die 20bit voll ausnutzen und suchst die Rauschquelle und 
eliminierst sie.
Oder dir sind die letzten Bits egal und schneidest sie ab.

0,1mBar Auflösung, was ist Fullscale? Was ist dein Drucksensor und wie 
sieht das Analogfrontend aus?

von Guido (Gast)


Lesenswert?

Bernd N schrieb:
> Guido, wir reden leider immer noch aneinander vorbei.

OK, also ich habe eine Druckmessung von 0-10bar und möchte diese gerne 
mit 0,1mbar auflösen.

Bei Vollausschlag bekomme ich einen ADC-Wert von 802310 (Brückenspannung 
am DMS vom Drucksensor) Der PGA steht auf 64, das ist das höchste, was 
geht, sonst verlässt er den Messbereich vom ADC (der ADC stellt sich die 
Verstärkung beim Kalibrieren selber ein).


Die Referenzspannung beträgt 3,000V

von Guido (Gast)


Lesenswert?

Luk4s K. schrieb:
> Was ist dein Drucksensor und wie
> sieht das Analogfrontend aus?

Es handelt sich um einen keramischen DMS. Die Brückenausgänge gehen je 
auf einen 1u-C und von da an den ADC, dieser hat Signal-Buffer, um die 
Quelle nicht zu belasten.

von Bernd N (Gast)


Lesenswert?

Die Referenzspannung beträgt 3,000V

802310 = 3V ? = 10 Bar ?

Besser 1048576 = 3V, will sagen das der Ansatz schon nicht gut ist. Im 
ersten Schritt würde ich den Sensor so anpassen das 10 Bar auch ca. der 
Wandler Endpunkt ist und erst dann gehts weiter.

Habe ich deine Werte richtig verstanden ?

von Lukas K. (carrotindustries)


Lesenswert?

Guido schrieb:
> OK, also ich habe eine Druckmessung von 0-10bar und möchte diese gerne
> mit 0,1mbar auflösen.

Das sind ca. 16,7bit. bzw. 10ppm.

Guido schrieb:
> Der PGA steht auf 64

Aha. Dann werden aus den 2,86µV/bit schonmal 45nV/bit. Dann machen deine 
42Bits rauschen nur noch 1,8uV aus.

von Bernd N (Gast)


Lesenswert?

Ja, 6 Stellen z.B. 10.0001 Bar = 16 BIT + 1 also 3 BIT wegwerfen, 
Anpassung korregieren und Mittelwert bilden. Wenns dann noch wackelt 
Filter verwenden.

von Guido (Gast)


Lesenswert?

Bernd N schrieb:
> 802310 = 3V ? = 10 Bar ?

802310 == 10 bar, nicht 3V! Wi gesagt, der interne PGA kann nur 2^n bis 
128, also nichts zwischen 64 und 128.

Bernd N schrieb:
> Im
> ersten Schritt würde ich den Sensor so anpassen das 10 Bar auch ca. der
> Wandler Endpunkt ist und erst dann gehts weiter.

Externe Beschaltung ist leider nicht drin, der PGA muss das erledigen, 
daher leider auch keine 100%ige Anpassung ;-\

von Lukas K. (carrotindustries)


Lesenswert?

Wenn ich mich nicht allzusehr verrechnet hab, dann hast du schon das 
Minimum an Rauschen rausgeholt. Die Kosmetische Beruhigung machst du 
dann am besten in Software.

von Bernd N (Gast)


Lesenswert?

Dann betreibst du jetzt die Korrektur eines Designfehlers. Du verwirfst 
durch die Fehlanpassung schon jede Menge. Der Ansatz ist für ein 
präzises Messgerät nicht gut.

>> Wenn ich mich nicht allzusehr verrechnet hab, dann hast du schon das
>> Minimum an Rauschen rausgeholt. Die Kosmetische Beruhigung machst du
>> dann am besten in Software.

So ist es.

von Guido (Gast)


Lesenswert?

Luk4s K. schrieb:
> Wenn ich mich nicht allzusehr verrechnet hab, dann hast du schon das
> Minimum an Rauschen rausgeholt. Die Kosmetische Beruhigung machst du
> dann am besten in Software.

Na jut, Jungs. Dann werde ich erstmal werkeln und mich dann wieder mit 
dem Resultat melden! Ich danke euch erstmal!

von Bernd N (Gast)


Lesenswert?

Ein kosmetischer Ansatz könnte folgender Pseudocode sein:
1
    if (measVal > AdcVal) {                                       // Messwert aktuell > vorheriger Messwert ?
2
        if (measVal - AdcVal > AdcWindow) {                       // Delta measVal, AdcVal > X mV ?
3
            AdcVal = measVal;                                     // => Anzeige sofort aktualisieren
4
        } else {                                                  // Delta measVal, AdcVal < X mV ?
5
            AdcVal += 1;                                          // => Messwert annähern
6
        }
7
    } else if (measVal < AdcVal) {                                // Messwert aktuell < vorheriger Messwert ?
8
        if (AdcVal - measVal > AdcWindow) {                       // Delta measVal, AdcVal > X mV ?
9
            AdcVal = measVal;                                     // => Anzeige sofort aktualisieren
10
        } else {                                                  // Delta measVal, AdcVal < X mV ?
11
            AdcVal -= 1;                                          // => Messwert annähern
12
        }
13
    }

Hierbei wird eine aktualisierung der Anzeige bei großem Delta sofort 
erzwungen, bei kleinen Änderungen nähert man sich an. Die Anzeige wird 
hierdurch träge.

von Peter D. (peda)


Lesenswert?

Guido schrieb:
> OK, also ich habe eine Druckmessung von 0-10bar und möchte diese gerne
> mit 0,1mbar auflösen.

1:100.000, das ist ja schon recht heftig.
Bist Du sicher, daß der Sensor überhaupt so hoch auflösen kann?


Peter

von Dieter W. (dds5)


Lesenswert?

0,1 mbar Auflösung entspricht bei atmosphärischem Druck etwa einer 
Höhenänderung von 80cm.

Je nach Größe und Form des Volumens, in dem die Messung erfolgt, wird 
man da schon erkennbare Änderungen des Drucks durch äußere Einflüsse 
erhalten (vorbeikommendes Fahrzeug/Flugzeug).

Edit: Temperaturänderungen nicht zu vergessen.

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.