Arduino OBD K Line Triumph

Guten Abend,
Für ein Projekt würde ich gerne aus einem K Line Interface einige Daten ziehen, dass das Interface diese Daten bereitstellt weiß ich, da diese mit Disgnose Software einsehbar sind.
Nun möchte ich sie erfassen, mit weiteren Parametern kombinieren und abspeichern.
Meine Zentrale Frage hier wäre das KLine: Zunächst brauche ich wohl einen der gängigen Umsetzer IC, aber viel wichtiger: woher weiß ich, wie ich meine Schnittstelle bespielen muss? Habe hierzu leider keine offene Doku finden können.
Hat auf diesem Feld jemand Erfahrung?
Vielen Dank euch.

Hallo.
Es wäre einfacher ein CAN-Bus Schild oder Modul zu nutzen und direkt an OBD Anschluss verbinden. Dann kann man den Bus lauschen oder abfragen.

@kolaha wie erwähnt soll/ muss die Kommunikation über K-Line laufen, das Steuergerät besitzt noch keinen CAN Bus.

Hi, da kann ich Dir gerne weiterhelfen :slight_smile:
Im internationalen DeviceHacking Bereich habe ich für Kawasaki & Suzuki genau das umgesetzt, was Du suchst:

Da findest Du alle notwendigen Informationen zum Bau eines eigenen Adapters und wie ich/wir herangegangen sind die Daten & Berechnungen herauszufinden.

Den Code, einen Emulator, ein Anzeigeprogramm (welches wohl [noch] nicht auf das Triumph-Format passt) findest Du dann hier:

Bin absolut interessiert wie sich die Kommunikation zu Suzuki & Kawasaki unterscheidet und ob ich Triumph nicht auch durch meine Lösung abgedeckt bekomme. Nur fehlt mir der Platz in der Garage und die Zeit für noch ein Bike :smiley:

Danke @TriB , bin gestern Abend auch schon über dein Projekt gestolpert, muss aber gestehen, dass ich mich nicht so blind ans Thema OBD/ K-Line rantrauen, aber scheint so als gäbe es hier keine normativ geregelten Befehle, mit denen ich mir zB den Drosselklappen Wert abhole.
Wie hast du denn rausbekommen welche Befehle du raus geben musst?
Zusätzlich: Warum hast du dich für den IC entschieden, anstelle von Optokoppler& Spannungsteiler (ggf mit ZD und Optokoppler) damit hätte man es ja auch wieder getrennt.

Ich werde aber erstmal deinen Thread durch graben und die Tage, wenn meine OBD Verlängerung gekommen ist, einfach mal mit nem Arduino alles auslesen, was so auf K-Line kommt.

Edit:
Die Lösung wäre mir auch lieber, da ich die aktuell nicht Lagernd finde, wenn dann nur bei Mouser und co, was sich für einen privat nicht wirklich lohnt..

Gerne :slight_smile:
In der Tat ist es leider so, dass es bei Motorrädern erst eine Normierung des Diagnosestandards ab ca. 2020 gibt. Da ist es dann OBD2 per K-Line und CAN-Bus.
Vorher hat jeder sein eigenes Süppchen gekocht. Es gibt aber ein paar Überschneidungen was das Übertragungsprotokoll angeht.
KWP2000 mit etwas UDS, SEA J2190 und ISO14230.

Dann haben wir darin noch weitere Konzepte: Kawasaki ist z.B. ähnlich zu OBD2. Es gibt eine Liste mit unterstützten PID´s (Protocol Identifyer) und jede PID liefert einen Wert zurück.
Bei Suzuki gibt es genau eine PID und diese liefert alle Werte in einem riesigen Datensatz zurück.
Honda verzichtet auf Kopfdaten in der Nachricht (wie Sender, Empfänger, Format, etc.) und hat verschiedene Anfragen, die je eine Handvoll Werte zurückliefern.

Die Werte/Daten selbst werden dann alle unterschiedlich berechnet. Die Konzepte sind zum Glück aber alle ähnlich!
1 byte entspricht 0-255. 2 byte berechnen sich A * 256 + B und decken dann 0-65535 ab.
Für z.B. die Geschwindigkeit hat man dann oft eine Genauigkeit von 0,5km/h. Also (A*256+B)/2. Bei Temperaturen gibt es einen Offset, damit man auch negative Temperaturen darstellen kann. -30 oder -40 Grad.

