Hoverboard Firmware Hack - How to
November 2017
Related Pages
- E-Bobby Car
- E-Bobby Car Controller
- E-Bobby Car Controller (Teensy)
- Bobby Car Anhänger
- Hoverboard Firmware Hack - How to
Sie fasst alles zusammen, was ich in diesem Bereich weiß. Bei tiefergehenden Problemen kann ich nur bedingt helfen. Bitte auch bedenken, dass es nicht unwarscheinlich ist das Board hiermit zu zerstören.
Die aktuelle Firmware ist hier zu finden: github.com/NiklasFauth/hoverboard-firmware-hack
Seit Dezember 2019 nutze ich einen Fork von Emanuel Feru, welcher FOC (Field Oriented Control) unterstüzt: github.com/EmanuelFeru/hoverboard-firmware-hack-FOC
Ich gehe hier von einem Linux als Betriebssystem aus, genauer gesagt irgendwas auf Ubuntu basierendes.
Als Programmer verwende ich einen günstigen ST-Link V2.
Firmware kompilieren
Um die Firmware zu kompilieren wird der gcc-arm kompiler benätigt.
Entweder unter developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads runterladen und den Ordner “gcc-arm-none-eabi-…” entpacken. Oder einfacher:
sudo apt-get install gcc-arm-none-eabi
Nachtrag: Es ist möglich, dass manche Versionen zu Problemen füren. Mit gcc-arm-none-eabi-7-2018-q2-update hatte ich keine Probleme.
Danach die Firmware von Github klonen:
git clone https://github.com/NiklasFauth/hoverboard-firmware-hack.git
oder
git clone https://github.com/EmanuelFeru/hoverboard-firmware-hack-FOC.git
Dann in den Ordner wechseln und kompilieren.
Warscheinlich muss im Makefile noch der “PREFIX” mit dem korrekten Pfad zur gcc-arm Toolchain gefüllt werden. Ich habe die gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2 im home Verzeichnis entpackt, die entsprechenden Zeile im Makefile sieht demnach wie folgt aus:
PREFIX = ~/gcc-arm-none-eabi-7-2018-q2-update/bin/arm-none-eabi-
Danach kompilieren mit:
cd hoverboard-firmware-hack
make
Wenn in die Datei build/hover.bin existiert hat das kompilieren funktioniert.
Nun sollten die eigenen Anpassungen gemacht werden. Hauptsächlich muss in der Inc/config.h ein und auskommentiert werden, welche Art der Steuerung benutzt wird.
Dazu z.B. #define CONTROL_NUNCUCK auskommentieren: //#define CONTROL_NUNCUCK
und die gewünschte Methode einkommentieren z.B. zur Steuerung über einen Poti oder Hallsensor: #define CONTROL_ADC
(Teilweise muss die Gasstellung noch ausgerechnet und in der src/main.c angepasst werden. Dazu nach #ifdef CONTROL_ADC suchen und in der oder den Zeilen danach die Gaswege anpassen.
Nach den gespeicherten Änderungen neu kompilieren:
make clean
make
STM32 Toolchain
sudo apt-get install openocd libusb-1.0-0-dev cmake build-essential
git clone https://github.com/texane/stlink
cd stlink
make release
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
cd Release
sudo make install
sudo ldconfig
Hoverboard anschließen:
- Motorkabel an Controlleranschlüsse zunächst farbrichtig verbinden. Falls Motor später nur ruckelt oder schlecht läft ggf. andere Kombinationen ausprobieren. Es gibt eine Richtige.
- Hallsensoren anschliessen. Langes Hallsensorkabel an den Motor, der an dem langen Motorkabeln steckt.
- Powerknopf anschliessen.
- Poti oder PPM an grünes Kabel vom übrigen langen unbenutzen 4 Poligen Stecker anschliessen “RX2 / PA3”. GND nicht vergessen. 3.3V Level!
- swclock, GND und swdio vom Programmierheader mit ST-Link verbinden (nicht 3.3V !). Es empfiehlt sich eine Stiftleiste anzulöten. Pinbelegung: raw.githubusercontent.com/NiklasFauth/Hoverboard-Board-Hack/master/pinout.png
- ST-Link V2 an den Rechner stecken.
- 10S Lipo/LiIion Akku oder besser Labornetzteil mit 40V anschließen.
- Powerknopf drücken und während dem Flashen gedrückt halten!
- Testen ob stm erkannt wird:
st-info --probe
STM Unlocken
Bei einem “frischen” Board muss der STM geunlockt werden um ihn beschreiben zu können.
- Powerknopf drücken und während dem Flashen gedrückt halten!
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c init -c "stm32f1x unlock 0"
Das ist eine Zeile!
- Oder:
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c init -c "reset halt" -c "mww 0x40022004 0x45670123" -c "mww 0x40022004 0xCDEF89AB" -c "mww 0x40022008 0x45670123" -c "mww 0x40022008 0xCDEF89AB" -c targets -c "halt" -c "stm32f1x unlock 0"
Firmware flashen
- Powerknopf drücken und während dem Flashen gedrückt halten!
st-flash write build/hover.bin 0x08000000
Testen
Das Board wird nun per Knopfdruck eingeschaltet. -> Komische Pieptöne
Langsam Gas geben. Es kann hier auch mit nur einem angeschlossenen Motor getestet werden.
Es ist zu empfehlen hier noch ein Labornetzteil mit 40V und Strombegrenzung (0.5A) zu verwenden. Bei Verwendung eines Labornetzteils sollte jedoch nicht zu stark gebremst/gas weggenommen werden.
Dreht sich der Motor nicht obwohl eine signifikante menge Strom fließt oder ruckelt er sollten zunächst alle möglichen Motor-Controller Kabelkonfigurationen durchgetestet werden.
Viel Erfolg!