Hoverboard Firmware Hack - How to
Dezember 2017
Inhaltsverzeichnis
- E-Bobby Car
- Hoverboard Firmware Hack - How to
- Anhänger
- Controller
- Controller (Teensy)
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,GNDundswdiovom 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
- Wenn erkannt ist chipid nicht 0x0000.
- Powerknopf loslassen
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"
- Oder wenn das nicht funktioniert hat “Error: Target not halted”:
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 "mww 0x40022010 0x220" -c "mww 0x40022010 0x260" -c "sleep 100" -c "mww 0x40022010 0x230" -c "mwh 0x1ffff800 0x5AA5" -c "sleep 1000" -c "mww 0x40022010 0x2220" -c "sleep 100" -c "mdw 0x40022010" -c "mdw 0x4002201c" -c "mdw 0x1ffff800" -c shutdown
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"
- Powerknopf loslassen
Firmware flashen
- Powerknopf drücken und während dem Flashen gedrückt halten!
st-flash write build/hover.bin 0x08000000
- Wenn fertig Powerknopf loslassen
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!