
Ein Telemetriesensor im Eigenbau
6-Zellen-LiPo-Wächter
Neulich zeigte mir mein Modellfliegerfreund Volker, dass er an seinen Futaba-Empfänger an einem separaten Eingang einen Akku anschließen kann, dessen Spannung via Telemetrie vom Empfänger zum Sender übertragen wird. Auf dem Sender kann nun ein beliebiger Alarm eingestellt werden, so dass er z.B. einen Antriebsakku überwachen kann, ohne dass ein zusätzlicher Telemetrie-Sensor benötigt wird. Eigentlich eine tolle Sache, trotzdem war er nicht ganz zufrieden.
Volker fliegt einige Modelle mit fünf und mehr LiPo-Zellen. Bricht an einem solchen Akku nun eine Zelle ganz plötzlich weg, solange die anderen praktisch noch voll sind, dann ist die Gesamtspannung des Akkus ja immer noch im grünen Bereich, obwohl sich vielleicht bereits eine Katastrophe anbahnt. Deshalb war mein Freund auf der Suche nach einem Sensor, der ihm nur die Spannung der niedrigsten Zelle eines Akkus liefert, um diese dann an den besagten Eingang des Empfängers anzuschließen und zu überwachen. Bis zu unserem Gespräch war er jedoch auf dem Markt nicht fündig geworden. Ich habe ihm deshalb versprochen, dass ich mir dazu etwas einfallen lassen würde.
Arduino Board als Grundlage
Da ich sowieso schon länger damit geliebäugelt hatte, mir eigene Sensoren für meine Jeti-Anlage zu bauen, war das ein willkommener Anlass, die Sache endlich anzugehen. Vom Grundsatz her sollte es ja nicht allzu schwierig sein. Letztlich müsste man ja nur die Spannung aller Zellen einzeln bestimmen und die niedrigste dann an einen entsprechenden Anschluss durchschleusen.
Elektronische Basis sollte ein Arduino pro mini Board sein (Bild 1). Bei Arduino handelt es sich um ein Open-Source-Projekt, im Rahmen dessen sowohl standardisierte und einfach zu nutzende Hardware für eigene Elektronikprojekte als auch eine umfangreiche Entwicklungsumgebung für den auf der jeweiligen Hardware vorhandenen Mikroprozessor zur Verfügung steht.

Programmiert wird in der Programmiersprache C, wobei die Programmiersprache zusätzlich um mikroprozessorspezifische Elemente ergänzt wurde. Die in verschiedenen Ausführungen erhältlichen Arduino Boards beinhalten neben dem reinen Mikroprozessor schon eine umfangreiche Beschaltung. Somit kann solch ein Board sehr einfach und in vielen Fällen sogar ohne Zusatzbeschaltung genutzt werden.
Das nur 33×18 mm große Arduino pro mini Board bietet acht analoge Eingänge, für die man eine anliegende Spannung in einen zur Spannung proportionalen Digitalwert umwandeln kann. Damit lassen sich die Spannungswerte sehr einfach vergleichen und die Zelle mit der niedrigsten Spannung feststellen. Einzige Voraussetzung ist, dass die umzuwandelnde Spannung höchstens so hoch sein darf, wie die interne Referenzspannung des Mikroprozessors.
Berechnung der Zellspannung
Das pro mini Board gibt es in einer 3,3-Vund einer 5-Volt-Variante. Beide können mit einer Spannung von bis zu 12 V versorgt werden. Damit der auf dem Board integrierte Spannungsregler auch wirklich die genannten Referenzspannungen erzeugen kann, muss die Versorgungsspannung etwas über der gewünschten Referenzspannung liegen. Aus diesem Grund habe ich mich für die 3,3-V-Variante entschieden. Damit ist gewährleistet, dass die Referenzspannung auch dann (noch) sicher erzeugt werden kann, wenn die Versorgung des Boards über einen Empfängerakku mit vier NiMh-Zellen erfolgt.
Wenn wir uns an den Physikunterricht in der Schule (in meinem Fall vor ca. 50 Jahren) erinnern, dann fällt uns vielleicht noch der nicht allzu schwierige Zusammenhang eines Spannungsteilers mit zwei Widerständen R1 und R2 an einer Spannung U ein. Dieser besagt, dass die entstehenden Teilspannungen über R1 und R2 folgender Gesetzmäßigkeit unterliegen: U1/R1 = U2/R2. Denken wir dann noch etwas weiter nach, finden wir vielleicht auch noch die Formeln zur Berechnung der Teilspannungen U1 und U2. Falls nicht, kann man natürlich auch auf das bekanntlich fast allwissende World Wide Web zurückgreifen. Für U1 gilt: U1 = U/ (R1+R2)*R1 und für U2: U2 = U/(R1+R2)*R2. Und genau diese Formeln brauchen wir nun, um die Spannungen am jeweiligen Zellenanschluss aus der Teilspannung kleiner 3,3 V und den beiden Widerständen des zugehörigen Spannungsteilers zu berechnen. Die Zellenspannung ergibt sich dann aus der Differenz zwischen genau dieser Spannung minus der Summe der Spannungen der davor liegenden Zellen.
Für den Prototyp des geplanten Sensors wurde eine maximale Anzahl von sechs LiPo-Zellen vorgesehen. Lötet man die Spannungsteiler auf einer Streifenplatine zusammen (Bild 2), wird diese Platine exakt so breit und lang wie das Arduino Board. Man muss nun nur noch GND der beiden Platinen verbinden und die Abgriffe an den Spannungsteilern mit den Analogeingängen A0 bis A5 verbinden (Bild 3). Die Versorgung des Arduino Boards erfolgt über ein Servokabel, wobei lediglich Plus an RAW und Minus an GND des Boards anzulöten sind. Die Impulsleitung bleibt ungenutzt.

