Forum: Mikrocontroller und Digitale Elektronik Mit AVR OBD2 Daten auslesen


von Rene U. (ulmi)


Lesenswert?

Hallo an alle.

Also ich würde gerne, Echtzeitdaten (Geschwindigkeit, Drehzahl) aus 
einem Hyundai Tiburon (Bj 2005) auslesen. Ich hab mir gedacht, dies 
würde über die OBD2 Schnittstelle am elegantesten gelöst werden. Mein 
Problem ist, dass ich mit dem Projekt nicht genügend Zeit habe, um mich 
mit OBD zu beschäftigen.

Ich würde also ein fertiges Interface benötigen welches die Daten über 
RS232 ausgibt. Die Daten würden dann mit einem AVR (welchen weiß ich 
noch nicht genau) eingelesen und weiterverarbeitet.

Das Problem an der Sache ist, dass ich bis jetzt noch kein passendes 
Interface gefunden habe und auch nicht so recht weiß welches ich für den 
Hyundai brauche. Am besten wäre eines für so ziemlich die meisten Autos.

Bei meiner Suche bin ich zwar schon auf einige interresante Interfaces 
gestoßen, jedoch wurden die meisten mit einem PC und dem dazugehörigen 
Programm angesteuert, wodurch diese für mich unbrauchbar sind. Oder 
liege ich da falsch???

Mittlerweile kenne ich mich überhaupt nicht mehr aus.



Was würdet ihr mir vorschlagen?

mfg
ulmi

von Bernd (Gast)


Lesenswert?

Die Funkamateur hat ein OBD2-Projekt gehabt. Einfach auf deren Seiten 
mal gucken.

von Otto (Gast)


Lesenswert?

CAN232 vom Elektronikladen

Otto

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ich nehme das ELM-CAN seriell -Protokoll ist dokumentiert und die PC 
Software gibts dazu:
http://www.obd-2.de/kabelec.html
Das schöne daran: Es kann alle gängigen Protokolle: ISO,KWP,KWP fast und 
CAN. Ich schätze mal, das dein Hyundai genau wie mein Daewoo KWP 
benutzt.

Ich hab mich nicht viel mit dem seriellen Protokoll beschäftigt, aber 
was ich davon gesehen habe, war easy aufm AVR zu machen. Grosses Display 
ist von Vorteil.

von Rene U. (ulmi)


Lesenswert?

@Matthias

Dankeschön für deine Schnelle Antwort.
Leider kenne ich mich solchen Interfaces noch nicht so aus. Also sorry 
wenn das jetzt eine dzmme Frage ist.
Wie kann ich bei dem Interface jetzt einstellen, welche Daten ich 
empfangen will?? Normalerweiße wird das ja über die PC-Software 
gesteuert, oder???
D.h. ich müsste die serielle Kommunikation vom PC-Programm zum Interface 
mitschneiden, damit ich später die richtigen Befehle vom AVR zum 
Interface senden kann.

Sind meine Überlegungen soweit richtig??

mfg
ulmi

von buskind (Gast)


Lesenswert?

