CAN Bus & K-Line mitschneiden
Verfasst: Sa 2. Apr 2016, 11:38
Guten Tag Leute,
da ich mich Hobby mäßig gerne mit Microcontrollern wie dem Arduino beschäftige und ich über den Winter ein wenig langeweile hatte, habe ich mich mal mit den Kommunikationsleitungen unseres Mopeds beschäftigt.
Dieses Thema soll einfach nur als Info dienen, falls jemand anders auch Interesse an diesem Thema hat. Ich konnte nämlich im Netz keine konkreteren Informationen finden! Außerdem beziehen sich alle meine Infos größtenteils nur auf das alte Modell, da ich nur dieses besitze.
Zunächst mal welche Protokolle gibt es?
Die alten Daytonas haben unter dem Sitz, im Diagnosestecker, die sogenannte K-Line auf Pin 7. Triumph arbeitet hier mit dem Protokoll ISO 9141-2, welches eine Datenübertragungsrate von 10,4 kbit/s ermöglicht. Außerdem kommunizieren der Tacho und die ECU direkt über ein CAN Bus mit einer Übertragungsrate von 500 kbit/s. Dies ist leider nicht im Diagnosestecker verkabelt, sondern muss direkt angezapft werden.
Die neuen Daytonas haben keine K-Line mehr im Diagnosestecker, dafür aber ein vollständiges CAN Bus (ISO 15765-4 mit 500 kbit/s). Vermutlich ist dies der selbe Bus, der bei den alten Modellen nur ECU und Tacho verbunden hat.
K-Line, alte Daytona, ISO 9141-2
Die K-Line im Diagnosestecker unter dem Sitz bei den alten Daytonas ist eine reine Diagnoseleitung. Hier ist keine aktiver Informationsaustausch vorhanden. Stattdessen können die Standard OBD2-PIDS genutzt werden um einzelne Informationen konkret von der ECU abzufragen. Dabei folgt Triumph der Standard-Norm, welche in den Quellen verlinkt ist. Ich habe nur einzelne PIDs wie TPS, RPM, etc ausprobiert, aber diese funktionierten zuverlässig. Genutzt habe ich dafür ein Arduino Mega mit einem MC33290 Chip und dieser Bibliothek: https://github.com/iwanders/OBD9141.
Hauptproblem bei dieser Art der Informationsabfrage ist die Wartezeit der ECU. Hinzukommt die langsame Übertragungsrate von nur 10,4 kbit/s. Dies führt dazu, dass pro Anfrage einer Information, z.B. der Dosselklappenstellung, etwa 60 ms vergehen. Möchte man jetzt gerne 3 Werte wie TPS, RPM und Gang gleichzeitig wissen, ist dies nicht möglich, da insgesamt etwa eine 5tel Sekunde vergeht. Deshalb sind die Werte in TuneECU auch so träge...
Can Bus, alte Daytona, ECU-Tacho
Der Tacho und die ECU der alten Daytonas kommunizieren direkt über ein CAN Bus um die nötigen Echtzeit-Informationen, wie Drehzahl und Gang auszutauschen. Dieser besteht aus 2 Leitungen welche direkt von der ECU zum Tacho gehen. Sie finden sich am grauen Stecker der ECU und sind rot sowie blau. Rot ist CAN HIGH und blau CAN LOW.
Wenn man diese !sehr vorsichtig! anzapft, lassen sich verschiedene Informationen mit Hilfe eines Arduinos und einem CANBus-Shields in Echtzeit abgreifen. Alle Informationen die über den CAN-Bus übertragen werden, lassen sich hier finden: https://www.race-technology.com/wiki/in ... torbikeCAN
Das Hautpproblem ist nun diese Daten zu den mitgeschnittenen IDs und Daten zuzuordnen.
In der folgenden Tabelle habe ich meine bisherigen Erkenntnisse dargestellt.[tr=]
[td=]ID (HEX)[/td]
[td=]Datenbytes[/td]
[td=]Aktualisierung[/td]
[td=]Kommentar[/td]
[/tr]
[tr=]
[td=]518[/td]
[td=]2 Datenbytes[/td]
[td=]oft[/td]
[td=]vermutlich Drehzahl oder TPS[/td]
[/tr]
[tr=]
[td=]519[/td]
[td=]2 Datenbytes[/td]
[td=]oft[/td]
[td=]Geschwindigkeit in Km/h[/td]
[/tr]
[tr=]
[td=]530[/td]
[td=]4 Datenbytes[/td]
[td=]selten[/td]
[td=]TPS evtl. in Byte 2[/td]
[/tr]
[tr=]
[td=]540[/td]
[td=]7 Datenbytes[/td]
[td=]selten[/td]
[td=]Gang in den ersten 4 Bits[/td]
[/tr]
[tr=]
[td=]550[/td]
[td=]4 Datenbytes[/td]
[td=]selten[/td]
[td=]evtl. Spritverbrauch[/td]
[/tr]
[tr=]
[td=]568[/td]
[td=]1 Datenbyte[/td]
[td=]oft[/td]
[td=]keine Veränderung[/td]
[/tr]
[tr=]
[td=]569[/td]
[td=]2 Datenbytes[/td]
[td=]oft[/td]
[td=]keine Veränderung[/td]
[/tr]
[tr=]
[td=]570[/td]
[td=]8 Datenbytes[/td]
[td=]selten[/td]
[td=]Temperaturen in Byte 3 und 5[/td]
[/tr]
Warum der ganze Stress?
Zum ersten, es macht mir Spaß und gleichzeitig lernt man einiges in Sachen Programmierung und Funktionsweise von aktuellen Mopeds.
Aber das eigentliche Ziel ist es ein System wie den PC5 mit Autotune oder den Bazzaz Self Mapper für ein Bruchteil des Preises zu erstellen, um das Mopete perfekt einzustellen. Dafür wird neben einem Arduino als Datenlogger noch eine Breitbandlambdasonde benötigt, welche die aktuelle Gemischzusammensetzung meldet. Somit lassen sich dann in Echtzeit, Daten wie TPS, RPM, Gang und AFR während der Fahrt mitloggen und per bereits fertigem Excel-Script in ein Mapping Diagramm übertragen. Mit Hilfe der Differenzen zu den Soll-AFR-Werten von Triumph für zum Beispiel das Arrow-Tune, lassen sich die Luftmengen im Map anpassen um eine ideale Gemischzusammensetzung zu gewährleisten. Vorteile dieses Systems, sind die allgemeine Verwendbarkeit an verschiedenen Fahrzeugen mit geringfügiger Anpassung und natürlich die Kosten (~200€). Hinzu kommt die Möglichkeit Daten je nach Wunsch mitzuschneiden. Nachteil ist natürlich der Aufwand und die nötigen Kenntnisse zur Programmierung.
Quellen und weitere Infos:
da ich mich Hobby mäßig gerne mit Microcontrollern wie dem Arduino beschäftige und ich über den Winter ein wenig langeweile hatte, habe ich mich mal mit den Kommunikationsleitungen unseres Mopeds beschäftigt.
Dieses Thema soll einfach nur als Info dienen, falls jemand anders auch Interesse an diesem Thema hat. Ich konnte nämlich im Netz keine konkreteren Informationen finden! Außerdem beziehen sich alle meine Infos größtenteils nur auf das alte Modell, da ich nur dieses besitze.
Zunächst mal welche Protokolle gibt es?
Die alten Daytonas haben unter dem Sitz, im Diagnosestecker, die sogenannte K-Line auf Pin 7. Triumph arbeitet hier mit dem Protokoll ISO 9141-2, welches eine Datenübertragungsrate von 10,4 kbit/s ermöglicht. Außerdem kommunizieren der Tacho und die ECU direkt über ein CAN Bus mit einer Übertragungsrate von 500 kbit/s. Dies ist leider nicht im Diagnosestecker verkabelt, sondern muss direkt angezapft werden.
Die neuen Daytonas haben keine K-Line mehr im Diagnosestecker, dafür aber ein vollständiges CAN Bus (ISO 15765-4 mit 500 kbit/s). Vermutlich ist dies der selbe Bus, der bei den alten Modellen nur ECU und Tacho verbunden hat.
K-Line, alte Daytona, ISO 9141-2
Die K-Line im Diagnosestecker unter dem Sitz bei den alten Daytonas ist eine reine Diagnoseleitung. Hier ist keine aktiver Informationsaustausch vorhanden. Stattdessen können die Standard OBD2-PIDS genutzt werden um einzelne Informationen konkret von der ECU abzufragen. Dabei folgt Triumph der Standard-Norm, welche in den Quellen verlinkt ist. Ich habe nur einzelne PIDs wie TPS, RPM, etc ausprobiert, aber diese funktionierten zuverlässig. Genutzt habe ich dafür ein Arduino Mega mit einem MC33290 Chip und dieser Bibliothek: https://github.com/iwanders/OBD9141.
Hauptproblem bei dieser Art der Informationsabfrage ist die Wartezeit der ECU. Hinzukommt die langsame Übertragungsrate von nur 10,4 kbit/s. Dies führt dazu, dass pro Anfrage einer Information, z.B. der Dosselklappenstellung, etwa 60 ms vergehen. Möchte man jetzt gerne 3 Werte wie TPS, RPM und Gang gleichzeitig wissen, ist dies nicht möglich, da insgesamt etwa eine 5tel Sekunde vergeht. Deshalb sind die Werte in TuneECU auch so träge...
Can Bus, alte Daytona, ECU-Tacho
Der Tacho und die ECU der alten Daytonas kommunizieren direkt über ein CAN Bus um die nötigen Echtzeit-Informationen, wie Drehzahl und Gang auszutauschen. Dieser besteht aus 2 Leitungen welche direkt von der ECU zum Tacho gehen. Sie finden sich am grauen Stecker der ECU und sind rot sowie blau. Rot ist CAN HIGH und blau CAN LOW.
Wenn man diese !sehr vorsichtig! anzapft, lassen sich verschiedene Informationen mit Hilfe eines Arduinos und einem CANBus-Shields in Echtzeit abgreifen. Alle Informationen die über den CAN-Bus übertragen werden, lassen sich hier finden: https://www.race-technology.com/wiki/in ... torbikeCAN
Das Hautpproblem ist nun diese Daten zu den mitgeschnittenen IDs und Daten zuzuordnen.
In der folgenden Tabelle habe ich meine bisherigen Erkenntnisse dargestellt.
Zum ersten, es macht mir Spaß und gleichzeitig lernt man einiges in Sachen Programmierung und Funktionsweise von aktuellen Mopeds.
Aber das eigentliche Ziel ist es ein System wie den PC5 mit Autotune oder den Bazzaz Self Mapper für ein Bruchteil des Preises zu erstellen, um das Mopete perfekt einzustellen. Dafür wird neben einem Arduino als Datenlogger noch eine Breitbandlambdasonde benötigt, welche die aktuelle Gemischzusammensetzung meldet. Somit lassen sich dann in Echtzeit, Daten wie TPS, RPM, Gang und AFR während der Fahrt mitloggen und per bereits fertigem Excel-Script in ein Mapping Diagramm übertragen. Mit Hilfe der Differenzen zu den Soll-AFR-Werten von Triumph für zum Beispiel das Arrow-Tune, lassen sich die Luftmengen im Map anpassen um eine ideale Gemischzusammensetzung zu gewährleisten. Vorteile dieses Systems, sind die allgemeine Verwendbarkeit an verschiedenen Fahrzeugen mit geringfügiger Anpassung und natürlich die Kosten (~200€). Hinzu kommt die Möglichkeit Daten je nach Wunsch mitzuschneiden. Nachteil ist natürlich der Aufwand und die nötigen Kenntnisse zur Programmierung.
Quellen und weitere Infos:
- http://onkickstand.com/daytona-hacking/
- http://www.triumph675.net/forum/showthread.php?t=168657
- https://www.race-technology.com/wiki/in ... torbikeCAN
- https://en.wikipedia.org/wiki/OBD-II_PIDs