^

BTF - BLHeli Telemetry Feeder, ein BLHeli Telemetrie Protokollwandler


 

BLHeli Telemetrie ohne Flugcontroller!    >aktualisiert 25.11.20<

   BLHeli_32 ESCs sind sehr häufig telemetriefähig, das heißt sie können Daten, wie die Spannung des Flugakkus, Strom, entladene Kapazität, Motordrehzahl und Temperatur (des Hauptprozessors) ausgeben. Alle diese Daten werden im ESC selber gemessen. Da BLHeli aus der Multicopter-Welt kommt, übernimmt üblicherweise der obligatorische Flugcontroller die Anforderung und Weitergabe an einen telemetriefähigen RC Empfänger. Aber Achtung: Nicht jeder BLHeli_32 ESC kann Telemetrie oder er kann keinen Strom/Kapazität messen.

Seit der Firmwareversion 32.6 können wir BLHeli_32 so konfigurieren, dass die Telemetriedaten permanent gesendet werden. Das von mir im November 2018 vorgestellte Windows-Programm BLHeliTelemetryView nutzt das, um die Daten mittels eines USB-UART Wandlers anzuzeigen und zu speichern.

Eigentlich wollen wir die Daten aber auf unserem Fernsteuersender sehen! Das verwendete Format kann jedoch kein mir bekanntes RC-System direkt verarbeiten. Um die Daten auf dem Senderdisplay bewundern zu können, müssen diese in das Telemetrieformat des jeweiligen Herstellers übersetzt werden. Genau das kann der BLHeli-Telemetry-Feeder (BTF). Aktuell kann der BTF drei Protokolle ausgeben:
  1. FrSky D8 Hub
  2. FrSky S.Port
  3. FlySky iBus Telemetry

Die Arbeit erledigt ein Mikrocontroller, der mit der BTF-Firmware geladen werden muss. Der gesamte Hardware-Aufwand beschränkt sich im Minimalfall auf zwei Bauteile, dem Mikrocontroller und einen Kondensator. Die Firmware ist lauffähig auf:

  • AtTiny13 (abgespeckte Version; nur für D8 Hub)
  • AtTiny45
  • AtTiny85 oder Digispark-Board
  • Arduino auf Basis des AtMega168p (Nano, Mini Pro) - Typ 5V 16 MHz
  • Arduino auf Basis des AtMega328p (Uno, Nano, Pro Mini) - Typ 5V 16MHz
BTF gibt die Daten nicht nur weiter, sondern versucht auch die originalen Sensoren zu emulieren und bildet einen Mittelwert der Messwerte, BLHeli Telemetrie überträgt ca. 30 Datensätze mit den 5 Messwerten. Das ist zu viel für unser Auge (und den angeschlossenen Hauptrechner). BTF bildet aus jeweils 12-16 Werten einen Mittelwert (je nach Protokoll) mit dem Ziel etwa alle 0,5 Sekunden einen aktualisierten Messwert präsentieren zu können.
BTF-Intro

BTF-Taranis


Den ESC konfigurieren

Es gibt noch eine Hürde die nicht ohne ist, wenn wir uns noch nie mit BLHeli beschäftigt haben. Leider müssen wir nämlich davon ausgehen, dass ein BLHeli32_32 ESC im Auslieferungszustand nicht so eingestellt ist, dass er uns die Telemetriedaten automatisch liefert. Zwei softwaremäßige Voraussetzungen müssen gewährleistet sein:
  1. Firmware größer als Version 32.5
  2. In der Konfiguration muss "Auto Telemetry" auf "ON" eingestellt sein.

Beides können wir mir dem Programm BLHeliSuite32 erledigen. Außerdem brauchen wir ein Interface. Das kann ein günstiger Arduino sei, der von der BLHeliSuite32 zum passenden Interface geflasht wird. Jedenfalls ist das ein Thema für sich. Wer das machen möchte, sollte sich die zahlreichen Tutorials im Netz und auf YouTube dazu reinziehen.
Die BlHeliSuite32 gibt's hier: https://blhelisuite.wordpress.com

 

Hardware bauen

Möglichkeit 1: AtTiny45 oder AtTiny85 - hier mit Schutzwiderständen in den Datenleitungen und Staus-LED:

BTF-Tiny85BTF-Tiny85
Schaltbild

