Forum: Mikrocontroller und Digitale Elektronik Meßwert-Dämpfung ADC (Arduino bzw. C)


von Roth (Gast)


Angehängte Dateien:

Lesenswert?

Gegeben ist ein Arduino und ein Kfz. Ausgewertet werden soll der Geber 
für den Kraftstoffvorrat (also wieviel Sprit noch im Tank ist). Weil der 
Tankinhalt beim Fahren schwappt, ist der Meßwert teilweise starken 
Schwankungen ausgesetzt. Damit die Kraftstoffanzeige nicht hin- und 
herwackelt, werden die Org. Instrumente gedämpft. Ich habe mal 
ausprobiert, ob ich sowas EDV-mäßig hinbekomme.

Wahrscheinlich gibts dazu schon "1000" Verfahren, und ich habe nur Zeit 
vergeudet, aber ich würde trotzdem gerne eure Meinung hören.

Meine Idee:

Zu jedem Meßwert gibt es einen Vorgänger-Wert. Diesen Vorgänger habe ich 
8x auf den neuen Meßwert addiert und das Ergebnis durch 9 geteilt.


Als Formel:
1
(Messwert + Alter_Wert * 8) / 9

So werden Schwankungen schon sehr gut geglättet. Jedoch nicht genug. 
Also habe ich eine zweite Stufe hinterher geschaltet, die dassselbe tut. 
Mit dem einzigen Unterschied, dass nicht der Meßwert verwendet wird, 
sondern das Ergebnis der ersten Stufe.

Das ganze dann noch ein drittes Mal, und die Linie ist glatt wie der 
Hintern einer jungen Frau :-D

Das Problem war nur, je mehr Dämpfung, desto langsamer nähert sich das 
Ergebnis der "Ideal-Linie" an. Vor allem am Anfang braucht die Kurve 
sehr lange, um sich einzupegeln.

Siehe Anhang "Feste_Dämpfung.jpg"

weiß ist die "Ideal-Linie", also der schwankungsfreie Wert
In schwarz wurden Schwankungen +/- 10% eingebaut
rot ist das Ergebnis der ersten Dämpfungs-Stufe
Gelb die zweite
Und grün die dritte

Versuchsweise habe ich dann die Dämpfung dynamisch gemacht (progressiv). 
Angefangen bei 0 (keine Dämpfung). Bei jedem Einlesen eines neuen 
Meßwerts wird die Dämpfung um 0.15 erhöht. Vor allem zu Beginn der 
Messung steigt die Kurve sehr viel schneller, ohne dass -später- die 
Dämpfung leidet.

Nach ca. 50 Einlesevorgängen ist die Dämpfung wieder bei 8, was dann 
auch der Maximalwert ist.

Siehe Anhang "Progressive Dämpfung.jpg"

So, jetzt dürft ihr alle lachen und mir sagen, wie es richtig gemacht 
wird ;-)

von Nils P. (torus)


Lesenswert?

Deine Formel ist im Prinzip nichts anderes, wie ein Tiefpass Filter 
erster Ordnung. Elektronisch kann man das mit einem einfachen RC Filter 
gleichsetzen.

Steckst Du mehrere davon hintereinander bekommst Du Filter höherer 
Ordnung.

Wenn Du es besser machen möchtest, dann nimm lieber gleich einen Filter 
höherer Ordnung der über eine bessere Steilheit verfügt. 
Tschebyscheff-Filter z.B. Lassen sich wunderbar als IIR Filter 
realisieren.

Aber generell wirst Du immer einen Trade-Off zwischen Welligkeit und 
Geschwindigkeit eingehen müssen. Eine perfekte Lösung gibt es meist 
nicht.

von Wolfgang (Gast)


Lesenswert?

Roth schrieb:
> Weil der Tankinhalt beim Fahren schwappt, ist der Meßwert teilweise
> starken Schwankungen ausgesetzt.

Du solltest allerdings prüfen, ob die gemittelten Werte von deinem 
Geber, trotz Schwankereien, dem Tankinhalt entsprechen. Wenn z.B. wegen 
der Tankform die Spitzen nach oben und unten Unterschiedlich hoch 
ausfallen, kann dein Mittelwert während des Schwappens anders liegen, 
als der Messwert bei ruhendem Tank. Das Problem ist allerding nicht 
spezifisch für deine Filtermethode und hängt auch sehr von der 
Einbauposition des Gebers ab.