Ausgabe der Spannung
Damit sind wir dann schon so weit, dass wir die Spannung der einzelnen Zellen berechnen und auch feststellen können, welche Zelle die niedrigste Spannung hat. Bis hierhin geht alles ohne zusätzliche Beschaltung des Arduino Boards. Aber noch haben wir diese Spannung nicht ausgegeben. Da wird’s jetzt vielleicht doch nicht ganz so einfach. Und zwar deshalb nicht, weil wir diese Spannung nicht einfach durch irgendeinen Befehl an einem Pin des Arduino Bords erzeugen können. Das einzige, was man machen kann, ist eine gepulste Spannung zu erzeugen, deren Pulsfrequenz dem Digitalwert des vorher umgewandelten Analogwertes entspricht. Um daraus dann eine echte Gleichspannung zu machen, wäre eine zusätzliche Beschaltung erforderlich.

Und genau das hat mir eigentlich nicht gefallen. Bei näherer Betrachtung bin ich drauf gekommen, dass es eigentlich gar nicht notwendig ist, diese Spannung wirklich auszugeben. Im Prinzip reicht die Information, dass eine Zelle unter einen im Programm vorgegebenen Spannungswert gefallen ist. Damit wäre auch ein digitales Umschalten eines Ausganges von high (= Referenzspannung von 3,3 V = Schwellwert noch nicht erreicht) auf low (= 0 Volt = Schwellwert unterschritten) ausreichend.
Die Warnung auf dem Futaba-Sender kann dann so eingestellt werden, dass sie zuschlägt, sobald die Spannung am Sensorausgang auf unter 3,3 V fällt. Und genau so haben wir das dann auch gemacht und ich mir eine zusätzliche Beschaltung und damit zusätzlichen Aufwand erspart. Im konkreten Fall wurde Pin 3 des Arduino Boards als Ausgang verwendet. Das Kabel für den Anschluss der externen Spannung an den Futaba-Empfänger ist also mit Plus an Pin 3 und Minus an GND des Boards anzulöten. Die beiden Platinen werden dann übereinander gelegt und eingeschrumpft.
Programm zum Download
Als sinnvollen Schwellwert für das Umschalten von high auf low habe ich 3,3 Volt angenommen. Wenn diese unter Last erreicht werden, dann wird es sicher Zeit, an die Landung zu denken. Das Programm ist auf Wunsch meines Freundes so gestrickt, dass es den Ausgabepin so lange auf low hält, solange die Spannung bei oder unterhalb 3,3 Volt liegt. Nimmt man die Leistung am Knüppel zurück, so dass die Zellenspannung wieder ansteigt, wird der Ausgabepin auch wieder auf high gesetzt.
Das Programm selber ist nicht sehr umfangreich. Einzige Besonderheit ist, dass die genauen Widerstandswerte der Spannungsteiler in eine Tabelle innerhalb des Programmes übernommen wurden. Dies deshalb, weil die Widerstände meist nicht ganz exakt den farbcodierten Werten entsprechen und dadurch die Messgenauigkeit leiden würde. Durch das Anpassen der Werte kann man eine Genauigkeit von ca. 2 bis 5 % erreichen. Wer möchte, kann sich das Programm von der VTH-Seite (www.fmt-rc.de) herunterladen. Der Spannungsteiler belastet einen LiPo-Akku mit sechs Zellen übrigens mit weniger als 0,4 mA. Bei weniger Zellen wird die Belastung entsprechend geringer.
Das Bild auf der ersten Seite dieses Beitrages zeigt, wie der Sensor im Futaba Umfeld angeschlossen wird. Die Stromversorgung erfolgt über einen freien Empfängeranschluss. Denkbar wäre hier natürlich auch ein V-Kabel zum Empfängerakku. Der Spannungsausgang wird an den Eingang für die externe Spannung des Empfängers angeschlossen. Beim Anschluss des Balancersteckers an den Sensor ist auf richtige Polung zu achten. Wer hier einer versehentlichen Verpolung vorbeugen will, kann statt der gewinkelten Stifte auch ein entsprechendes Balancerkabel an den Spannungsteiler anlöten.
Witziges Detail am Rande: Just an dem Tag, an dem ich den funktionierenden Sensor an meinen Freund übergeben habe, habe ich in der FMT gelesen, dass Multiplex auf der Messe Pro Wing einen Sensor vorgestellt hat, der die Spannung der niedrigsten Zelle liefert. Ich denke aber, dass die Rückmeldung über das von Multiplex verwendete Telemetrieprotokoll erfolgt und damit der Sensor nicht an den Spannungseingang des Futaba-Empfängers angeschlossen werden kann.
Erweiterung für Jeti
Nachdem der Sensor am Futaba-System erfolgreich eingesetzt werden konnte, war der nächste Schritt nun, ihn „Jeti-fähig“ zu machen. Dafür brauchte ich keinen Spannungsausgang mehr, da die Daten ja auf Basis einer seriellen Kommunikation zwischen Sensor und Empfänger ausgetauscht werden. Somit wäre es natürlich auch möglich gewesen, alle Einzelspannungen zurück zu liefern, das wollte ich aber explizit nicht. Ich habe mich auf die Ausgabe der Gesamtspannung des Akkus sowie Spannung und der Nummer der Zelle mit der niedrigsten Spannung beschränkt. Das Programm ist praktisch unverändert geblieben. Es wurde lediglich um das Jeti Kommunikationsprotokoll ergänzt.
Die Spannungsversorgung erfolgt über den Telemetrie-Anschluss, der zusätzlich die Datenleitung beinhaltet. Die Anzeige der Telemetriedaten auf dem Sender kann mit den auf dem Sender vorhandenen Möglichkeiten frei definiert werden. Bild 4 ist ein Screenshot des Senderdisplays und zeigt eine mögliche Darstellung. Für Umin kann nun ein beliebiger Alarmwert festgelegt werden. Die Anzeige von Umin erfolgt analog zur oben beschriebenen Spannungsausgabe des Futaba-Sensors, d.h. bei geringer werdender Last wird auch wieder die gegebenenfalls höhere Spannung angezeigt, was dann auch zur Rücknahme des Alarms führt.