und

Realität

Widerstände und LED sind optional - es geht auch minimalistisch:
BTF-Minimal_frontBTF-Minimal_insideBTF-Minimal_back


Möglichkeit 2: Ein Digispark ist ein AtTiny85 mit USB-Bootloader fertig auf einem Board:

Der reale Digispark ist abweichend zum Schemabild einer mit Mikro-USB-Anschluss. Ich habe auf der Rückseite einen Anschluss für ein normales Servo-Verlängerungskabel angelötet. Der freie Pin an 5V hat keine Funktion, er dient lediglich zum mechanischen Fixieren des BLHeli-Daten Pins.  
BTF-Digispark BTF-Digispark_frontBTF-Digispark_back


Möglichkeit 3:  Arduinos auf Basis des AtMega328p oder AtMega168p sind auch geeignet.
Die BMP180 Platine auf der Rückseite hat nichts mit dem BLHeli-Telemetry-Feeder zu tun. Ich habe lediglich zum Testen einen OpenXSensor umgeflasht.

 BTF-ProMiniBTF-ProMini_frontBTF-ProMini_back


Die Status LED

... kann mehrere Betriebszustände anzeigen:
  • Programmstart: 3x blinken
  • Datenverkehr (Normalbetrieb): Flackern
  • Warten auf Daten vom BLHeli ESC: LED aus
  • Warten auf Daten vom Receiver: LED Dauerlicht (nicht bei D8Hub weil nicht bidirektional)

Download

BL-Heli-Telemety-Feeder Firmware  -  enthalten sind vorkompilierte Binaries und die Quelltexte.
Neu 25.11.2020 : Frequenzeinstellung für AtTiny-Versionen angepasst.

Wenn wir die Quelltexte selbst kompilieren wollen, finden wir hier die Software dazu (Great Cow Basic):
http://gcbasic.sourceforge.net/Typesetter/index.php/Home
WICHTIG: In der Serial-Software-Library war ein Bug - bitte unbedingt mit diese Dateien ersetzen:
https://sourceforge.net/p/gcbasic/discussion/629990/thread/3660240938
Bug behoben ab Great Cow Basic Version 0.98.05 (20.04.2019).

Die Firmware auf den Controller flashen

AtTiny45  / AtTiny 85
Diese müssen per ISP-Programmer befüllt werden. BTF erwartet, dass der Tiny mit internerm PLL Oszillator läuft (16,5 Mhz). Dazu muss die Low Fuse auf 0xF1 gesetzt werden.
Ich empfehle dazu AvrDudess zu verwenden. Das ist eine grafische Oberfläche für Avrdude (der im Download enthalten ist).

AtTiny13
Hier gilt im Prinzip dasselbe, wie für die anderen Tinies. Unterschiede: BTF erwartet, dass der Tiny13 mit dem internen Oszillator auf 9,6 MHz läuft. Dazu muss die Low Fuse auf 0x3A gesetzt werden.

Digispark
Der Digispark ist eine fertiges Board mit einem AtTiny85 und USB-Anschluss. Das besondere ist der vorinstallierte USB-Bootloader "Micronucleus". Der ermöglicht es, die Firmware ohne weitere Hardware auf den AtTiny zu bekommen. Allerdings ist dazu ein Treiber zu installieren. Alles dazu erforderliche ist im Download vom Micronucleus enthalten. Mein Tipp: Zum Installieren des Treibers unbedingt die Variante mit der Zadig-Software durchführen.
Das Flashen funktioniert dann so, dass der Digispark an einen USB-Anschluss angesteckt wird, der Bootloader wartet 6 Sekunden auf einen Flashversuch. Danach startet die zuvor geladene Firmware. 
Link zu Micronucleus: https://github.com/micronucleus/micronucleus
Aktueller Boottloader: https://github.com/ArminJo/micronucleus-firmware

Arduino
Obwohl BTF nicht mittels Arduino geschrieben wurde, lässt sich die Firmware problemlos mit dem Arduino Bootloader laden. Auch hier empfehle dafür AvrDudess. Als Programmer logischerweise Arduino auswählen. Da der Bootloader verwendet wird, haben wir nichts mit dem setzen von Fuses zu tun.
Der Arduino muss folgende Voraussetzungen erfüllen: 5V Typ, 16 MHz, mit AtMega168p oder AtMega328p.


