|
|
|
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:
- FrSky D8 Hub
- FrSky S.Port
- 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. |


|
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:
- Firmware größer als Version 32.5
- 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
|
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
|
|