Die Befehle sind bei einem OBD-2-konformen Auto genormt. Eigentlich 
musst Du nur wissen, welche Daten Du haben möchtest und kannst die PIDs 
hier raussuchen:
http://en.wikipedia.org/wiki/OBD-II_PIDs
Diese kann man dann einfach wie hier 
(http://www.blafusel.de/obd/obd2lcd.html) gezeigt an das ELM-Interface 
(oder ähnliches) senden. Ich habe für meine OBD2-Sachen für die 
Interfaces von Stange-Distribution gewählt, da dies die günstigsten 
waren, die ich finden konnte. Ausserdem gab es hier in Dortmund einen 
Wiederverkäufer, bei dem ich direkt vorbeifahren konnte.
Gruß
Jan

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Wie ich schon sagte, ist das ELM Protokoll dokumentiert und es gibt 
schon einige Projekte, die mit selbstgebauten MCs das Interface 
ansteuern. Das Prinzip ist, soweit ich weiss ( Ich hab halt n Laptop im 
Auto) so:
1. Initialisiere das ELM I/F auf das gewünschte Protokoll.
2. Probiere mit der ECU zu kommunizieren. Wenns nicht klappt, nächstes 
Protokoll und zu 1.
3. Wenn die Verbindung steht, rufe den Frame der ECU ab, der dich 
interessiert. Frame 0 sind abgasrelevante, genormte Daten. Frame 1 sind, 
glaube ich, aktuelle Messwerte, weitere Frames enthalten 
herstellerspezifische Daten . Dann gibt es auch noch 'Freeze' Frames, 
indem Sensordaten beim Auftreten eines Fehlers gespeichert werden.

Viele Autos (Von Volvo weiss ich das) speichern in den 
herstellerspezifischen Frames auch Infos von anderen Controllern im 
Auto, z.B. Automatikgetriebecontroller, Klimacontroller, Airbag- und 
ABSController, usw.
Ist recht interessant, selbst bei meiner kleinen Nuckelpinne. Das 
Interface hat zwar 150 EUR gekostet, hat mir aber sofort ne 200 EUR 
Reparatur erspart und sein Geld rausgeholt. Die mitgelieferte Software 
schreibt auch Logs und läuft auf nem alten Notebook recht gut.
Ahh, siehe da, buskind hat da ja schon was mit gebaut. Nachzutragen ist 
nur noch, das der aktuelle ELM Chip der ELM327 ist - nach meinen Infos.

von Rene U. (ulmi)


Lesenswert?

Danke erstmal für die ganzen Infos, also das um 150€ ist auf jedenfall 
zu teuer, da es später fix eingebaut ist.

Kann ich dieses 
http://www.obd-shop.com/danila/product_details.php?id=358&lang=de auch 
verwenden?

Oder sollte ich mich an den ELM327 kaufen und so eine Schaltung 
aufbauen?


Zu welcher Variante würdet ihr mir raten? Oder kennt jemand ein 
günstiges fertiges Interface?

mfg
ulmi

von buskind (Gast)


Lesenswert?

Hallo!
Mit dem DXM-Modul, welches ja der Hauptbestandteil ist, habe ich schon 
OBD2-daten ausgelesen. Theoretisch kannst Du auch nur das DXM-Modul 
kaufen (ca. 30 Euro) und ohne pegelwandler direkt an RXD und TXD eines 
AVR gehen. Die automatische Protokollerkennung funktionierte bei mir mit 
dem DXM-Modul nicht. Zu erkennen, ob das richtige Protokoll genutzt, ist 
aber recht einfach, da als Antwort auf den Befehl 0100 "No Data" kommt, 
wenn das Protokoll nicht richtig ist. Ansonsten kommt als als Antwort 41 
00 xx xx, wobei man aus den Bytes xx auslesen kann, welche Messwerte vom 
Steuergerät unterstützt werden.
Gruß
buskind

von peterguy (Gast)


Lesenswert?

Hi,

als ersten Schritt solltest Du herausfinden, welcher Bus / Protokoll an 
deiner OBD II Schnittstelle anliegt.

Wenn es sich um etwas anderes als CAN handelt, kannst du das Thema 
"Echtzeitdaten" direkt wieder vergessen.
KWP2000 Z.b. kommuniziert mit 10,4kbaud. Das bedeutet, du kannst
a) nicht besonders viele Daten abfragen da die Bandbreite zu gering ist 
und
b) die Daten kommen merklich verzögert in deinem Gerät an.

Falls du aber CAN hast, würde ich dir das DIAMEX DXM Modul empfehlen.
Ich setzte das Modul für mein Drehzahlmesser Projekt ein, in Verbindung 
mit OBDII@CAN ist es gut nutzbar.
Hier ein link zu dem Teil:
http://www.srt-versand.de/rund-ums-auto/obd2-fahrzeugdiagnose/diamex-dxm-modul-dxm-platine.html

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

peterguy schrieb:
> KWP2000 Z.b. kommuniziert mit 10,4kbaud. Das bedeutet, du kannst
> a) nicht besonders viele Daten abfragen da die Bandbreite zu gering ist
> und
> b) die Daten kommen merklich verzögert in deinem Gerät an.