Telemetrie im Sender einrichten

Das folgend beschriebene gilt für die Anzeige der Daten auf einem Sender mit OpenTX Version 2.2.3. Alle Sensoren sollten im OpenTX Telemetriemenü nach Aufruf der Sensorsuche angezeigt werden. Dort wo es passende Sensoren gibt, versucht BHF diesen zu emulieren. Wo nicht, werden die Rohdaten übertragen und können wie unten beschrieben passend konfiguriert werden..  

FrSky D8 Hub
Telemetrie
  • Sensorname VFAS = Akkuspannung [V]
  • Sensorname Curr = Motorstrom [A]
  • Sensorname RPM = Motorumdrehungen [rpm]
    Es werden eRPM angezeigt. Um den an der Motorwelle anliegenden Wert zu erhalten, müssen wir den Messwert durch die Anzahl der Polpaare teilen (also z.B. "7" für einen Motor mit 14 Magneten). In den Einstellungen zu der Sensorzeile geben wir diesen Wert in der Zeile "Prop" ein. Bei der AtTiny13 Version müssen wir außerdem einen Multiplikator von 10 eintragen (Feld "Multiplik.", engl. "Multiplier").
  • Sensorname Tmp1 = Reglertemperatur [°C]
  • Sensorname 000C = Entladene Kapazität [mAh]
  • Sensorname 000D = Anzahl der Prüfsummenfehler
    Der Wert gibt Hinweise auf Störungen in der Verbindung zwischen BLHeli-ESC und BTF.
FrSky S.Port Telemetrie
  • Sensorname VFAS = Akkuspannung [V]
  • Sensorname Curr = Motorstrom [A]
  • Sensorname RPM = Motorumdrehungen [rpm]
    Es wird eRPM angezeigt. Um den an der Motorwelle anliegenden Wert zu erhalten, müssen wir den Messwert durch die Anzahl der Polpaare teilen (also z.B. 7 für einen Motor mit 14 Magneten). In den Einstellungen zu der Sensorzeile geben wir den Divisor in der Zeile "Prop" ein.
  • Sensorname Tmp1 = Reglertemperatur [°C]
  • Sensorname RB1C = Entladene Kapazität [mAh]
  • Sensorname RB2C = Anzahl der Prüfsummenfehler
    Der Wert gibt Hinweise auf Störungen in der Verbindung zwischen BLHeli-ESC und BTF.
    Hinweis: Softwareseitig sind RB1C und RB2C ein Sensor (64 bit Datenbreite). RB2C wird zum Übertragen der Prüfsummenwerte zweckentfremdet und zeigt deshalb mAh als Messeinheit an - bitte nicht verwirren lassen - die Anzeige der Einheit kann auch wegkonfiguriert werden.
FlySky iBus Telemetrie
  • Sensorname Tmp1 = Reglertemperatur [°C]
  • Sensorname A3 = Akkuspannung [V]
  • Sensorname 0004 = Motorstrom
    Für den Motorstrom habe ich leider keinen vorkonfigurierten Sensortyp gefunden. BTF gibt pro 100mA einen ganzzahligem Wert aus (z.B. 123 entsprechen 12,3 A). Um den richtigen Wert zu erhalten, müssen wir in der Konfiguration unter "Umrechnung" (engl. "Ratio") den Wert 25.5 eingeben. *)
  • Sensorname RPM = Motorumdrehungen
    BTF gibt wird eRPM/100 aus. Leider erschließt sich mir die Logik bei OpenTX hier nicht. Folgende Einstellungen zu der Sensorzeile ergeben realistische Werte:
    "Unit" = rpm; "Multiplikator" (engl. "Ratio") = 0; "Prop" = 3660 (!?) für 14pol Motor; "Prop" = 1826 (!?) für 8pol Motor.  *)
  • Sensorname 000C = Entladene Kapazität [mAh]
  • Sensorname 000D = Anzahl der Prüfsummenfehler
    Der Wert gibt Hinweise auf Störungen in der Verbindung zwischen BLHeli-ESC und BTF.
    *) Das gilt für OpenTX 2.2.3 Softwarestand 2019-01-07


Frank Steinberg, im Februar 2019

Zur Startseite

 

Haftungsausschluss    Datenschutzerklärung    Impressum

© Frank Steinberg