Als zusätzliche Funktion wurde die Möglichkeit geschaffen, die Telemetriewerte auch auf einer Jetibox auszugeben (Bild 5) und den Schwellwert für den Morsecode-Alarm beliebig einzustellen (Bild 6). Der eingestellte Wert wird in den EEPROM des Prozessors geschrieben und bleibt so lange erhalten, bis er erneut geändert wird. Wird die eingestellte Schwelle unterschritten, wird der Morsecode-Alarm für Unterspannung ausgegeben.


Ich selber nutze nur die in Bild gezeigte Telemetriedarstellung auf dem DC16 Sender. Der Alarm für die niedrigste Zellenspannung ist über das Menü „Alarme“ im Sender festgelegt (Bild 7). Den Morsecode-Alarm für den sensorseitigen Alarm habe ich bewusst ausgeschaltet.

Für die Implementierung des Jeti-Protokolls habe ich die im Internet frei erhältliche und von Bernd Wokoek zur Verfügung gestellte Umsetzung des Jeti EX-Protokolls in einer C-Bibliothek verwendet. Diese Bibliothek kann herunter geladen werden (https://sourceforge. net/projects/jetiexsensorcpplib) und enthält auch einige mehr oder weniger einfache Beispielprogramme.
Da ich in Sachen C-Programmierung noch Anfänger bin, habe ich die zur Verfügung gestellten Funktionen längst noch nicht alle „durchdrungen“. Das war aber auch nicht notwendig, weil ich mich für meine Bedürfnisse voll auf die vorhandenen Beispielprogramme stützen konnte. Damit ist es mir relativ zügig und problemlos gelungen, die gewünschten Werte an den Sender zu übertragen und dort auch darzustellen.
Im Prinzip muss man den Sensor zunächst einmal definieren, indem man ihn tabellarisch beschreibt und dabei für jeden Telemetriewert eine ID, einen Anzeigetext, eine Einheit und das Datenformat festlegt. Dann kann dem Sensor in der Setup Routine noch ein Name zugeordnet und die serielle Kommunikation eröffnet werden. In der eigentlichen Programmschleife sind den definierten Telemetriewerten über deren ID lediglich noch die konkreten Messwerte zuzuordnen und mit dem abschließenden Befehl „jetiEx.DoJetiSend“ an den Empfänger zu übergeben. Das war’s dann auch schon. Hinzu kommt lediglich noch die Kommunikation mit der Jetibox, die ebenfalls aus einem Beispielprogramm übernommen und modifiziert werden konnte. Das von mir erstellte Programm steht ebenfalls auf der VTH-Seite zum Download bereit.
Abschließend bleibt nur noch zu erwähnen, dass sich die hardwareseitige Aufrüstung zum Jeti-Sensor lediglich darauf beschränkt hat, auf dem Arduino Bord von TX nach RX einen 2K2-Widerstand einzulöten und das Signalkabel des Servosteckers mit dem TX Pin zu verbinden (Bild 8).

Da das Arduino pro mini Board keinen eigenen USB-Anschluss besitzt, benötigt man zum Download von Programmen noch ein passendes USB-Modul (FTDI Breakout, USB/ Seriellkonverter). Bild 9 zeigt, wie es am Sensor angeschlossen wird. Nach dem Anstecken des USB-Kabels an den PC wird automatisch eine serielle Schnittstelle eingerichtet, deren Portnummer im Gerätemanager ersichtlich und in der Arduino IDE einzutragen ist. Wichtig ist auch, das richtige Board und den richtigen Prozessortyp auszuwählen (Bild 10). Anschließend kann das Programm vom PC auf das Board heruntergeladen werden.


Ganz zum Schluss möchte ich mich vor allem bei meinem Modellfliegerfreund Volker Keck dafür bedanken, dass er die Idee zu einem solchen Sensor hatte und mir damit auch den Anstoß gab, einen lang gehegten Wusch nach einem Eigenbausensor für meine Jeti-Anlage endlich in die Tat umzusetzen. Ein ganz besonderer Dank gilt natürlich auch Bernd Wokoek. Ohne seine geniale C-Bibliothek für das Jeti EX Protokoll hätte ich mich niemals an ein solches Projekt heran gewagt. Und last but not least hat mir das Jeti-Forum weitergeholfen, über das eine oder andere Anfängerproblem in C hinweg zu kommen. Auch dafür sei herzlich gedankt.