Nils P. schrieb:
> Tschebyscheff-Filter z.B. Lassen sich wunderbar als IIR Filter
> realisieren.

Nein

Die Definition eines Tschebyscheff-Filters entstammt der linearen 
Filtertheorie mit Frequenzbereich 0 bis unendlich. Als Abtastfilter 
lässt sich das genau genommen also gar nicht realisieren, weil sich die 
Welt der Abtastsysteme zwischen 0 und der halben Abtastfrequenz 
abspielt. Mit der Bilinear Transformation lässt sich die Filterform 
halbwegs in den Digitalbereich rüber retten, ist aber trotzdem etwas 
anderes und hat eine andere Übertragungsfunktion.

von Einer K. (Gast)


Lesenswert?

> Meßwert-Dämpfung ADC (Arduino bzw. C)

Der Titel legt nahe, dass du die Arduino IDE verwendest.

Merke:
Arduino ist C++, nicht C.

Ja, ein C Kompiler und Assembler ist auch mit im Paket.

Aber dennoch: Es ist C++, kein C.

von Roth (Gast)


Lesenswert?

Wolfgang schrieb:
> Du solltest allerdings prüfen, ob die gemittelten Werte von deinem
> Geber, trotz Schwankereien, dem Tankinhalt entsprechen.
Ja, das stimmt leider. Das ist eine Anforderung, die man nicht so ohne 
weiteres erfüllen kann. Ich habe das Problem so angegangen, die Dämpfung 
auf eine möglichst lange Zeitachse zu setzen (vorerst: 90 Sekunden). Das 
dürfte beim Original (hier: VDO) ähnlich sein. Bei einer Testfahrt 
"steil bergauf und dann wieder steil bergab" hat die Original-Anzeige 
kaum reagiert. Aber sie reagierte dann doch, nur unheimlich langsam. Als 
Auto dann wieder gerade stand, hat es andererseits gedauert, bis der 
Zeiger wieder korrekt stand (also wir reden nur von mm-Bruchteilen).

Ich habe die Dämpfung der Benzinuhr vorerst so geplant, dass *ein Wert 
pro Sekunde* vom ADC abgerufen wird; d.h. eigentlich sind es 8 Werte pro 
Sekunde (Takt 8 Hz), deren Mittelwert ich für die Dämpfung verwenden 
will.

Ob mein Programm hergibt, was es soll, wird dann die Praxis zeigen. 
Notebook fährt ja erstmal mit :-)

