Dieses Projekt ist das vorläufige Endergebnis einer recht langen Entwicklungs-, Mess- und Frustrationsphase. Wie für ein Hobby üblich, habe ich hier viel Zeit für ein einigermaßen akzeptables Ergebnis versenkt.
Das Ziel war schon lange, mein MotCom-Projekt für die CB750 um einen Tanksensor zu erweitern. Dass ich keinen Schwimmer-basierten Sensor, wie er sonst bei Motorrädern üblich ist, in den Tank platzieren könnte, war recht schnell klar. Dazu ist die Einfüllöffnung einfach zu eng und auch die Tankgeometrie zu verwinkelt. Entsprechend war die Idee, die Messung durch einen kapazitiven Sensor zu bewerkstelligen, also durch einen bis zum Boden des Tanks reichenden schmalen Plattenkondensator. Das Prinzip dahinter ist, dass der Zwischenraum der Kondensatorplatten frei vom Benzin im Tank durchflutet wird. Da Benzin einen größeren Dielektrizitätswert als Luft hat, ist die Kapazität dieser Kondensatoranordnung abhängig davon, welcher Anteil der Kondensatorfläche von Benzin umgeben ist, also von der Füllung des Tanks.
Leider ist der Dielektrizitätswert von Benzin aber auch sehr abhängig von Umwelteinflüssen wie z.B. Temperatur, Wasseranteil und der Art des Benzins (E5/E10), so dass die alleinige Messung der Sensorkapazität nicht ausreicht. Ebenso kann davon ausgegangen werden, dass der Dielektrizitätswert der Luft im Tank auch zu einem gewissen Maße davon abhängt, wie sehr sie mit Benzindunst gesättigt ist. Um diese Einflüsse herausrechnen zu können, benötigt man zusätzlich zu dem Messsensor noch zwei weitere Referenzsensoren. Einer, der immer und vollständig von Benzin ("Nasssensor") und ein weiterer, der entsprechend immer von Luft ("Luftsensor") umgeben ist.
Am Ende wurden dann zwei Sensorkombinationen mit jeweils drei separaten Plattenkondensatoren (Nasssensor, Luftsensor und Messsensor) entworfen. Sie bestehen im wesentlichen aus verschiedenen Schichten dünner Kupferfolie, die jeweils in mit benzinfestem Epoxydharz getränktem Papier einlaminiert und mit geringem Abstand zueinander auf eine Halteplatte verklebt sind - siehe dazu auch die Bildergalerie. Eine dieser Sensorkombinationen ist in der linken, die andere in der rechten Tankseite montiert. Die einzelnen Sensoren sind mit dem jeweiligen Sensor der anderen Seite parallel zusammengeschaltet, so dass sich die einzelnen Kapazitätswerte addieren.

 

Bilder der Sensoren und einige Messergebnisse

 

Die Auswerteschaltung der Sensoren besteht im Wesentlichen jeweils aus einem eigenen LC-Oszillator, wobei der entsprechende Sensor die Schwingungsfrequenz abhängig vom seinem Kapazitätswert verstellt.
Zusammengeführt werden die Frequenzsignale der drei Oszillatoren in einem PIC16F630 Mikrocontroller, der über die Ansteuerung der Bus Buffer des IC1 jeweils eines der drei Frequenzsignale zur Messung auswählen kann. Der PIC führt nacheinander die Frequenzmessung auf allen drei Oszillatoren durch, nutzt diese Messwerte zur Berechnung des Benzinstands und übermittelt diesen dann über das UART-ähnliche Interface an den MotCom.
Alternativ lässt sich über Jumper JP4 die Software so einstellen, dass die Berechnung des Benzinstands ausgelassen und stattdessen die rohen Messwerte der Sensoren über das UART-Interface gesendet werden. Dieser Modus eignet sich damit zum Aufzeichnen von Messreihen z.B. mit einem angeschlossenen PC, einem Raspberry PI oder dem PICMax.

Schaltplan des Füllstandsensors Schaltplan des Füllstandsensors

PIC-Code des Füllstandsensors basierend auf einer Lookup-Table

PIC-Code des Füllstandsensors basierend auf einer Annäherungsfunktion

Für die Ermittlung des Füllstands aus den Messwerten prüfe ich aktuell zwei verschiedene Methoden (siehe die beiden PIC-Codes).

  • Ermittlung des Füllstands aus Lookup-Table
  • Berechnung des Füllstands durch eine Annäherungsfunktion

