Mostfun

Ich bin ja bekennende Jeti-Fanin :-). Die Telemetrie ist klasse und durch das offene System gibt es viele Komponenten auch von unterschiedlichen Lieferanten. Eine Sprachausgabe von von VSpeak rundet alles ab. Eine Sache hat mich aber bisher immer geärgert: meine Telemetriedaten werden auf der Jeti-Box angezeigt, auf dem Kopfhörer angesagt, aber nirgends gespeichert.

Mit einer Jeti-Profibox können die Daten geloggt werden, aber die Box kostet 170EUR und hat einen eigenen Akku - Obsoleszenz lässt grüßen. Die Box hat einen eingebauten Sender, aber der harmoniert laut Internet nicht mit dem VSpeak-Sprachmodul, ein Umstand den ich nicht mehr missen möchte. Dann gibt es noch die Druidbox. Eine kleine Box die die angezeigten Informationen auf Bluetooth übersetzt. Mit einem Smartphone kann dann das gesendete aufgezeichnet werden. Etwas kompliziert und ein weiterer 2,4GHz-Sender durch das Bluetooth.

Warum nicht die Daten am Kabel der Jetibox einfach abgreifen (das Protokoll hat Jeti veröffentlicht) und die Daten auf eine SD-Karte zu schreiben.

Plattformentscheidung

Mit einem Arduino und einem passenden SD-Karten-Modul sollte sich der Entwicklungsaufwand klein halten. Beim Arduino fiel meine Wahl auf den Arduino Micro. Dieser ist angenehm klein und hat zusätzlich zur seriellen Schnittstelle einen unabhängigen USB-Anschluß, der die Programmierung erlaubt und auch bei bedarf einen Terminal realisiert, um Daten gleich auf dem PC abzugreifen. Das erleichtert die Arbeit ungemein. Die  serielle Schnittstelle kann direkt mit einem Y-Kabel mit dem Kabel zur Jeti-Box angeschlossen werden. Es werden 9Bit übertragen - mit 9600 Baud.

Logger 0.0

Die Anpassung der Schnittstelle war ein Klacks und so kamen nach sehr kurzer Zeit bereits die Telemetriedaten auf dem Terminal-Fensters des PCs an. Nun ging es an die SD-Karte. Es gibt verschiedene SD-Kartenmodule für den Arduino. Der Haken ist, dass eine SD-Karte mit 3,3V betrieben werden muss, aber der Arduino mit 5V läuft. Bei Adafruit gibt es ein Modul, das die Pegelkonverter bereits enthält und außerdem eine Micro-SD unterstützt. Die SD-Library rundet die Zutaten ab. Die Benutzung der Library ist fast so einfach wie der Umgang mit der seriellen Schnittstelle.

Logger 1.0

Der erste Logger war an einem Nachmittag geschrieben. Allerdings  hatte er noch ein paar Problem mit dem CSV-Format. Das Problem: die Zahlen müssen mit einem Separierzeichen vom Text getrennt werden, damit Excel mit den Daten gut zurecht kommt. Eine Konvertierung "on the fly" funktioniert zu 95%, aber nicht zu 100%. Aus diesem Grund habe ich das Programm noch einmal neu strukturiert und die Konvertierung kurz vor der Ausgabe positioniert. Damit können Vorgänger und Nachfolger eines Zeichens analysiert werden und die Konvertierung klappt zu 100%.

Messagebuffer-System

Da die Empfangsroutine interruptgetrieben ist laufen Empfang und Ausgabe unabhängig voneinander. Ein Puffer vermittelt zwischen den beiden Prozessen. Ein letztes Problem war, dass das Loggen mit dem Ausschalten des Senders beendet werden sollte. Das führt zur Gefahr, dass das File-System der SD-Karte zerschossen wird.


Energiespeicher

Das der Arduino und die SD-Karte kaum Strom braucht, kann ein kleiner Elko genügen Restenergie liefern um den laufenden Schreibvorgang abzuschließen, das Filesystem zu schließen und den Arduino in einen sicheren Zustand zu fahren. Damit der Kondensator im Einschaltmoment nicht zu viel Strom zieht, habe ich dem Kondensator einen Ladewiderstand spendiert. Eine Diode verhindert im Ausschaltmoment, dass sich der Sender vom Kondensator bedient.

Spannungseinbruchdetektor

Natürlich muss dazu der Abschaltvorgang so schnell wie möglich erkannt werden. Dazu dient wieder ein Interrupt. Dieser wird durch den analogen Komparator und der eingebauten Referenzspannung ausgelöst. Damit die Sache noch besser funktioniert, fungiert eine Zenerdiode als Spannungs-shifter. Der Spannungseinbruch wir dabei von 11..9V um 7,5V nach unten verschoben, ohne das die Flankensteilheit darunter leidet.

Signalentkopplung

Nicht ganz unwesentlich: in den Signalpfad der seriellen Schnittstelle habe ich einen 10kOhm Widerstand geschaltet. dieser verhindert, dass auch bei ausgesteckten Arduino die Jetibox noch Daten empfangen kann (Failsafe).

 

Nun zum Schaltplan:

 Aufbau der Platinen

Dieser Punkt war nicht allzu schwer. Der Arduino wird mit dem SD-Kartenmodul zu verbunden:

Das Verdrillen der Kabel verbessert die Signalintegritätm und sieht gut aus.

 

Auf einem kleinen Lochrasterplatinen-Rest werden die restlichen Komponenten aufgelötet:

 

Der Einbau in den Sender (Graupner MC22) 