von Roth (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Aber dennoch: Es ist C++, kein C.
Ist doch Latte. Ich verwende die Features von CPP gar nicht und die 
Funktion der Befehle dürfte sich kaum unterscheiden.

von U. M. (oeletronika)


Lesenswert?

Hallo,
> Roth schrieb:
> Als Formel:(Messwert + Alter_Wert * 8) / 9
Glückwunsch!
Die Formel: aktueller TP-Wert = (Vorgängerwert x TP_n)/ (TP_n +1)
mit  TP_n = 0....n
ist eine ganz gängige Methode, um diskrete Meßwerte zu glätten. Auch 
bekannt als "Wichtungskunktion" (hier wird zwischen Vorhergehendem wert 
und aktuellem Wert gewichtet).

Alternativ kann man auch diese Modifikation verwenden:
die Formel: aktueller TP-Wert = (Vorgängerwert x (TP_n-1))/ (TP_n)
mit  TP_n = 1....n
Ob man mit Startwert 0 oder 1 beginnen will, ist Geschmackssache.
Startwert Null hat den Vorteil, dass man weniger Problem mit Div. durch 
Null bekommt.  Startwert "1" hat einen kleinen Vorteil im Verständnis, 
weil man das mit Faktor=1 für den aktuellen Wert gleichsetzen kann.

Solche Formeln werden regelmäßig als Tiefpassfunktion in Meßgeräten 
verwendet, z.B. um für ein Signal eine definierte Halbwerts-Zeit oder in 
der Industrie die sogenannte T_90-Zeit festzulegen.
https://de.wikipedia.org/wiki/Anstiegs-_und_Abfallzeit
Ich nutze die Formel auch gern, um Messwerte in Tabellen zu glätten 
(z.B. in Excel).

> So werden Schwankungen schon sehr gut geglättet. Jedoch nicht genug.
> Also habe ich eine zweite Stufe hinterher geschaltet, die dassselbe tut.
> Mit dem einzigen Unterschied, dass nicht der Meßwert verwendet wird,
> sondern das Ergebnis der ersten Stufe.

> Das ganze dann noch ein drittes Mal, und die Linie ist glatt wie der
> Hintern einer jungen Frau :-D
Das muß gar nicht so umständlich sein?
Du kannst auch einfach den Wert TP-n höher ansetzen, z.B. auf 
20...50...100. Entsprechend "lahmer" wird die Einschwingzeit, aber umso 
glatter das Signal.

> Das Problem war nur, je mehr Dämpfung, desto langsamer nähert sich das
> Ergebnis der "Ideal-Linie" an. Vor allem am Anfang braucht die Kurve
> sehr lange, um sich einzupegeln.
Normal, aber wenn du schon einen programmierbaren uC verwendest, dann 
kannst du auch spezielle Randbedingungen einbauen.
Z.B. Nach Start nicht mit Null anfangen, sondern gleich einen aktuellen 
Wert als Anfangswert setzen.
Das ist selbst für einen schwankenden Meßwert sinnvoll, als ein 
Nullwert.
Das macht bei einem PKW auch Sinn, weil der Tankinhalt im Stand kaum 
schwappen wird.

Wenn der Anfangswert stark verrauscht oder gestört ist, kann man auch 
erstmal über einen kürzeren Zeitraum (z.B. 2...3 s) einen Mittelwert 
bestimmen und diesen als Startwert nutzen.

Auch der Einsatz eines Medianfilter kann hier hilfreich sein.

Außerdem kannst du auch die Schankungen der Meßwerte mit einbeziehen. 
Wenn es über einen def. Zeitraum wenig Abweichungen zwischen den 
Messwerten gibt, wird der Tankinhalt im Fahrzeug wohl auch gerade nicht 
stark hin und her schwappern. Durch dynamische Anpassung an die 
Meßbedingungen bekommst du einerseits eine kurze Einschwingzeit, 
anderseits einen stabilen Mittelwert.

> Versuchsweise habe ich dann die Dämpfung dynamisch gemacht (progressiv).
> Angefangen bei 0 (keine Dämpfung). Bei jedem Einlesen eines neuen
> Meßwerts wird die Dämpfung um 0.15 erhöht. Vor allem zu Beginn der
> Messung steigt die Kurve sehr viel schneller, ohne dass -später- die
> Dämpfung leidet.
Die Funktion entspricht in ihrem Verlauf einer typ. Einschwingfunktion, 
wie es in der Physik sehr oft vorkommt.
z.B. Einschwingen der Temp. eines Körpers bei einem Temperaturwechsel, 
Zerfallsrate von radioaktiven Elementen, Auf-/Entladen eine Kond. über 
einen Widerstand usw.
https://www.elektronik-kompendium.de/sites/grd/0205301.htm
https://de.wikipedia.org/wiki/Halbwertszeit
https://de.wikipedia.org/wiki/Einschwingvorgang

> So, jetzt dürft ihr alle lachen und mir sagen, wie es richtig gemacht wird ;-)
Super, wenn du dir das selber ausgedacht hast.

Ich würde noch eine Idee für für eine Filerung geben.
Das Herumschwappern der Flüssigkeit in einem Tank wird mit einer rel. 
definerten Frequenz erfolgen. Die sollte in keinem hohen Bereich liegen, 
eher um 0,2Hz...2Hz und kann per Oversampling wahrscheinlich auch gut 
ermittelt werden (siehe die rel. gleichen Abstände zwischen den Peaks in 
deinen Grafiken).
Wenn du aber diese Eigenfrequenz erfassen kannst, ist es auch einfach 
möglich einen guten Mittelwert zu bestimmen, indem man die Meßwerte über 
eine Periode oder besser mehrere Peroiden aufmittelt.
Damit wird die Eigenfrequenz der Flüssigkeit quasi weggefiltert.
Das Prinzip wird z.B. auch verwendet um 50Hz-Brummspannungen zu 
unterdrücken.
Gruß Öletronika