Wie findet man das dann jetzt heraus?!
Entweder hat man ein Diagnosegerät, welches die Werte berechnet darstellt und liest die Datenströme aus (per USB-Sniffer, Logdateien, direkt an der K-Line, usw.).
Oder per Trial&Error: Hochschalten, schauen was sich verändert. Batteriespannung messen und probieren die entsprechende Umrechnung rückzurechnen.

Wenn man Glück hat, gibt es irgendwo schon ein paar Grundlagen und man hangelt sich dann daran entlang. Bei Kawasaki begann alles mit einer externen Ganganzeige, die reverse engineered wurde.

Hardware:
KWP2000 ist eine bidirektionale Kommunikation über ein einzelnes Kabel. Daher ist ein L9637D ideal um einmal die 12V auf 3,3 oder 5 V und daraus ein serielles, zweiadriges Signal zu wandeln.
Ein Oktokoppler alleine bringt Dich da nicht wirklich weiter.

Herangehensweise:
Du schreibst was von einer Diagnosesoftware. Hast Du die zur Hand?
Dann wäre das einfachste, Dir einen Arduino mit L9637D zu basteln und zwischen Motorrad und Adapter zu stecken. Dann einfach stumpf alles was über die Datenleitung geht mitzuschreiben und mit der Anzeige in der Software abzugleichen.
Alternativ eignen sich USB-Sniffer ganz gut um an den Datenstrom zwischen Software und Adapter zu gelangen.

Denke ganz ohne eigenes Dazutun wird das nix.
Wo kommst Du her? Hätte alles hier, nur keine Triumph :wink:

Okay.
Also Software für Triumph (und andere) ist TuneEcu gängig. ZZusammen mit nem billigen USB K-Line Dongle.
Habe ich beides da, leider sagt die Software aber nicht auch gleich in welchem PID, der Wert steht, das muss wie du schon sagst händisch ausgearbeitet werden.
Wie schon gesagt find ich leider keinen L9637, wenn du einen über hast würde ich den nehmen;)
Meine (zerpflückte) Triumph steht im Großraum Braunschweig.
Ich werde mal sehen ob/ was ich denn so hin bekomme, ne OBD Verlängerung zum zwischen klemmen ist schon unterwegs, nur der Dongle fehlt.
Denn zum reinen lesen von allem würde es ja vermutlich doch reichen einfach eine Pegelanpassung durchzuführen, oder irre ich?

Gruß

TuneECU habe ich auch auf die Schnelle gefunden.
Die Software für Windows wird ja nicht mehr weiterentwickelt. Aber da sie sich per USB/COM-Port verbindet, kann man da auch ohne zusätzliche Hardware ein bisschen was mitschneiden.
Oder das Programm analysieren. Ist ja in .Net geschrieben und ließe sich dekompilieren.
Dann sieht man auch, dass die Drosselklappe wohl im Datenstrom an 3. Stelle steht und aus 2 Bytes besteht. (A* 256 + B) / 51.

Beim groben Überfliegen des Codes, würde ich sagen: Sieht so aus wie Suzuki. Eine Anfrage an die ECU und eine 66byte große Antwort kommt, welche Temperaturen, TPS, RPM, usw. beinhaltet.

Das Programm unterstützt neben Triumph auch KTM. Da hätte ich zumindest ein paar Testdatensätze parat. Vielleicht finde ich am Wochenende ein bisschen Zeit, das etwas zu analysieren.

Ne Handvoll L9637D hätte ich noch hier. Komme allerdings aus NRW.
Ob das nur mit einer Pegelanpassung funktioniert, kann ich nicht sagen. Den Pullup würde ja schon der Adapter übernehmen. Keine Ahnung :man_shrugging:t2: Mal an Rx anklemmen und 10400Baud einstellen. Zwischen ein- und ausgehenden Nachrichten müssten ~100ms liegen. Damit kann man die grob auseinanderhalten:

In der "FetchData"-Methode wird das timing dynamisch angepasst oder auf bekannte Datenformate & Länge + Checksumme gewartet. Wäre ein Versuch wert!

Die “/51” ist Vermutung oder hast schonmal fix die software decompiled?
Okay, ein riesen Paket also, nich schön aber kann man mit Stringverarbeitung ja auch mit arbeiten bzw kommts ja wahrscheinlich als array rein, muss gestehen hatte noch keine Zeit mir alles durch zu sehen. Werd ich als nächstes tun.
Mit dem IC wär mir sehr geholfen, ob roh oder fertig wäre mir relativ, da ich im großen Elektronik Unternehmen arbeite, dass unter anderem LSU Sonden baut, sollt ich das wohl sonst auch fertig bekommen.
Meld dich bitte mal für Details via PN
Faust zum Gruß

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.