Links oben war noch eine Lücke - ideal für den Jeti-Logger.

Dies ist die Spannungseingangsplatine. Auf dieser ist die geschaltete Akkuspannung des Senders abgreifbar (oranges Kabel). Die dazugehörige Masse ist das braune Kabel.

 An den mit den Pfeilen markierten Stellen habe ich die Kabel angelötet. 

 So sieht mein Sender jetzt aus:

 Arduino inside!!!

Das SD-Karten-Modul ist über einen Schlitz nach außen so eingebaut, dass ich die Micro-SD-Karte von außen bequem entnehmen kann.

 

 

 

Die Software

Die Logger-Software wird mit zwei Parametern gesteuert:

Mit der "Samplingrate_ms" wird die Aufnahmeperiode in Millisekunden eingestellt.

Die Variable Log-Control: 


Bit8: LnC 
 =0 Logeintrag wenn Änderung auftritt, 1=Log bei jedem Eintrag
Bit7: LnT   =0 Logeintrag maximal xxx ms(*), 1=Alle Nachrichten werden geloggt (12Logs/s)

Bit6: LaM  =0 Log nur Nachrichten die Zahlen enthalten, =1 alle Nachriten werden geloggt
Bit5: Prs    =0 Log erfolgt so wie angezeigt, 1= Log wird in CSV-Format gewandelt gespeichert
Bit4: keine Funktion
Bit3: CtS    =0 Punkte werden als Punkte geloggt, 1=Punkte werden in Kommas übersetzt (wichtig für 
                     Excel)
Bit2: LcE    =0 Log nur reine Daten,
1=Kommunikations-Fehler werden geloggt
Bit1: LcK    =0 Log nur Telemetriedaten, 1=Auch Tasten werden aufgezeichnet

 (*) das Zeitlimit wird mit der Variable "Samplingrate_ms" definiert.

 

Die Software ist hier herunterladbar: (Jetilog2_2.zip)

 Sie benötigt ein h-File, das in den Ordner "libraries" kopiert werden muss:

Die Library ist hier herunterladbar: (LibJetilog2_x.zip)

 

Test

 

Funktionstest:

Der Log von der seriellen Schnittstelle:

Logging to: L70.CSV
1;0;Volt MIN/ACT/MAX;10,1;/ ;9,9;/;10,2; V
2;0;Volt MIN/ACT/MAX;10,1;/ ;9,9;/;10,2; V
3;1;Volt MIN/ACT/MAX;10,1;/ ;9,9;/;10,2; V
4;1;Volt MIN/ACT/MAX;10,1;/ ;9,9;/;10,2; V
...
15;7;Volt MIN/ACT/MAX;10,1;/ ;9,9;/;10,2; V
->CMD Button Down
16;7;RX Signal Level  Ant;1;:- Ant;2;:- 
...
36;18;Volt MIN/ACT/MAX;10,1;/ ;9,9;/;10,2; V
Error: Frame Error: Parity
37;20;                               
38;20;   Tx ->           v           

Das SD-File L70.CSV:

1;0;Volt MIN/ACT/MAX;10,1;/ ;9,9;/;10,2; V
2;0;Volt MIN/ACT/MAX;10,1;/ ;9,9;/;10,2; V
3;1;Volt MIN/ACT/MAX;10,1;/ ;9,9;/;10,2; V
4;1;Volt MIN/ACT/MAX;10,1;/ ;9,9;/;10,2; V
...
15;7;Volt MIN/ACT/MAX;10,1;/ ;9,9;/;10,2; V
16;7;RX Signal Level  Ant;1;:- Ant;2;:- 
...
36;18;Volt MIN/ACT/MAX;10,1;/ ;9,9;/;10,2; V
37;20;                               
38;20;   Tx ->           v           

  

Komparator-Test:

Der Spannungskomparator initiert die Abschaltung, wenn die Eingangsspannung (TP3) unter 8,6V (gemessen) fällt.

 

Elektrische Vermessung:

Es wurden 10:1 Probes verwendet, d.h. die Spannungen sind mit 10 zu multiplizieren.

 Einschaltverhalten, CH1=TP3, CH2=TP2:

Deutlich ist der Einfluss von R1 in Verbindung mit C1 zu sehen. Der Peak-Strom ist dabei auf 0,5A begrenzt, d.h. sollte keine Probleme für den Sender darstellen.

 

Hier ist das Ausschaltverhalten zu sehen:

Die Spannung am Mikroprozessor und an der SD-Karte wird bei einer Eingangsspannung von 9V und einem erlaubten Drop von 3V 57ms gehalten. Das reicht für ein kontrolliertes Abschließen des Schreibvorgangs und das Schließen des Filesystems. Die Aufnahme wurde mit der maximalen Schreibrate von 12Logs/s erstellt.

 Hier zwei Software-Probes: CH1=Write finished (flush), CH2=Close SD-Filesystem:

Die Zeit ergab bei mehreren Tests: tmin=7,8ms, tmax=38ms eine Statistikfunktion hat mein privates Oszi leider nicht.

 

 Hier die Verzögerung zwischen dem Spannungseinbruch-Interrupt (Shut-Request)  und Shut:CH1=Shut-Request CH2=Shut (start):

 12us Verzögerung.

 

Interesse halber: Die Mainloop wird in 16,4us durchlaufen, mit entsprechenden Interrupts können es aber auch 24us sein.

 

 

Allein das Pin-Handling für das Verfolgen der Signale dauert davon 12,9us:

 

Dauer eines Nachritenpaketes: 55ms