: Bearbeitet durch User
von Roth (Gast)


Lesenswert?

Hallo @oeletronika
Danke für deine Rückmeldung. Ja, das ist auf meinem Mist gewachsen. Was 
ich fand, war entweder (für mich) zu kompliziert, oder unschlüssig. Also 
habe ich Excel bemüht. Manchmal helfen Diagramme wirklich gut.

U. M. schrieb:
> Z.B. Nach Start nicht mit Null anfangen, sondern gleich einen aktuellen
> Wert als Anfangswert setzen.
Ja genau. Beim ersten Einlesen wird der gelesene Wert als Startwert 
gesetzt. Das wurde schon eingebaut und funktioniert perfekt.

U. M. schrieb:
> Das muß gar nicht so umständlich sein?
Habe ich mir auch gedacht und gestaunt. Die Kurve der Kaskade niedriger 
Dämpfung war dann aber eindeutig glatter als eine einzelne Stufe hoher 
Dämpfung. Warum das so ist, weiß ich aber nicht.

U. M. schrieb:
> Wenn es über einen def. Zeitraum wenig Abweichungen zwischen den
> Messwerten gibt, wird der Tankinhalt im Fahrzeug wohl auch gerade nicht
> stark hin und her schwappern.
Davon gehe ich aus.

U. M. schrieb:
> Ich würde noch eine Idee für für eine Filerung geben.
> Das Herumschwappern der Flüssigkeit in einem Tank wird mit einer rel.
> definerten Frequenz erfolgen. Die sollte in keinem hohen Bereich liegen,
> eher um 0,2Hz...2Hz und kann per Oversampling wahrscheinlich auch gut
> ermittelt werden (siehe die rel. gleichen Abstände zwischen den Peaks in
> deinen Grafiken).
Das sind keine Realwerte, sondern willkürliche Parameter von mir in 
Excel. Die Eigenschwingung des Tankinhalts kann ich nicht feststellen. 
Das wird unterschiedlich sein, kurven, bergauf und -ab, Stadtfahrt, 
Feldweg ... Es wird aber ohne auch gehen. Normalerweise schwankt ein 
Auto ja nicht dauerhaft.

von U. M. (oeletronika)


Lesenswert?

Hallo,
> Roth schrieb:
> U. M. schrieb:
>> Das muß gar nicht so umständlich sein?
> Habe ich mir auch gedacht und gestaunt. Die Kurve der Kaskade niedriger
> Dämpfung war dann aber eindeutig glatter als eine einzelne Stufe hoher
> Dämpfung. Warum das so ist, weiß ich aber nicht.
Mit welchen konkreten Werten hast du denn gerechnet?
Wenn du zweimal mit einer TP_n = 8 rechnest entspricht das nicht einer 
einfachen Stufe mit TP_n = 16, sondern eher TP_n = 64.
Das wird am Ende genauso glatt sein.


> U. M. schrieb:
>> Ich würde noch eine Idee für für eine Filerung geben.
>> Das Herumschwappern der Flüssigkeit in einem Tank wird mit einer rel.
>> definerten Frequenz erfolgen. Die sollte in keinem hohen Bereich liegen,
>> eher um 0,2Hz...2Hz und kann per Oversampling wahrscheinlich auch gut
>> ermittelt werden (siehe die rel. gleichen Abstände zwischen den Peaks in
>> deinen Grafiken).
> Das sind keine Realwerte, sondern willkürliche Parameter von mir in
> Excel. Die Eigenschwingung des Tankinhalts kann ich nicht feststellen.
> Das wird unterschiedlich sein, kurven, bergauf und -ab, Stadtfahrt,
> Feldweg ...
Ich denke, die Eigenfrequenz wird hauptsächlich durch die Konstruktion 
des Tanks bestimmt, also auch vom Füllstand.

