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 ;-)
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.
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.
> 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.
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 :-)
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.
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.htmhttps://de.wikipedia.org/wiki/Halbwertszeithttps://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
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.
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
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.
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)
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ß.
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
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
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.
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.
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.