Grundlegend für beide ist eine Reihe von Messungen, die am Motorrad durchgeführt wurden (siehe einige Beispiele in der Bildergalerie). Bei diesen Messungen wurden die Rohwerte (*) der drei einzelnen Sensoren mit meiner PICMax-Hardware aufgezeichnet. Die Messreihen umfassen verschiedene Fahrten mit dem Motorrad, Betankungs- und Entleerungsvorgänge bei unterschiedlichen Temperaturen, Abkühlphasen nach einer Motorradfahrt, etc.
Es hat sich gezeigt, dass der Messsensor deutlich auf unterschiedliche Füllstände anspricht, aber dass eben auch noch andere Einflüsse als nur der Füllstand in das Messergebnis einfließen - wie zu erwarten.
Der Nasssensor zeigt deutliche Veränderungen zu Beginn von Fahrten und nach dem Abstellen des Motorrads, was für eine Temperaturabhängigkeit der Messungen spricht (Aufwärmen des Benzins im Tank bei zunehmend aufheizendem Motor, sowie weiteres Aufheizen nach dem Abstellen des Motorrads (fehlender kühlender Fahrtwind) und anschließendes Abkühlen). Bei den Messreihen während einer Befüllung hat sich gezeigt, dass der Nasssensor auch auf Füllstandsänderungen anspricht, was so nicht zu erwarten war. Offensichtlich spielen also auch noch Einflüsse wie z.B. der statische Druck des Benzins eine signifikante Rolle.
Der Luftsensor zeigt dagegen nur sehr geringe Änderung während der Messungen, außer in dem Bereich, wenn der Tank fast vollständig gefüllt ist. Offensichtlich gibt es eine dünne Schicht direkt über der Benzinoberfläche, in der der Benzindunst dicht genug ist, um Messwertänderungen hervorzurufen. Über dieser Schicht scheint die Luft weitestgehend homogen zu sein.
Aufgrund der geringen Einflüsse auf den Luftsensor wurde beschlossen, diese Messwerte bei den Füllstandsberechnungen vorerst außer Acht zu lassen.

Aus den Messreihen wurden also eine Anzahl von Mess- und Ergebniswert-Punkten (Messwert, Nasswert, Füllstandswert) ermittelt und diese als Stützpunkte verwendet, mit denen über Inter- und Extrapolation eine komplette Ergebnismatrix errechnet wurde (siehe Bildergalerie).
Die erste Methode zur Ermittlung des Füllstands nutzt diese Ergebnismatrix als Lookup-Table. D.h. Je nach gemessenen Mess- und Nasswerten wird der entsprechend passende Füllstandswert aus der Ergebnismatrix als Füllstand genommen. Die Matrix teilt dabei den Messereich des Messsensors in 32 diskrete Werte und den des Nasssensors in 19 diskrete Werte, sodass eine Ergebnismatrix, bzw. Lookup-Table von 608 Ergebniswerten entsteht. Das ist das Maximum, was noch neben weiteren notwendigen Berechnungen in den PIC-Prozessor passt.
Diese Methode über die Lookup-Table hat den Vorteil, dass sie die aus den Messreihen ermittelte Korrelation zwischen Mess- und Ergebniswerten sehr genau abbildet. Nachteilig ist, dass sie aufgrund des großen Speicherbedarfs nicht weiter skalierbar ist. Eine spätere Miteinbeziehung der Luftsensor-Messwerte als weitere Dimension ist praktisch ausgeschlossen.
Die zweite Methode zur Ermittlung des Füllstands nutzt die selbe durch Inter- und Extrapolation ermittelte Ergebnismatrix. Diese wird jedoch in einem weiteren Schritt durch eine mathematische Funktion der Form F = an2 + bm2 + cnm + dn + em + f angenähert. n ist dabei der Messwert des Nasssensors, m ist der Messwert des Messsensors, a-f sind die durch die Annäherungsberechnung ermittelten Koeffizienten, F ist der errechnete Füllstand in Litern. Die entsprechende angenäherte Ergebnisfläche F = f(m,n) ist in der Bildergalerie gezeigt. In dieser Methode führt der PIC-Prozessor im Wesentlichen die genannte mathematische Funktion auf die Messwerte m und n aus und errechnet damit den Füllstand. Diese analytische Errechnung des Füllstands ließe sich unter Umständen noch dahingehend erweitern, dass auch die Messwerte des Luftsensors in die Berechnung mit einbezogen werden, um die Ergebnisqualität zu verbessern.
Allgemein zeigen beide Ermittlungsmethoden schon jetzt sehr vielversprechende Ergebnisse (siehe Bildergalerie). Welche Methode am Ende weiterverfolgt wird, muss jetzt erst mal ein Langzeiteinsatz über verschiedene Fahrten und Betankungen zeigen.

(*) Die gemessenen Rohwerte sind die Messzeiten (in Einheiten von 0,33μs (Prozessortakt)), in denen der jeweilige Oszillator der Messschaltung genau 65280 Perioden schwingt. Bei den Luft- bzw. Nasssensoren, die mit ca. 120kHz bzw. 105kHz schwingen, dauert das ca. 0,5 bis 0,6 Sekunden und ergibt Messwerte um die 1.620.000 bzw. 1.840.000. Der Messsensor mit seiner höheren und vom Benzinstand abhängigen Kapazität bringt seinen Oszillator auf eine Frequenz von 23,6kHz (voll) - 25,8kHz (leer). Eine Messung ergibt damit Messwerte im Bereich von 7.600.000 (leer) und 8.300.000 (voll) und dauert ca. 2,6 Sekunden.