> Es wird aber ohne auch gehen. Normalerweise schwankt ein
> Auto ja nicht dauerhaft.
Vor allem braucht man die Information von einer Tankanzeige nicht 
sekündlich ;-)  Eine stabile Anzeige ist da viel mehr wert, als eine 
schnelle.
Gruß Öletronika

von Roth (Gast)


Lesenswert?

U. M. schrieb:
> Mit welchen konkreten Werten hast du denn gerechnet?
Gar nicht mal. Völlig erwartungsfrei, habe ich das einfach probiert ;)

U. M. schrieb:
> Ich denke, die Eigenfrequenz wird hauptsächlich durch die Konstruktion
> des Tanks bestimmt, also auch vom Füllstand.
In einem Tank sind sg. Schwallbleche. Die reduzieren das Schwappen schon 
deutlich. Wenn man das KI (Kombiinstrument) in den Diagnosemodus setzt 
(Dämpfung deaktiviert), sieht man aber, wie unruhig der Zeiger zuckt. 
M.E. keine Symetrie i.p. regelmäßige Schwingung.

U. M. schrieb:
> Vor allem braucht man die Information von einer Tankanzeige nicht
> sekündlich ;-)  Eine stabile Anzeige ist da viel mehr wert, als eine
> schnelle.
So sieht es aus. Die Tankanzeige ist eh nur Nebenschauplatz, ich will 
sie eichen. Hauptaugenmerkt ist, die sg. "Plateaufunktion" der 
Temperaturanzeige vom Kühlwasser weg zu bekommen. So einen Quatsch 
überhaupt zu verkaufen...ist aber in fast jedem neuen Auto zu finden.

von void (Gast)


Lesenswert?

Roth schrieb:
> Hauptaugenmerkt ist, die sg. "Plateaufunktion" der
> Temperaturanzeige vom Kühlwasser weg zu bekommen.

Besonders toll ist das in Kombination mit digitaler Anzeige der 
Kühlwasser-Temperatur im Kombiinstrument.
Nadel:        90°C  (wegen Plateaufunktion)
dig. Anzeige: 83°C  (der echte Wert)

von Roth (Gast)


Lesenswert?

void schrieb:
> Roth schrieb:
>> Hauptaugenmerkt ist, die sg. "Plateaufunktion" der
>> Temperaturanzeige vom Kühlwasser weg zu bekommen.
>
> Besonders toll ist das in Kombination mit digitaler Anzeige der
> Kühlwasser-Temperatur im Kombiinstrument.
> Nadel:        90°C  (wegen Plateaufunktion)
> dig. Anzeige: 83°C  (der echte Wert)

Jepp. Bei meinem Auto geht das Plateau bis 107° C so. Zwischen 75°C und 
107°C werden IMMER 90° C angezeigt !! Ab 108° ist sie dann wieder genau, 
und bei 109° explodiert der Kühler. Bei anderen Autos ist das auch so. 
Gut für den, der das nicht weiß.

von U. M. (oeletronika)


Lesenswert?

Hallo,
bei solchen Anzeigen kann man auch gleich auf Zeigerinstumente 
verzichten und statt dessen 3 LED hinsetzen. Es ist aber allg. der 
Trend, dem Benutzer immer weniger Informationen in detailierter Form zu 
geben und statt desser unendlich viele Sensoren + Software mit der 
Überwachung zu betrauen. Da muß man dann darauf hoffen, dass der Sensor 
nicht gerade kaputt ist und vor allem, dass die Software keine heiklen 
Macken hat.
Aber wie wir ja alle wissen, ist Software ja fast immer annähernd 
fehlerfrei, nicht wahr ;-)

