Aktuell versuche ich eine Verbrauchsanzeige zu realisieren. Bis jetzt klappt das auch ganz gut, mir fehlen nur aktuell noch zwei Bestandteile, die ich erst noch ausprobieren muss.
Ich werde das einfach mal deutlich genauer erklären, als es sonst der Fall ist, damit eventuell auch nicht-technisch versierte verstehen, wie das ganze funktioniert. Vom Prinzip her eigentlich ganz simpel.
Das Motorsteuergerät steuert alle 6 Einspritzdüsen direkt. Ich greife nun das Signal der ersten Einspritzdüse ab und werte das ganze mit einem Atmel Mega2560 / Arduino Mega2560 aus (eignet sich zur Entwicklung wirklich gut, da schon alles inkl. Spannungsregler auf dem Board verbaut sind).
Die Einspritzdüsen werden auf 0V geschaltet, also beim anliegen von 0V bzw der Verbindung zur Masse, spritzt die Düse ein. Bei einer 0 sozusagen.
Bei einer 1 bzw Ub+ (also der Versorgungs/Boardspannung) wird nicht eingespritzt. Diese Zeit ist für mich aber dennoch relevant gewesen, wird sie aber vermutlich später nicht mehr.
Nun sieht das Signal grob gesehen so aus:

(Quelle: Hobby-bastelecke.de)
Das Bild erklärt es ganz gut. Die Impulsdauer ist die Zeit, in der nicht eingespritzt wird, die Impulspause in der eingespritzt wird.
Nun messe ich quasi drei Punkte: Die erste steigende Flanke (wechsel von 0 zu 1) und nehme die Zeit im Mikrosekundenbereich (nennen wir den Wert "Start", warte bis zur fallenden Flanke, nehme wieder die Zeit im Mikrosekundenbereich (f_edge (für falling edge, also fallende Flanke)) und wieder bei einer steigenden Flanke, nun aber nicht mehr "Start" sondern "Stop". Anschließend muss die Differenz dieser Zeiten genommen werden, da wir nur Zeitpunkte und keine Zeitabstände haben. Sprich Stop - Start = Periodendauer, Stop - f_edge = Einspritzdauer.
Somit habe ich Periodenanfang, Beginn der Einspritzung, Ende der Periode/der Einspritzung.
Das ganze rechne ich dann über 500ms (Zyklus der Aktualisierung des TFT-Displays) zusammen und berechne den Mittelwert anhand der Anzahl der Impulse, die gemessen wurden.
Somit erhalte ich die Dauer der Einspritzung innerhalb von 500ms, bzw deren Durchschnitt in dieser Zeit.
Anschließend geht der Zyklus von neuem los.
So, warum nun die gesamte Periodendauer und nicht nur die Zeit, in der eingespritzt wird? Das wäre weniger Code und weniger Berechnung.
Ganz einfach: Die Periodendauer des Einspritzsignals ist völlig proportional zur Drehzahl.
Da es ein Viertakter ist, wird jede zweite Umdrehung eingespritzt.
Nehmen wir eine Periodendauer von 50ms an, dann halbieren wir diese (weil dies immer für zwei Umdrehungen gilt), dividieren durch 1000 (um Sekunden als Wert zu erhalten), nehmen den Kehrwert (also 1/Periodendauer) und erhalten die Umdrehungen pro Sekunde. Das ganze noch *60 und wir haben die Umdrehung pro Minute.
Allerdings gibt es da einen entscheidenden Nachteil: Wir erhalten keine Drehzahl, wenn das Fahrzeug im Schubbetrieb arbeitet, da dann auch nicht eingespritzt wird.
Was mir noch fehlt sind zwei Werte:
- Geschwindigkeit: Ich muss noch schauen, wie das Signal aussieht, welches am Motorsteuergerät ankommt. Ob das ebenfalls ein Rechteck ist oder der Sinus, den der Geschwindigkeitssensor erzeugt.
- Einspritzmenge/Zeit: Ich weiß aktuell nur, wie lange eingespritzt wird, aber nicht welcher Menge das entspricht. Ist aber essentiell für eine Verbrauchsberechnung. Hier werde ich mir noch etwas überlegen um möglichst genau rechnen zu können. (Zb wie lange die Einspritzdüse benötigt um einen 100ml Behälter zu füllen)
Wenn das ganze soweit funktioniert, würde ich das auch als Gesamtpaket zur Verfügung stellen.
Die Einspritzzeit und Drehzahl bekomme ich aktuell sehr genau ermittelt, die Drehzahll auf zwei Nachkommastellen.
Die hatte ich übrigens mit berechnet, da ich mal überprüfen wollte, ob ich das damals halbwegs vernünftig eingestellt bekam.
Was noch geplant ist, sind dann auch die Möglichkeiten die getankte Menge einzugeben, so dass er dann quasi errechnen kann, wie viel schon verbraucht wurde und wie viel wohl noch im Tank sein wird.
Ob und wie zuverlässig man das hin bekommt, ist allerdings eine Frage mit unbekannter Antwort.
Man müsste genau ermitteln, wie viel nun realistisch in den Tank passt.
Allerdings sollte es ausreichen, wenn man mit 60l rechnet, da definitiv mehr reinpasst (mein Tankrekord liegt bei 62l). So hätte man 2l unangezeigter Reserve.
Eine Restkm-Anzeige ließe sich so ziemlich einfach realisieren und dürfte deutlich genauer sein, als die in Serienfahrzeugen, sofern die nicht irgendeine Technologie verwenden, die mir unbekannt ist.
Damit ist gemeint, dass die Fahrzeuge maximal abschätzen können, wie viel getankt wurde, außer sie haben einen Durchflussmesser am Tankstutzen. Und somit können sie eigentlich nur von der ungefähren Menge durch den Tankgeber ausgehen, wie viel getankt wurde.
Bei meinem System könnte man dann eingeben, dass man 54,78l getankt hat und das System weiß es eben zu 100%, selbst wenn man nur 10,5l und somit nicht volltankt.
Man müsste allerdings gewissenhaft vorgehen und im Falle einer Teilbetankung auch angeben, dass es eben nicht vollgetankt war.
Der Rest lässt sich dann sicher noch mit dem Tankgeber überprüfen.
Softwaretechnisch ist dann also einiges drin.
Da ich das für mich sowieso mache, wäre es also kein Problem es für alle zugänglich zu machen, die Kosten aktuell liegen bei aktuell 17€ für die Hardware, die ich verwende.
Ob und inwieweit sich das vielleicht noch erweitert, wird man dann sehen.