So, ich habe mir mal die Arbeit gemacht und das Display am FC zum Laufen bekommen

. Danke an
@AndreasB242 für die gute Vorarbeit!
TL;DR:
Ich finde, dass es echt super aussieht! Und das meiste funktioniert gut.
Ein Video vom Display ist hier:
https://www.dropbox.com/s/o81ibg4oab30zgj/2016-07-29 19.21.39.mov?dl=0
Der Code ist in meinem Fork auf Github:
https://github.com/daenny/Arduino-Pedelec-Controller
Ausführliche Beschreibung:
Das Display ist in der direkten Sonne nicht immer gut lesbar, aber im Dunkeln macht es echt was her

Ich habe mir das kleinere Display gekauft mit 2.2", aber der Code sollte ohne Probleme auf dem größeren laufen.
Ich habe ein Case 3D gedruckt, das ist noch nicht ganz optimal (wir haben den 3D Drucker neu, da sind die richtigen Einstellungen noch nicht ganz gefunden) und anscheinend habe ich mich um 1mm vermessen an der linken Seite, sodass es etwas vom Display verdeckt

.
Ich benutze keinen "echten" FC, sondern einen Teensy, an dem ich das Display direkt angeschlossen habe (via Hardware SPI) und in meiner Throttle sind die 3 Taster eingebaut (siehe hier
https://www.pedelecforum.de/forum/index.php?threads/forumscontroller-lite-mit-vesc.38710/)
Der Anschluss des Displays ist ähnlich wie hier:
https://www.pjrc.com/store/display_ili9341.html
Ich habe Reset auf Pin 10, CableSelect ist auf Ground kurzgeschlossen, MISO ist bei mir nicht angeschlossen, sodass ich 6 Kabel in total benoetige: MOSI (11), RESET (10), LED und VCC beide direkt auf 3.3V, SCK (13), DC(9) und Ground. Reset auf 3.3V ging bei mir nicht, wobei es eigentlich gehen sollte. So könnte man evtl noch ein Kabel einsparen.
Ich habe einen GSM Middrive Motor von Woosh ohne integrierten Controller, mit einem VESC als Motorsteuerung, via UART am Teensy angeschlossen. Außerdem sind das Dual PAS, Speed-Reedswitch, 3 Taster, Brake-reedswitch, Throttle und Display am Teensy angeschlossen. Die 5V out vom VESC beliefern den Teensy, PAS und Throttle. 3.3V vom Teensy geht zum Display.
Neues im Vergleich zum originalem Display Code:
- Da ich den Teensy benutze, habe ich dafuer die optimierte Library eingebunden (
https://github.com/PaulStoffregen/ILI9341_t3)
- (Fast) alle Daten werden korrekt am Display angezeigt und live geupdated (Reichweite und Zeit habe ich noch nicht implementiert)
- Neues icon für PAS (in)aktiv, und Profil 1/2
- In den "TextComponents" wird die Genauigkeit angegeben, sodass man die Nachkommastellen richtig anzeigen kann.
- Im Menu kann man jetzt zyklisch durchgehen, d.h. wenn man ganz oben ist und nach oben geht, springt man ganz nach unten und umgekehrt.
- Das Diagramm funktioniert live, es zeigt mit 1Hz einen Verlauf eines bestimmten Wertes an. Falls zwischendurch Updates des Wertes kommen wird der durchschnitt berechnet. Es skaliert automatisch auf den maximalen Wert in der Liste.
Kurzes Video hier:
https://www.dropbox.com/s/swfj2f695oipzj4/2016-07-29 20.38.35.mov?dl=0
- Man kann einfach "Views" definieren, also einfach eine Liste von Komponenten die angezeigt werden soll. Und was im Diagramm angezeigt werden soll. Im Moment habe ich "Trip view", "Power view" und der "Random rest"
- Das Nothilfe-Menu funktioniert, Profil switch, Licht, Bluetooth, an/aus, etc, geht via Display.
Änderungen am FC code (fürs Display):
- Theoretisch sollte man das Display auch relativ einfach über ein Serial Protokoll mit einem Extra Arduino betreiben können. Ich habe probiert das Display komplett "encapsulated" zu lassen. Sodass man alles was ich jetzt mit Funktionen aufrufen mache, auch per UART machen können sollte.
Änderungen am FC code (Unwichtig fürs Display):
- Der VESC liefert über UART die Stromspannung, Batterieamps, Motoramps, Motor RPM, VESC PCB Temperatur, VESC Mosfet Temperatur
- Der FC/Teensy schickt an den VESC die gewünschten Motoramps via UART, anstelle des PWM / Volt signals
- Ich benutze die Teensy Encoder Library für das PAS (dual quadrature PAS, im Motor integriert), dadurch habe ich 96 Ticks per Umdrehung (2 Hall Sensoren, 24 Magnete), ich habe jetzt auch eine "Minimum Ticks before start" Variable, da es sonst zu sensibel anspringt.
- Da der Teensy auf 96 MHz läuft habe ich den "slow loop" auf 10Hz anstelle der 1Hz laufen. Damit wird das Display auch mit 10Hz geupdated.
Noch ToDo:
- Bessere Case drucken, die ist schon designed, wer will, kann gerne die STL oder Inventor files haben.
- Eine "TimeComponent" programmieren, die die Zeit vernünftig anzeigen kann, für Uhrzeit und Fahrzeit
- Der Teensy hat eine integrierte RTC, dafür muss ich nur noch den Code in den FC integrieren
- Kabel und Code aufräumen
Ich habe keine Ahnung ob der Arduino Mega das Display auch neben dem ganzen FC Code schafft, ich denke aber, dass es gehen sollte. Alle FCs die auf dem Nano basieren, haben auf jeden Fall zu wenig Speicherplatz.
Wie aber schon gesagt, der Aufwand dass alles via UART mit einem extra Arduino am Display zum Laufen zu bekommen, sollte gehen.
Display am Lenker mit Throttle:
Display:
Teensy Board: (JST stecker: rechts -> 3xTaster, Brake und Throttle, JST unten links -> Display, links mittig: PAS + Speed sensor, links oben -> VESC UART, 5V in)
Teensy + VESC Paket:
PS: Programmiert habe ich das ganze in CLion mit CMakeLists (
https://github.com/drichelson/teensy-cmake), also wird es in der Arduino IDE wahrscheinlich nicht direkt funktionieren.