- CAN: Motorcontroller <-> Stromcontroller <-> Displaycontroller
- Bluetooth-UART: Display-Controller -> Handy
Byte-Order in CAN-Datenfeldern ist little-endian.
ID: 0x01xx
Der Displaycontroller liest die Buttons aus und bestimmt daraus die Sollgeschwindigkeit etc.
Inputs:
- Totmannschalter
- Start-Button
- Hupe-Button
- Schneller-Button
- Langsamer-Button
- Bremssensor
Interner Zustand von eigenen Inputs:
- Totmannschalter geschlossen / offen
- Hupe an/aus
- Motor an/aus
- Fahrstrom / Geschwindigkeit Sollwert
- Vergangene Zeit seit Start des Rennens
Interner Zustand von externen Inputs (per CAN):
- Geschwindigkeit Ist (vom Motorcontroller)
- Fahrstrom Ist (vom Motorcontroller)
- Gefahrene Strecke (vom Motorcontroller)
- Notaus gezogen / nicht gezogen (vom Stromverteiler)
- Strom- und Spannungswerte (vom Stromverteiler)
- Byte 0+1: Geschwindigkeit-Soll (in Meter / h oder Dezi-Ampere je nach Modus, signed 16-bit integer)
- Byte 7: Status-Flags (Horn-Flag, Totmann-Flag, TimeRunning-Flag, Speedmodus / Strommodus im Motor-Flag 1)
ID: 0x02xx
Der Motorcontroller überwacht die Fahrstrom-Spannung, berechnet die aktuelle Radgeschwindigkeit aus dem Rad-Geschwindigkeitssensor, und berechnet die zurückgelegte Distanz aus der Anzahl der gemessenen Radumdrehungen. Diese Daten werden alle 200ms gesendet.
- Byte 0+1: Eingangsspannung (Dezi-Volt, unsigned 16-bit integer)
- Byte 2+3: Geschwindigkeit-Ist (Meter / h, unsigned 16-bit integer)
- Byte 4+5: Gefahrene Distanz (Meter, unsigned 16-bit integer)
ID: 0x03xx
Der Stromcontroller überwacht Spannung und Strom im 48V und 12V Kreis sowie den Notaus-Zustand. Er sendet alle 200ms zwei Nachrichten, eine mit der Spannung (CurrentBit nicht gesetzt) und eine mit dem Strom.
Inputs (an Controller)
- Stromsensor 48V-Gesamt
- Stromsensor 12V-Schiene
- Stromsensor 48V-Output (Motorcontroller)
- Stromsensor PV
- Spannungssensor 48V
- Spannungssensor 12V
- Notaus
Interner Zustand von eigenen Inputs:
- ...
Interner Zustand von externen Inputs (per CAN):
- Motorcontroller an/aus
- Byte 0+1: Spannung 48V (Dezi-Volt, unsigned 16-bit integer)
- Byte 2+3: Spannung 12V (Dezi-Volt, unsigned 16-bit integer)
- Byte 7: Statusflags (Notaus-Flag, Strom/Spannung-Flag)
- Byte 0+1: Strom 48V (Dezi-Ampere, unsigned 16-bit integer)
- Byte 2+3: Strom 12V (Dezi-Ampere, unsigned 16-bit integer)
- Byte 4+5: Strom PV (Dezi-Ampere)
- Byte 7: Statusflags (Notaus-Flag, Strom/Spannung-Flag)
Das Handy sendet an den Displaycontroller einmalig nach Aufbau der Verbindung:
- Rundenzahl
- Rundenstrecken
- Gesamtzeit
(Der Displaycontroller benutzt für diese Parameter zunächst hardcoded Default-Werte; falls eine SD-Karte eingesteckt ist liest er die Parameter von dieser; falls das Handy verbunden ist, aus der Bluetooth-Kommunikation)
Der Displaycontroller sendet an das Handy:
- Zeit seit Start (in Sekunden)
- Zurückgelegte Strecke (In Meter)
- Geschwindigkeit-Ist (In Meter / h)
- Energieverbrauch (Strom der an den Motorcontroller geht, in Dezi-Ampere)
Das Protokoll dazu sollte so aussehen:
- Displaycontroller startet
- Displaycontroller versucht Bluetooth-Verbindung herzustellen
- Handy schreibt Configdaten als 3 16-bit Unsigned Integers
- Displaycontroller liest - falls keine Bluetooth-Verbindung vorhanden ist, wird Config von SD-Karte oder aus Default-Wert gelesen
- Falls Bluetooth-Verbindung vorhanden ist, schreibt Controller alle 100ms die Daten als signed (!) Integers, mit einer Sequenznummer am Anfang.
- Bei einem Fehler in der Kommunikation versucht das Handy die Bluetooth-Verbindung neu herzustellen