Ich bekomme ca. jede halbe Sekunde einen neuen Datensatz bei KWP2000, 
mit ELM-SCAN im Realtime Mode. Hier ist natürlich der Overhead meines 
Notebooks mit drin.

von buskind (Gast)


Lesenswert?

Hallo!
Ich habe in meiner Bachelor-Thesis Daten via KWP2000 ausgelesen und 
zusammen mit den zugehörigen NMEA-Datensätzen auf eine SD-Karte 
geschrieben.
Mit KWP2000 kam ich auf 3 Datensätze pro Sekunde, die mir das 
Steuergerät zurückliefern konnte.
Falls das Fahrzeug keine Diagnose via CAN-Bus unterstützt, könnte 
natürlich auch festlegen, bei welchen Daten es sich lohnt, sie häufiger 
bzw. seltener auszulesen. Die Motoröltemperatur verändert sich ja zum 
Beispiel relativ langsam, während die Motordrehzahl sich deutlich 
schneller ändert. Interessante Werte, die so häufig wie möglich 
ausgelesen werden sollten, sind für mich:
-Drehzahl
-Luftmasse (für die Berechnung der Motorlast und des Drehmoments)
-Geschwindigkeit
-Einspritzmenge oder kurzzeitiger Korrekturwert (PID 14 Byte 2)
Gruß
Jan

von Rene u. (Gast)


Lesenswert?

Danke nochmal für die ganze hilfe.Habe mich nun mit dem avr 
eingearbeitetkomme aber schonwieder nicht weiter.

Wenn ich nun das obd auslesegerät an das auto anschließe, bekomme ich 
folgende daten welche auch stimmen 41 05 3a 4f (sind jetzt nur 
irgendwelche werte). Als string mit dem uart einlesen und wieder 
ausgeben ist kein problem, aber wie kann ich nun mit diesem string 
weiterarbeiten damit ich zum beispiel auch rpm oder so auswerten kann 
und if anweisungen mit den werten machen kann?
Wie funktioniert das?

Mfg

von Chris (Gast)


Lesenswert?

auf der wiki seite http://en.wikipedia.org/wiki/OBD-II_PIDs
stehen in der rechten Spalte die Umrechnungsformeln :-)
Mit denen kannst du die Hex-Werte in leserliche Werte umwandeln

von Marcus (Gast)


Lesenswert?

Wo liegt dein Genaues Problem... ?!?

Ich meine den CAN-Bus kannst ja abfragen,Also sollte die 
Programmtechnische verarbeitung eines Strings doch keine Probleme 
bereiten.

Oder weisst du nicht wie welche Daten vom Steuergerät kommen ? 
(Wahrscheinlicher)

Marcus

von Rene U. (Gast)


Lesenswert?

Nein CAN technisch ist alles in Ordnung da kenn ich mich aus.

So peinlich es auch ist, momentan steh ich mit der Weiterverarbeitung 
des Strings an. Ich kann zwar den String einlesen, nur weiß ich einfach 
nicht wie ich jetzt damit weiterarbeiten soll.
Zum beispiel wie ich mit einem "if" einen Wert überfrüfen soll.

Der String der eingelesen wird, sieht ja in etwa so aus:

41 05 1C 59

Was jetzt die einzelenen Werte bedeuten weiß ich schon und die Formeln 
um an die richtigen Werte zu kommen sind mir auch bekannt. Ich weiß 
einfach nicht wie ich jetzt dem Controller sagen kann damit er nur den 
hinteren Teil also die 1C 59 als richtige Zahl erkennt (Also als 16 bit 
Zahl)?

Ist wahrscheinlich für euch kein problem, aber das ist momentan mein 
problem.

mfg

von Peterle (Gast)


Lesenswert?


von Rene U. (Gast)


Lesenswert?

Nein, mit OBD komm ich schon zurecht, nur die Serielle Übertragung und 
die Weiterverarbeitung der Daten macht mir etwas kopfzerbrechen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.