> Roth schrieb:
> So sieht es aus. Die Tankanzeige ist eh nur Nebenschauplatz, ich will
> sie eichen. Hauptaugenmerkt ist, die sg. "Plateaufunktion" der
> Temperaturanzeige vom Kühlwasser weg zu bekommen. So einen Quatsch
> überhaupt zu verkaufen...ist aber in fast jedem neuen Auto zu finden.
du willst dir also eine KFZ-Elektronik nachentwickeln.
In dem Zusammenhang wollte ich mal auf die Problematik zuverlässige 
Stromvers.  und Überspannungsschutz hinweisen. Da gab es in letzter Zeit 
ein hier paar Threads, in denen das diskutiert wurde. Sind dir diese 
bekannt? Sonst würde ich diese nochmal raus suchen.
Überhaupt ist das Einsatzgebiet Automotiv in einigen Punkten extrem, in 
Bezug auf Einsatzbedingungen und Zuverlässigkeit. Das kann man auch viel 
Lehrgelb bezahlen :-o)
Gruß Öletronika

: Bearbeitet durch User
von Rainer V. (a_zip)


Lesenswert?

Wolfgang schrieb:
> Du solltest allerdings prüfen, ob die gemittelten Werte von deinem
> Geber, trotz Schwankereien, dem Tankinhalt entsprechen. Wenn z.B. wegen
> der Tankform die Spitzen nach oben und unten Unterschiedlich hoch
> ausfallen, kann dein Mittelwert während des Schwappens anders liegen,
> als der Messwert bei ruhendem Tank. Das Problem ist allerding nicht
> spezifisch für deine Filtermethode und hängt auch sehr von der
> Einbauposition des Gebers ab.

Hallo, ich denke, das sollte doch durch wenige Werte des richtigen 
Volumens mit einer Eichkurve korrigiert werden können.
Gruß Rainer

von max123 (Gast)


Lesenswert?

Hallo,
Ich sehe die Ausreisser ( schwappen und auch für Einschwingen zu spitz) 
nicht unbedingt als Regelschwinger, sondern vielleicht eine 
eingekoppelte Störungen.
Nach dem Oszibild würde ich ein Medianfilter einsetzen, unabhängig ob es 
sich um  eine STörung oder einen Regelschwinger handelt.

von Roth (Gast)


Lesenswert?

U. M. schrieb:
> Hallo,
> bei solchen Anzeigen kann man auch gleich auf Zeigerinstumente
> verzichten und statt dessen 3 LED hinsetzen.

Natürlich geht das und ist vlt. auch genauer. Ich will aber das 
Original-Instrument verwenden, nenn es Nostalgie oder wie auch immer.

Sonst hätte ich mir gleich ein Thermometer gekauft. Bei Amazon 10 €

> du willst dir also eine KFZ-Elektronik nachentwickeln.
Ja, zum Teil ist das so. Auf das EEPROM der VDO-Platine komme ich nicht. 
Das wäre das einfachste. Also muss ich die Schrittmotoren mit eigener 
CPU ansteuern. Wird schon schiefgehen :-)




Rainer V. schrieb:
> Hallo, ich denke, das sollte doch durch wenige Werte des richtigen
> Volumens mit einer Eichkurve korrigiert werden können.
> Gruß Rainer

Am besten wäre natürlich, den Mittelwert direkt am "Flächeninhalt! der 
Schwankungen auszumachen. Das kann man bestimmt berechnen. Leider weiß 
ich nciht, wie da die Formeln sind. Das hatten wir in der Schule leider 
nicht mehr.

von Roth (Gast)


Lesenswert?

max123 schrieb:
> Ich sehe die Ausreisser ( schwappen und auch für Einschwingen zu spitz)
> nicht unbedingt als Regelschwinger, sondern vielleicht eine
> eingekoppelte Störungen.
> Nach dem Oszibild würde ich ein Medianfilter einsetzen, unabhängig ob es
> sich um  eine STörung oder einen Regelschwinger handelt.
 Macht euch an der "Schwingung" nicht fest. Das ist reines EXCEL, ohne 
jeden Bezug zum Fahrzeug. Ich habe, einstellbar, +/- 10% des Wertes als 
Schwankung angenommen. Mehr, als ich in der Praxis erwarte. Mit 20% käme 
meine Scrubbing Routine auch noch klar. Dauert halt länger, bis die 
Glättung sich eingepegelt hat. Und außerdem, wenn das Auto fährt, 
wackelt es meist auch nicht mehr; schätze das Schwappen während der 
Fahrt auf weniger als 1%, wenn überhaupt. Die Reaktionszeit von 30 
Sekunden gleicht alles wieder aus.

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.