Technikerarbeit 2005/2006 OBD2 - Diagnosegerät
Transcription
Technikerarbeit 2005/2006 OBD2 - Diagnosegerät
Technikerarbeit 2005/2006 OBD2 - Diagnosegerät Von: Dominik Beutner Untere Weinhalde 5 78333 Stockach Betreuer: Herr Sperling Fachschule für Technik FTED2 Dokumentation V1.0 OBD2 - Diagnosegerät Inhaltsverzeichnis: 1. Eidesstattliche Erklärung ................................................................... 3 2. Einführung 2.1 2.2 2.3 2.4 Projektidee ................................................................................... 4 Hintergrundwissen zu OBD2........................................................ 4 Projektbeschreibung .................................................................... 9 Umsetzung................................................................................. 10 3. Hardware 3.1 Blockschaltbild........................................................................... 14 3.2 Modifikation des ELEKTOR OBD2/Diagnoseinterface .............. 16 3.3 Schaltpläne ................................................................................ 19 3.4 Spannungsversorgung ............................................................. 21 3.4 LPC 932 ................................................................................... 22 3.5 LC-Display ................................................................................. 25 3.6 Bedientasten ............................................................................. 25 3.7 Serielle Schnittstelle .................................................................. 26 3.8 Umschaltung vom Interface zum LPC / PC ............................... 28 3.9 Stücklisten ................................................................................. 29 3.10 Layouts...................................................................................... 31 4. Senden und Empfangen über das Interface 4.1 Aufbau einer Nachricht .............................................................. 34 4.2 Fehlerdiagnose .......................................................................... 39 5. Software 5.1 5.2 5.3 5.4 Programmstruktur ..................................................................... 41 Headerfiles ................................................................................ 42 Interrupts ................................................................................... 43 Funktionen................................................................................. 43 6. Bedienung des Diagnosegerätes 6.1 Übersicht der Bedienelemente .................................................. 55 6.2 Diagnosefunktionen ................................................................... 56 6.3 Wartungshinweise ..................................................................... 59 . 7. Anhang 7.1 Informationsquellen ................................................................... 59 7.2 Zeitaufwand ............................................................................... 60 7.3 Fazit .......................................................................................... 60 Technikerarbeit 2005/2006 Dominik Beutner -2- Dokumentation V1.0 OBD2 - Diagnosegerät 1. Eidesstattliche Erklärung Hiermit versichere ich, Dominik Beutner, dass die Technikerarbeit „OBD2 Diagnosegerät“ von mir und ohne unerlaubte Hilfe geplant, entwickelt, und hergestellt wurde. Textstellen aus Veröffentlichungen wurden mit einem Quellverweis kenntlich gemacht. Stockach, den 22.04.2006 Unterschrift:……………………………. D.Beutner Technikerarbeit 2005/2006 Dominik Beutner -3- Dokumentation V1.0 OBD2 - Diagnosegerät 2. Einführung 2.1 Projektidee Schon recht früh um genau zu sein im ersten Schuljahr machten uns unsere Lehrer Herren Sperling und Herr Gross darauf aufmerksam, frühzeitig mit der anstehenden Technikerarbeit zu beginnen, um später im zweiten Schuljahr genug Spielraum für die Prüfungen zu haben. Die ersten Schwierigkeiten fingen schon bei der Ideenfindung an. Ich wollte ein Projekt durchziehen dass einerseits einem zukünftigen Techniker gerecht wird, anderseits sollte es auch in einem bewältigbaren Rahmen bleiben. Dieses abzuschätzen war gar nicht so einfach. Ich wälzte diverse Elektronikkataloge und machte mir bei der täglichen Autofahrt zur Schule Gedanken, welches Thema ich aufgreifen könnte. Mir kamen einige Ideen, von einer universellen Fernbedienung im Rc5 Format bis hin zu einem Netzgerät welches sich mit einem PC fernsteuern lässt, jedes der Themen schien interessant zu sein. Dann bin ich beim durchstöbern der bekannten Elektronikzeitschrift „ELEKTOR“, auf einen noch interessanteren Artikel gestoßen. Dabei handelt es sich um ein OBD2/Diagnoseinterface mit welchem man mithilfe eines Pc’s über die Serielle Schnittstelle, Fahrzeugdaten wie Sensorwerte und eventuelle Fehler aus einem Kraftfahrzeug auslesen kann. Die Idee für mein Projekt wurde geboren. Ich stellte mir als Aufgabe, ein handliches autonomes Diagnosegerät mit µ-Controller, anstatt des unhandlichen PC’s zu realisieren. 2.2 Hintergrundwissen zu OBD2 Ende der achtziger Jahre beschloss der US Bundesstaat Kalifornien schärfere Emmisionswert- Richtlinien einzuführen, um die Schadstoffbelastungen der großen Ballungszentren in den Griff zu bekommen. Dazu sollten die Fahrzeuge alle Emmisionsrelevanten Funktionsgruppen selbst überwachen können. Abweichungen wie z.B. defekte Lamdasonden, (die eine Veränderung des Abgasgemisches zur Folge hätten) werden von den Steuergerät/en (ECU) im Fahrzeug erkannt, gespeichert, und dem Fahrer durch eine gelbe Motorstörungslampe (MIL) Bild 2.1 im Schalttafeleinsatz angezeigt. Bild 2.1 MIL Um die Fehlerursache für den Defekt zu erfahren kann man bei einigen älteren Fahrzeugen im Diagnosestecker 2 Pins miteinander verbinden, danach blinkt die MIL, mehrmals in einem bestimmten Rhythmus. Der passende Fehlercode und die Beschreibung dazu, kann man den Herstellerunterlagen oder dem Fahrzeughandbuch entnehmen. Das Beispiel bezieht sich auf den Opel Kadett E BJ 1991 mit dem ich das auch praktisch testen konnte. Nachteilig dabei ist, dass Technikerarbeit 2005/2006 Dominik Beutner -4- Dokumentation V1.0 OBD2 - Diagnosegerät jeder Fahrzeughersteller sein eigenes Süppchen kochte, und die Diagnose für den „kleinen Privatmann“ nicht immer so einfach, bei jedem Fahrzeug anwendbar ist. Die Folge davon, man musste den Fehler durch eine Werkstatt auslesen und beheben lassen. Dieses System der frühen Onboard-Diagnostik wurde wegen der immer noch zu hohen Umweltverschmutzungen und ständig zunehmender Elektronik im KFZ nachgebessert. 1996 war es so weit, ein neuer Diagnosestandard wurde Pflicht für alle neu zugelassenen Fahrzeuge in den USA. Spätestens jetzt konnte man nicht mehr so einfach, wie im Bsp. mit nur einer Verbindungsbrücke im Diagnosestecker sich den Fehler als Blinkcode anzeigen lassen. Es wurden jedoch Normen erlassen, die es externen Diagnosegeräten (Offboard-Diagnose) ermöglichen, an alle wichtigen abgasrelevanten Fahrzeuginformationen wie Sensordaten und im Fehlerfall, abgespeicherte Fehler über den Diagnosestecker im Fahrzeug auszulesen. Die OnBoard Diagnose der 2ten Generation, kurz OBD2 wurde geboren. Die Norm SAE J1979 beschreibt z.B. wie externe Diagnosegeräte Sensorwerte und den Fehlerspeicher der ECU(s) auslesen und bei Wunsch rücksetzen können. Für die in Europa zugelassenen PKW’s übernahm man diese Regelung und verfasste eine Norm, ISO 15031-5 gleichbedeutend der SAE J1979. PKW’s mit Ottomotor müssen seit 2001 OBD2 kompatibel sein, PKW’s mit Dieselmotor erst ab 2003. Häufig findet man auch andere Abkürzungen die aber dennoch die gleiche Bedeutung haben. Folgende Bezeichnungen sind zulässig: OBD2 EOBD JOBD On Board Diagnose der 2ten Generation. (verwenden überwiegend Amerikanischen Fahrzeughersteller) European On Board Diagnose (wie der Name schon sagt wird er überwiegend von Europäischen Fahrzeugherstellern verwendet Japan On Board Diagnose Für die oben genannten Einführungsjahre gibt es jedoch Ausnahmen. So können einige Fahrzeuge die nach 1996 in Amerika hergestellt wurden (einige Opels, bekanntlich von GM), aber in Europa schon vor 2001 zugelassen wurden OBD2 fähig sein. Wenn im Fahrzeugschein mindestens Schadstoffklasse 3 und EOBD vermerkt sind kann man sicher sein, dass das Fahrzeug OBD2 kompatibel ist. Zur Diagnose stehen 9 so genannte Generic Modi zur Verfügung. Mode 1 2 3 4 5 6 7 8 9 Bedeutung zeigt die aktuellen Daten/Sensorwerte zeigt die freeze Frame Daten Zeigt gesetzte Fehlercodes Löscht Fehlercodes und gespeicherte Werte zeigt Selbsttest-Resultate der Lambdasonden Selbsttest-Resultate nicht kontinuierlich überwachter Systeme Fehlercodes kontinuierlich überwachter Systeme spezieller Kontrollmodus Fahrzeuginformationen wie z.B. VIN (Fahrzeug SN..) Tabelle 2.1 Generic Modi Technikerarbeit 2005/2006 Dominik Beutner -5- Dokumentation V1.0 OBD2 - Diagnosegerät Einige dieser Modi verwenden zusätzlich so genannte PID’s (ParameterInDentification) Sie verkörpern die einzelnen Sensoren, die bei Bedarf ausgelesen werden können. PID 0 1 2 3 4 5 6 07 08 09 0A 0B 0C 0D 0E 0F 10 Bezeichnung Min Max Umrechnung unterstützte PIDs, Bereich 01 - 20 4 Bytes Bit-codiert MIL-Status, Anzahl Fehlercodes, Überwachungsstatus Fehlercode, der Freeze Frame Daten gesetzt hat Status Einspritzsystem berechneter Lastwert MotorKühlwassertemperatur Kurzzeit Einspritztrimm Bank 1 Langzeit Einspritztrimm Bank 1 Kurzzeit Einspritztrimm Bank 2 Langzeit Einspritztrimm Bank 2 Kraftstoffdruck 4 Bytes, Bit-codiert 2 Byte 2 Bytes, Bit-codiert 0% offener, geschlossener Loop etc. 100% 100/255 % -40 °C +215 °C 1 °C mit -40 °C Offset -100 % (mager) +99,22 % (fett) 100/128 % -100 % (mager) +99,22 % (fett) 100/128 % -100 % (mager) +99,22 % (fett) 100/128 % -100 % (mager) 0 kPa +99,22 % (fett) 765 kPa 100/128 % 3 kPa pro Bit 0 kPa (absolut) 0 min-1 0 km/h -64 ° -40 °C 0 g/s 255 kPa (absolut) 16383,75 min-1 255 km/h 63,5 ° +215 °C 655,35 g/s 11 12 13 Absolutdruck Einlaßkanal Motor-Umdrehungen Geschwindigkeit Zündvoreilung Einlaß-Lufttemperatur Luftdurchfluß Absolute Drosselklappenstellung Zusatzluftstatus Einbauort Lambdasonden 0V 1,275 V 0,005 V 14 Ausgangsspannung Lambdasonde Bank 1, Sensor 1 Kurzzeit Einspritztrimm Bank 1, Sensor 1 -100 % (mager) +99,22 % (fett) 100/128 % 0V 1,275 V 0,005 V 15 Ausgangsspannung Lambdasonde Bank 1, Sensor 2 Kurzzeit Einspritztrimm Bank 1, Sensor 2 -100 % (mager) +99,22 % (fett) 100/128 % 0V 1,275 V 0,005 V 16 Ausgangsspannung Lambdasonde Bank 1, Sensor 3 Kurzzeit Einspritztrimm Bank 1, Sensor 3 -100 % (mager) +99,22 % (fett) 100/128 % 0% 1 kPa pro Bit 0,25 U/min pro Bit 1 km/h pro Bit 0,5 ° mit 0 ° bei 128 1 °C mit -4 0 °C Offset 0,01 g/s 100% 100/255 % Bit-codiert Bit-codiert Technikerarbeit 2005/2006 Dominik Beutner -6- Dokumentation V1.0 OBD2 - Diagnosegerät 0V 1,275 V 0,005 V 17 Ausgangsspannung Lambdasonde Bank 1, Sensor 4 Kurzzeit Einspritztrimm Bank 1, Sensor 4 -100 % (mager) +99,22 % (fett) 100/128 % 0V 1,275 V 0,005 V 18 Ausgangsspannung Lambdasonde Bank 2, Sensor 1 Kurzzeit Einspritztrimm Bank 2, Sensor 1 -100 % (mager) +99,22 % (fett) 100/128 % 0V 1,275 V 0,005 V 19 Ausgangsspannung Lambdasonde Bank 2, Sensor 2 Kurzzeit Einspritztrimm Bank 2, Sensor 2 -100 % (mager) +99,22 % (fett) 100/128 % 0V 1,275 V 0,005 V 1A Ausgangsspannung Lambdasonde Bank 2, Sensor 3 Kurzzeit Einspritztrimm Bank 2, Sensor 3 -100 % (mager) +99,22 % (fett) 100/128 % 0V 1,275 V 0,005 V 1B Ausgangsspannung Lambdasonde Bank 2, Sensor 4 Kurzzeit Einspritztrimm Bank 2, Sensor 4 1C 1D 1E 1F 20 OBD Kompatibilität Einbauorte Lambdasonden Status Hilfseingang Power Take Off (PTO) Status Zeit seit Motorstart unterstützte PIDs, Bereich 21 - 40 -100 % (mager) +99,22 % (fett) 100/128 % 1 Byte, Hexwert: 04=OBD1, 01=OBD2(CARB), 06=EOBD, 05=kein OBD etc. Bit-codiert, nur wenn PID 13 nicht vorhanden Bit-codiert 0 Sek. Bit-codiert 65.535 Sek. 2 Byte, 1 Sek./Bit Tabelle 2.2 PID’s von 0 – 20h Aus Gründen der Platzeinsparung ist die Tabelle nur bis PID 20 dargestellt. Die Norm enthält noch weitere PID’s bis 4Fh. Da diese Tabelle allgemein gültig für alle OBD2 kompatiblen Fahrzeuge verfasst worden ist, wird nicht jeder PID von jedem Fahrzeug unterstützt. So werden in einem Fahrzeug mit Dieselmotor andere Sensoren als in einem Fahrzeug mit Otto Motor verbaut. Daher ließ man als erstes den PID 0 aus. Dieser repräsentiert alle vorhandenen PID’s von 1 – 20h. In PID 20 stehen wiederum die unterstützten PID’s von 21 – 40h. Wenn uns z.B. die Fahrzeuggeschwindigkeit interessiert, geschieht dies über Mode 1 (für die Echtzeitdaten) und dem PID 0d für die Geschwindigkeit. Falls während der Autofahrt oder zumindest bei laufendem Motor ein Fehler erkannt wird, werden ein oder mehrere Fehlercodes erzeugt, die wir dann mit dem Mode 3 abfragen können. Wenn wir nach einer Reparatur den Fehlerspeicher und somit die MIL zurücksetzen möchten, erfolgt dies über Mode 4. Diese 9 Generic Modi bilden die gemeinsame Grundlage für alle OBD2 kompatiblen Fahrzeuge. Technikerarbeit 2005/2006 Dominik Beutner -7- Dokumentation V1.0 OBD2 - Diagnosegerät Das Protokoll mit dem die Daten übermittelt werden Ist jedoch Fahrzeug abhängig. Dies kommt daher, das bis zur Einführung jeder Fahrzeug-Konzern für seine BordElektronik eigene Standards verwendete. Man einigte sich auf vier unterschiedliche Übertragungsprotokolle, wovon eines für die OBD2 konformen Daten verwenden muss. Als Anhaltswert kann man sagen, das amerikanische Fahrzeuge meistens das J1850 VPW und J1850 PWM Protokoll nutzen. asiatische und europäische Fahrzeuge meist das ISO 9141-2 und KWP 2000. Das ISO 15765 (CAN) Protokoll wird momentan noch sehr wenig verwendet, soll jedoch ab 2008 bei allen Fahrzeugen, wahrscheinlich wegen der höheren Übertragungsraten zur Pflicht werden. In Bild 2.3 sehen sie den Diagnosestecker der bei jedem Fahrzeug welches den OBD2 Standard unterstützt gleich auszusehen hat. Des Weiteren wurde festgelegt dass er sich maximal einen Meter entfernt vom Fahrersitz befinden darf. Die Norm SAE-J1962 beschreibt diese Regelungen. Bild 2.3 OBD2 Stecker In der Tabelle 2.1 sehen sie einen Überblick über die Protokolle und die Pins die zur Datenübertragung genutzt werden. Pins die in der Tabelle nicht aufgeführt wurden, sind für herstellerspezifische Anwendungen reserviert. OBD2 Protokoll ISO 9141-2 Protokollvarianten KW 0808 KW 9494 ISO 14230-4 KWP2000 fast init KWP2000 slow init SAE J1850 PWM SAE J1850 VPW ISO 15765-4 (CAN Bus) CAN 11 ident 250 KB CAN 11 ident 500 KB CAN 29 ident 250 KB CAN 29 ident 500 KB UB 12 Volt 16 16 16 16 16 16 16 16 16 16 GND 4+5 4+5 4+5 4+5 4+5 4+5 4+5 4+5 4+5 4+5 Tabelle 2.3 Steckerbelegung nach Protokoll Signal 7 + *15 7 + *15 7 7 2 + 10 2 6 + 14 6 + 14 6 + 14 6 + 14 * im Text erläutert In der Tabelle sehen wir, dass es bei einigen Protokollen unterschiedliche Varianten gibt. Bei dem ISO 9142-2 Protokoll handelt es sich um ein serielles Protokoll (nicht zu verwechseln mit RS232). Die eigentliche Kommunikation findet auf Pin 7 (K-Line) statt. Bei den meisten neueren Fahrzeugen wird die Initialisierung auch über Pin 7 Technikerarbeit 2005/2006 Dominik Beutner -8- Dokumentation V1.0 OBD2 - Diagnosegerät eingeleitet, Somit entfällt Pin 15. Diagnosegeräte sollten wegen der Kompatibilität zu beiden Typen Pin 7 und 15 unterstützen. Bei Verwendung eines der ISO 9141-2 oder der ISO 14230-4 Protokolle spricht man gewöhnlich auch von K-Line Diagnose, da die ganze Kommunikation über nur eine Leitung (K-Line) abläuft. In den folgenden Kapiteln wurden öfters die genormten Abkürzungen bzw. manche technische Begriffe, die ich aus den Datenblättern so übernommen habe, verwendet. Einige wichtige Abkürzungen bzw. Begriffe wurden in der Tabelle 2.4 zusammengefasst. Abkürzung Englisch Beschreibung DTC ECU MIL Fahrzeugfehler allg. Begriff für ein Steuergerät Fehlerlampe (Motorleuchte) OBD2 PID ------------- diagnostic trouble code elektronic controll unit malfunction indicator lamp on-board diagnostics (2nd generation) parameter indentification Frame Request Response message Onboarddiagnose der 2ten Generation Funktionale OBD2-Adressierung Datenrahmen (Datagramm) Anforderung Antwort Nachricht Tabelle 2.4 Abkürzungen / Begriffe 2.3 Projektbeschreibung Mein Projekt basiert auf der OBD2/Interfaceschaltung die Im Juli 2005 in der Zeitschrift ELEKTOR erschienen ist. Das Interface arbeitet als Gateway zwischen dem Fahrzeugdiagnosestecker und der seriellen RS232 Verbindung zu der Applikation (meine Technikerarbeit). (Auf die Funktion des ELEKTOR/Interfaces werde ich später noch genauer eingehen). Meine Aufgabe bestand nun darin, ein handliches autonomes Diagnosegerät zu entwickeln, welches über das ELEKTOR/Interface mit dem Kraftfahrzeug kommunizieren kann. Um das Messgerät Bedienerfreundlich zu gestallten, habe ich dem Diagnosegerät ein LC-Display mit 4x20 Zeilen gegönnt. Die Menüführung wurde mit 4 Tastern sowie einem weiteren Taster für den Reset realisiert. Das Diagnosegerät wurde mit folgenden Features ausgestattet: - Diagnose an allen Fahrzeugen die das OBD2 kompatible ISO 9141-2 Protokoll unterstützen (meist europäische Fahrzeuge). - Bedienerfreundliche Menüführung mit Tastern und LCD - Optional kann über eine separate RS232 Buchse ein PC oder Notebook angeschlossen werden, mit welchem man die Fahrzeugdaten visualisieren kann. Die dazu benötigte Software wie z.B. Scanmaster von WGSoft, wird im Internet kostenlos, zum Download bereitgestellt. - Bei Auftreten eines Fehlers im KFZ, kann die Anzahl der Fehler sowie der Technikerarbeit 2005/2006 Dominik Beutner -9- Dokumentation V1.0 OBD2 - Diagnosegerät genormte Fehlercode mit einer Kurzbeschreibung, und die ECU welche den Fehler bemerkt hatte, auf dem Display dargestellt werden. - Nach der Reparatur oder wenn der defekte Sensor ausgewechselt wurde kann auf Wunsch das Diagnosegerät den Fehlerspeicher der ECU löschen, und damit erlischt dann auch die MIL in der Instrumententafel. - Ein weiterer Menüpunkt „Sensordaten“ stellt Werte wie Drehzahl, Geschwindigkeit, Zündzeitpunkt, Drosselklappenstellung usw. in Echtzeit Auf dem LC-Display dar. - Der Benutzer hat die Möglichkeit mit einem Menüpunkt „Beschleunigung“ die Beschleunigungswerte seines Fahrzeuges zu messen so z.B.: die benötigte Zeit von 0….100 KMH. 2.4 Umsetzung Als erstes musste ich mir überlegen welche Aufgaben seitens der Hardware und der Software auf mich zukamen. Man muss bedenken, zu dem damaligen Zeitpunkt hatte ich zwar elektrotechnische Kenntnisse, aber das Thema Fahrzeugdiagnose war Neuland für mich. Da mein Auto ein VW Golf IV BJ 2001 (welches auch mein Testfahrzeug war) für den täglichen Weg zur Arbeit benötigt wurde, konnte ich mir keinen Ausfall der Boardelektronik, was meistens auch sehr teuer werden würde, leisten. Dies war der ausschlaggebende Grund warum das OBD2 ELEKTOR-Interface mit verwendet wurde. Ich musste mir über die Schnittstellenpegel am Fahrzeug, die im Übrigen auch genormt sind, keine Gedanken mehr machen, da dieses von dem Interface übernommen wird. Die Daten zum Fahrzeug, und die zur Seriellen Schnittstelle werden in dem Interface zwischengepuffert und mit der entsprechenden Baudrate wieder ausgegeben. Ich besorgte mir das Interface welches als Bausatz verkauft wurde. Nach dem bestücken war es endlich soweit. Ich lud mir von der Firma WGSOFT das Diagnoseprogramm Scanmaster runter, ging mit dem Interface und einem Notebook an mein Fahrzeug, und steckte den OBD2 Stecker in die vorgesehene Diagnosebuchse. Nach Öffnen von Scanmaster führte das Programm automatische Abfragen an das Interface und Fahrzeug durch. Seriennummer, verwendetes Protokoll und andere Randinfos wurden dargestellt. Beim durchklicken der verschiedenen Reiter welche im Übrigen auch die Mode verkörpern, kam ich zu dem Menüpunkt Sensordaten, dort konnte man auf Anhieb verschiedene Sensorwerte des Fahrzeuges sehen, welches sehr interessant anzusehen war. Da der Golf (dank der jährlichen Wartung) keine Fehler aufwies, und ich dennoch einen Fehler auslesen wollte, habe ich nachgeholfen. Nach dem öffnen der Motorhaube und genauerem hinsehen, konnte man viele Steckverbindungen am Motor an denen diverse Sensoren oder Stellglieder hingen feststellen. Ich entschloss mich den Stecker zu einem Aktivkohlefilter welcher über einen Schlauch mit dem Tank verbunden war zu entfernen. Dieser wurde nicht unbedingt für die lebenswichtigen Aufgaben im Motormanagement benötigt. Technikerarbeit 2005/2006 Dominik Beutner - 10 - Dokumentation V1.0 OBD2 - Diagnosegerät Bild 2.5 Fehlergenerierung Damit das Steuergerät den Fehler erkennen konnte, musste der Motor für einen kurzen Augenblick gestartet werden. Wenn die ECU an dem der Sensor angeschlossen ist, den Fehler bemerkt, schaltet sie zu einem die MIL an (ist auch hier der Fall) des Weiteren wird um Motorschäden zu vermeiden in ein so genanntes Notprogramm gesprungen. Dazu verändert das Motormanagement das Kennfeld für die Einspritzventile und anderen Stellglieder. Das geht aber immer zulasten der Motorleistung und eines erhöhten Spritverbrauchs. Natürlich wird der Motor abgeschaltet, wenn zu viele Fehler erkannt werden, die genaue Anzahl kenne ich aber nicht. Mit dem Reiter für „DTC’s“ konnte man folgenden Fehler erkennen. Bild 2.6 DTC Technikerarbeit 2005/2006 Dominik Beutner - 11 - Dokumentation V1.0 OBD2 - Diagnosegerät Die Fehlerbeschreibung bedeutet sehr grob übersetzt: „Verdunstungs-Emissionen Kontrollsystem Durchspül-Kontrollventil Schaltkreis Fehlfunktion“. (Zum Glück wusste ich noch welchen Sensorstecker ich gezogen hatte). Nach der „Reparatur“ des Fehlers (Stecker wieder verbunden) konnte ich mit dem Button für Clear, den Fehlerspeicher der ECU wieder rücksetzen. Nachdem die Funktionalitäten des Programms ausgetestet waren, besorgte ich mir genauere Informationen über das Interface und wie der Datenaustausch an der seriellen Schnittstelle am Interface ablaufen sollte. Es gab ein Datenblatt über das Herzstück, ein vorprogrammierter µ-Controller der Firma Özen-Elektronik welcher aber leider sehr spartanisch beschrieben war. Die Mode und das OBD2 Datagramm (OBD2 Frame), welches ja allgemein gültig für OBD2 kompatible Fahrzeuge ist, wurden unter anderem in der ISO 15031-5 definiert. Also suchte ich im Internet nach einem Link wo ich diese Norm herbekommen könnte, letztendlich wurde ich jedes Mal Zur Homepage von SAE oder dem ISO Institut in der Schweiz verwiesen, und da zahlte man für die Norm 236 Franken. Der Grund dafür: die Normen die OBD2 beschreiben, sind kein „open System“ Jeder der die Normen z.B. durch das Internet veröffentlicht, macht sich dadurch strafbar. Normalerweise kauft man als Hersteller oder als Programmierer von Diagnosegeräten die entsprechenden Normen und arbeitet sie Stück für Stück ab. Mir war das, wenn man noch die weiteren Kosten für mein Projekt beachtet, einfach zu teuer. Eine andere Möglichkeit die ich auch nutze, bestand darin, nach Bauteilen und Komponenten die in der Fahrzeugindustrie oder bei anderen Diagnosegeräten eingesetzt wurden zu suchen, darin ist zwar nicht die Norm enthalten aber meistens kann man der Funktionsbeschreibung zu dem Bauteil einiges an Informationen oder sogar einen teilweisen Auszug der Norm abgewinnen. Einige sehr hilfreiche Informationen die ich für mein Projekt nutzen konnte, habe ich dem Datenblatt des ELM 323 von der Firma Elmelectronics entnehmen können. Des Weiteren suchte ich in diversen Foren nach konkreten Informationen zur Fahrzeugdiagnose mit OBD2, dort galt es aber auch den Weizen von der Spreu zu trennen. Als nächstes begab ich mich wieder mit dem Notebook und dem Interface ins Auto. Mit Hilfe des „Sniffer Programms Portmon habe ich einige Datagramme an der seriellen Schnittstelle aufzeichnen können. In Verbindung der einzelnen Informationen, aus den Foren, der Datenblätter, und des Logfiles von Portmoon versuchte ich den Datagrammaufbau zu entschlüsseln. Anfangs überlas ich einige Stellen oder nahm sie seitens des Verständnisses einfach nicht war, doch als später das Programm geschrieben wurde, stieß ich automatisch auf diese Lücken und konnte sie durch wiederholtes Lesen der Datenblätter und Notizen machen schließen. In der Schule verwendeten wir ein Experimentierboard der Firma Keil mit LPC Bondout. Dieses System war mit seinem vielen Features wie geschaffen für mein Projekt. Der Testaufbau bestand im Wesentlichen darin, dass ich das ELEKTOR Interface an die serielle Schnittstelle des Entwicklungsboard’s angeschlossen habe. LC-Display, und Taster waren auf dem Board schon integriert. Nun konnte ich Funktionen schreiben, und diese dann direkt im LPC-Bondout emulieren. Es war geschafft, der erste Kontakt mit dem Fahrzeug wurde hergestellt. Anfangs lies ich mir die empfangenen Daten als Hexazahlen auf dem LC-Display darstellen, somit konnte das Datenpacket besser untersucht werden. Das Programm und die Anzahl der Funktionen wuchsen Schritt für Schritt, wegen der besseren Übersichtlichkeit entschied ich mich alle Funktionen in C zu schreiben. Technikerarbeit 2005/2006 Dominik Beutner - 12 - Dokumentation V1.0 OBD2 - Diagnosegerät Wichtig dabei war, dass die 8K Programmspeichergrenze des LPC932 im Auge behalten werden musste, somit musste besonders wert auf codesparende Programmierung gelegt werden. Parallel zu den Funktionen vergrößerte sich auch der Versuchsaufbau. Ein 4 x 20 Zeiliges Display kam zum Einsatz, damit das Benutzermenü sauber dargestellt werden konnte. Des Weiteren passte ich auch das ELEKTOR Interface meinen Bedürfnissen an. Nachteilig war z.B. das es keine Software mäßige Reset Möglichkeit für das Interface gab, So musste jedes mal nachdem der Schlüssel für die Zündung umgedreht wurde, der Diagnosestecker vom Fahrzeug getrennt und wieder neu eingesteckt werden, damit das ELEKTOR Interface sich neu Initialisieren konnte. Bei einigen Fahrzeugen klappte die Verbindung nicht auf Anhieb, somit musste der Vorgang wiederholt werden. Im ELEKTOR Forum sah ich das dieses „Komfortproblem“ auch andere Nutzer betraf. Die Lösung war nahe. Der verwendete µ-Controller auf dem ELEKTOR Interface wird durch einen Kondensator nach anlegen der Betriebsspannung, praktisch in dem Moment wo er mit der Diagnosebuchse verbunden wird für ca. 200ms auf UB 5volt gehalten. Nach der Aufladung des Kondensators sinkt das Potenzial auf ca. 0Volt am Reset Pin des µControllers. Ich entfernte diesen Kondensator und verband den Resetpin mit einem freien Port am LPC 932, jetzt konnte das Interface softwaretechnisch nach belieben resetet werden. Weitere Beschreibungen und Umbau-Maßnahmen finden sie in dem Kapitel Hardware 3.2. Nachdem alle Funktionen geschrieben und getestet wurden, zeichnete ich die Schaltpläne in Target V11. Die Frontplatine ätzte ich selber, die Motherboardplatine auf dem auch der LPC 932 sein Platz einnimmt, ließ ich extern, von der Firma Fischer Elektronik anfertigen. So konnte ich mir die undankbare Mühe die doppelseitig beschichtete Platine, zu ätzen und zu bohren sparen. Ein wichtiger Vorteil bestand darin, dass die Wände der Durchkontaktierungen mit Zinn ausgefüllt wurden, die Stabilität der größeren Baugruppen auf der Platine nahm zu. Nach dem das Bestücken der Platinen, und der Umbau des ELEKTOR Interfaces beendet waren, musste noch das Kunstoffhandgehäuse angepasst werden. Die nächsten Wochen wurden benötigt um das Feintuning am Programm vorzunehmen. Außerdem testete ich das Diagnosegerät an weiteren Fahrzeugen. Die Anfertigung der Dokumentation erfolgte am Ende des Projektes Technikerarbeit 2005/2006 Dominik Beutner - 13 - Dokumentation V1.0 OBD2 - Diagnosegerät 3. Hardware 3.1 Blockschaltbild Bild 3.1 Blockschaltbild Technikerarbeit 2005/2006 Dominik Beutner - 14 - Dokumentation V1.0 OBD2 - Diagnosegerät In Bild 3.1 sehen sie den internen Aufbau und die Anordnung der drei Platinen, von der Unterseite her gesehen. Die beiden 10-Poligen Flachbandleitungen für den PC (rechte Leitung) sowie den Diagnoseanschluss (linke Leitung) führen zu den beiden Sub-D Steckern, die an der unteren Gehäusehalbschale (nicht abgebildet) befestigt sind. Bild 3.2 interner Aufbau Technikerarbeit 2005/2006 Dominik Beutner - 15 - Dokumentation V1.0 OBD2 - Diagnosegerät Um die Übersichtlichkeit der folgenden Schaltpläne etwas besser zu gestallten, wurden die Bauteile der Platinen unterschiedlich nummeriert. Interface Platine Mainboard Frontplatine Bauteilindex größer 0 und kleiner 100 Bauteilindex größer 100 und kleiner 200 Bauteilindex größer 200 und kleiner 300 Das Mainboard bildet die Grundplatine. Auf ihr sind das Diagnoseinterface sowie die Frontplatine eingesteckt. 3.2 Modifikation des ELEKTOR OBD2/Diagnoseinterface Bild 3.4 Original Schaltplan ELEKTOR Interface Da das ELEKTOR Interface von mir zugekauft wurde und als solches schon funktioniert, gehe ich lediglich auf die für das Verständnis notwendigen Funktionsgruppen ein. Dem Datenblatt des µC T89C51 welcher von der Firma Technikerarbeit 2005/2006 Dominik Beutner - 16 - Dokumentation V1.0 OBD2 - Diagnosegerät Özen-Elektronik programmiert, und zu OE90C2600 umgetauft wurde, konnte ich keine genauen Informationen über den Ablauf des Programms entnehmen. Durch die Anwendung heraus, konnten jedoch die meisten Funktionen geklärt werden. Die betreffenden Bauteile der Umbaumassnahmen (blau eingerahmt Abschnitt A) entfielen z.T., oder fanden auf der Mainboard / Frontplatine ihren Platz ein. Nach anlegen der Betriebsspannung an K2 Pin 9, beziehen die Spannungsregler IC5 und IC6 ihre Versorgungsspannung von 12 Volt aus dem KFZ Boardnetz. Das Herzstück der T89C51 (IC1) wird an dem Reseteingang durch die Kombination von C7 und dem Resetbaustein ZSH 560C für ca. 200ms auf UB von 5Volt gehalten. Mit der Entladung von C7 nähert sich der high aktive Reseteingang ca. 0 Volt. Durch die feste Verdrahtung ist ein manueller Reset nur durch erneutes einstecken des Diagnosesteckers möglich. Bei der Abänderung, wurde der Reset Pin des OE90C2600 mit den freien Pin 6 von K1 verbunden. Nach dem Reset startet der T89C51 automatisch die Protokollsuche. Dazu versucht er nacheinander über die Funktionsgruppen Abschnitt B bis E auf die ECU im Fahrzeug zuzugreifen. Bei den CAN Protokollen (ISO 15765-4) findet der Datenaustausch über Abschnitt B statt. Bei Verwendung des SAE J1850 PWM Protokoll wird Abschnitt C genutzt. Bei einer der K-Line Protokolle (ISO 9141-2 / ISO 14230-4) findet der Datenaustausch über Abschnitt D statt, Das SAE J1850 VPW nutzt den Abschnitt E. Nachdem ein gültiges Protokoll gefunden wurde wird der Pin 6 von dem µ-C auf low gesetzt und die Status LED D1 beginnt zu leuchten. Bei der Modifikation wurde der Pin mit K1 Pin 8 verbunden. So habe ich ein Kontrollsignal, welches mir mitteilt, wenn das Protokoll sprich eine ECU gefunden wurde. Die zugehörige LED fand ihren Platz auf der Frontplatine ein. Bild 3.5 abgespeckte Eingangsbeschaltung des OE90C2600 (IC1) Technikerarbeit 2005/2006 Dominik Beutner - 17 - Dokumentation V1.0 OBD2 - Diagnosegerät Der Anschlusspin für die Kommunikations- LED D2 wird direkt mit dem Pin 4 von K1 verbunden. Die LED’s entfallen zwar auf der Interface Platine, werden aber auf der Frontplatine zur anzeige wieder eingesetzt. In die Ausgänge des OE90C2600 darf ein Strom von max. 5mA fließen. Durch die Verwendung von low current LED’s kann ein separater Treiber entfallen. Das Interface stellt mit dem Festspannungsregler LM 7805 eine Spannung von 5Volt zur Verfügung. Da die gleiche Spannung auch für anderen Platinen benötigt wird, Lag es nahe sie an einen freien Pin, dem Pin1 zu legen. Durch die erhöhte Mehrbelastung musste jedoch der LM7805 mit einem zusätzlichen Kühlkörper gekühlt werden. Dadurch dass einige Bauteile auf dem Interface eingespart werden konnten, fand sich jedoch genug Platz um den Kühlkörper mit etwas Silikon isoliert an der Platine zu befestigen. Der T89C51 sendet nach erfolgter Initialisierung alle 3 Sekunden, automatisch eine „keep alive“ message an das Fahrzeug. Dies ist lediglich ein Mode 1 Pid 0 Befehl um den ECU’s mitzuteilen das wir mit Ihr noch verbunden sind. Bei Ausfall solch einer Nachricht würden wir von der ECU automatisch abgemeldet werden. Danach müssten wir das Interface erneut reseten. Wenn wir nun das Interface während dem Betrieb reseten, oder bei der original Schaltung, Stecker raus, Stecker rein, kann es oft vorkommen, das das Interface bei der erneuten Protokollsuche nicht fündig wird. Somit konnten dann auch keine Fahrzeugdaten mehr ausgelesen werden. Mit einem erneuten Reset wurde dann wieder ein Protokoll gefunden. Die Ursache liegt, denke ich darin, dass der Initalisierungsvorgang (Protokollsuche) mit einer niedrigeren Baudrate (Bei ISO 9141-2 mit 5 Bd) erfolgt. Wenn der Vorgang abgeschlossen ist, schaltet zur eigentlichen Datenübertragung das Interface auf 10,4 kB um. Danach wird alle 3 Sekunden an die ECU die keep alive message versendet. Wenn wir nun, kurz nach dem die keep alive message versendet wurde das Interface reseten, beginnt sofort die Initalisierung mit 5Bd, und das Obwohl die ECU noch auf Anfragen mit 10,4 kB wartet. Es musste dann „nur“ noch dafür gesorgt werden das Interface nach einem Reset mindestens 3 Sekunden wartet, bis die Initialisierung eingeleitet wird. Für die Original Schaltung ist IC4, ein Max 232 Vorgesehen, der die TTL Pegel von Pin 13 und 14 vom OE90C2600 in RS 232 Pegel für K1 wandelt. Anstelle des PC’s ist in meiner Schaltung der LPC932 (auf dem Mainboard) mit K1 verbunden. Dieser arbeitet mit TTL kompatiblen Signalpegeln somit kann der MAX an dieser Stelle entfallen. Bild 3.6 Modifiziertes Interface BS und LS Technikerarbeit 2005/2006 Dominik Beutner - 18 - Dokumentation V1.0 3.3 OBD2 - Diagnosegerät Schaltpläne Bild 3.7 Modifizierter Schaltplan Interface Platine Technikerarbeit 2005/2006 Dominik Beutner - 19 - Dokumentation V1.0 OBD2 - Diagnosegerät Bild 3.8 Schaltplan Mainboard Technikerarbeit 2005/2006 Dominik Beutner - 20 - Dokumentation V1.0 OBD2 - Diagnosegerät Bild 3.9 Schaltplan Frontplatine 3.4 Spannungsversorgung Die Betriebsspannung für das komplette Diagnosegerät wird aus der Fahrzeugspannung gewonnen. Über das OBD2 Adapterkabel Bild 3.10 Bild 3.10 OBD2 – Sub-D Verbindungsleitung Technikerarbeit 2005/2006 Dominik Beutner - 21 - Dokumentation V1.0 OBD2 - Diagnosegerät werden die 12 Volt über den Pin 9 der Sub-D Buchse, 1 zu 1 an das Mainboard K105 weitergeleitet. Um einen geeigneten Wert für die Sicherung F101 zu bekommen, habe ich den Strom zwischen Pin 1 und 2 des Sicherungs-Sockels gemessen. Er betrug nach der Initalisierungsphase ca.110 mA. Um einen kleinen Spielraum zu haben, entschloss ich mich für eine 200 mA mittelträge Schmelz-Sicherung. Die LED D201 auf der Frontplatine dient als Betriebsspannungsanzeige. Das Interface wird über Pin 9 des K104 auf dem Mainboard gespeist. Das Interface wandelt die 12V über den internen Spannungswandler auf 5Volt und stellt diese dann am Pin 1 des K103 wieder zur Verfügung. Der Spannungswandler IC 101 stellt die Versorgungsspannung von 3,3 Volt für den LPC 932 bereit. Die 100nF Stützkondensatoren C101…C104 kompensieren kurze Spitzenströme. Sie versorgen dann in diesem Augenblick die Baugruppen mit Spannung. 3.4 LPC932 Der LPC 932 ist ein moderner µC von der Firma Phillips, auf der Basis des berühmten 8051. Er unterstützt den gleichen Befehlssatz und bietet des Weiteren sinnvolle Features für Platz-Sparende mobile Applikationen. Er besitzt einen internen Programmspeicher von 8k, sowie einen internen Datenspeicher von insgesamt 768Byte. Technikerarbeit 2005/2006 Dominik Beutner - 22 - Dokumentation V1.0 OBD2 - Diagnosegerät Bild 3.11 Blockschaltbild LPC 932 Um die externe Beschaltung so gering wie möglich zu halten, bietet er außerdem die Möglichkeit, den internen RC Oszillator von 7,3728MHZ zu verwenden. Anfangs für den Versuchsaufbau nutzte ich auch diesen. Später kam bei mir der Wunsch noch auf, einen Beschleunigungsmesser softwaretechnisch zu realisieren. Das Problem lag darin, das eine genaue Zeitmessung benötigt wurde, die Auflösung sollte Idealerweise 100 ms betragen. Mit dem internen Oszillator waren bei einer gemessenen Zeit von 30 Sekunden und der Toleranz von + - 2,5 % eine Streuung von 29,25 bis 30,75 Sekunden möglich. Dies war einfach zu viel, so habe ich um den Aufwand so gering wie möglich zu halten, einen externen Quarz Q101 mit der gleichen Frequenz an den Pin 9 und 8 am LPC angeschlossen. Mit den beiden Kondensatoren C105 und C106 hält er die Frequenz sehr stabil. Die Ports des LPC unterstützen 4 verschiedene Betriebsarten. Davon werden verwendet: Quasi-Bidirektional: Die Ports können als Ein und Ausgang benutzt werden. Bei einer logischen 1 dürfen max. – 20µA dem Portpin entnommen werden. Bei einer logischen 0 max. 3,2 mA in den Portpin hinein fliesen. Input-Only: Dieses ist nach dem Einschalten die Default Einstellung. Die Ports können nicht auf 0 oder 1 gesetzt werden, lediglich der anliegende logische Zustand kann abgefragt werden. Technikerarbeit 2005/2006 Dominik Beutner - 23 - Dokumentation V1.0 OBD2 - Diagnosegerät Open-Drain: In dieser Betriebsart schaltet ein interner Transistor den Port gegen Masse. Schaltungstechnisch muss zusätzlich ein externer Widerstand oder Verbraucher zwischen den Portpin und der UB geschalten werden. Ausschließlich beim Port P1.2 (Trigger) wird diese Betriebsart benutzt. An den Triggerpin kann optional an ein externer Datenschreiber oder ein Oszilloskop angeschlossen werden. Der LPC arbeitet mit einer Betriebsspannung von 3,3 Volt, es ist jedoch zulässig 5Volt an fast alle Eingänge anzulegen. Die Widerstandsnetzwerke RN101 - RN103 sind parallel zu den Pins geschaltet und ziehen die Ausgänge bei einer logischen 1 auf ein Potenzial von 5Volt. Somit ist die TTL Kompatibilität zu den anderen Baugruppen gewährleistet. Portbelegung am LPC 932 Port Beschreibung Bedientasten P0.0 P0.1 P0.2 P0.3 P1.5 Taste up (aufwärts) Taste down (abwärts) Taste m (Menü) Taste <OK> Reset LC-Display P2.0 P2.1 P2.2 P2.4 P2.5 P2.6 P2.7 Display_E Display_RW Display_RS D4 D5 D6 D7 Sonstige P0.4 P1.0 P1.1 P1.2 P1.4 P1.6 P1.7 Abfrage des Protokollstatus TX (seriell) RX (seriell) Triggerpin für externe Geräte Reset für Interface TX (seriell) für Max 232 RX (seriell) für Max 232 Tabelle 3.1 Technikerarbeit 2005/2006 Dominik Beutner - 24 - Dokumentation V1.0 3.5 OBD2 - Diagnosegerät LC-Display Bild 3.12 Beschaltung am LC-Display Für das LC-Display wurde der komplette Port 2 benutzt. Mit dem Potentiometer R101 lässt sich der Kontrast des Displays stufenlos einstellen. Die Hintergrundbeleuchtung wird separat über Pin 15 gespeist. Die LED Spannung darf zwischen 3,0 und 3,6 Volt liegen -> typ. 3,3Volt. Dabei darf ein Strom von max. 30mA fließen -> typ. 15mA, er variiert je nach Umgebungstemperatur. Der zugehörige Vorwiderstand R102 errechnet sich dann folgendermaßen: RV = 5Volt - 3,3Volt / 15mA = 110 Ohm -> gewählter Wert 100 Ohm 3.6 Bedientasten Auch relativ simple Bauteile wie die Taster mussten richtig ausgewählt werden. Dadurch dass das verwendete Handgehäuse schon eine Aussparung für eine Folientastatur hatte, wollte ich auch solch eine verwenden. Die diversen Elektronikversandhäuser besaßen verschiedene Varianten in ihrem Sortiment. Entweder waren zu viele, oder zu wenig Tasten auf der Folie, oder die Beschriftung harmonierte einfach nicht mit der Menüführung. Technikerarbeit 2005/2006 Dominik Beutner - 25 - Dokumentation V1.0 OBD2 - Diagnosegerät Da das Diagnosegerät in seinem späteren Einsatz möglicherweise in einer Werkstatt eingesetzt wird, mussten die Tasten resistent gegen „Schmierfinger“ sein. Ein kurzer Tastenhub sowie eine flache Bauart waren auch empfehlenswert. Die verwendeten Kurzhub-Tasten erfüllten all diese Bedingungen. Der Reseteingang Port 1.5 des LPC ist low aktiv, d.h. er wird nach einer negativen Flanke rückgesetzt. Die anderen vier Tasten für die Menüführung, ebenfalls low aktiv, wurden an den P0.0 – P0.3 angeschlossen. Bild 4.4 zeigt das prinzipielle Anschlussschema eines Tasters. Bild 3.13 Anschlussschema eines Tasters Im Ruhezustand wird der Portpin durch einen hochohmigen Widerstand auf logisch 1 gehalten. Beim betätigen der Taste wird das Potenzial am Portpin auf 0V gezogen. 3.7 Serielle Schnittstelle Die serielle Schnittstelle überträgt Daten nacheinander (seriell) über die Empfangsleitung RX bzw. die Sendeleitung TX. Es gibt eine Vielzahl unterschiedlicher Normen die die Serielle Schnittstelle beschreiben. Die Kommunikation mit dem OBD2-Interface erfolgt nach der RS232 Norm. Bei der Asynchronen Datenübertragung gibt es kein separates Taktsignal welches zur Synchronisation benutzt wird. Um das TTL Signal im PC oder eines µC an die Pegel auf der RS232 Datenleitung anzupassen werden UART (Universal Asynchronus Receiver and Transmitter) Bausteine wie der MAX 232 eingesetzt. Bild 3.14 MAX 232 Technikerarbeit 2005/2006 Dominik Beutner - 26 - Dokumentation V1.0 OBD2 - Diagnosegerät Eine logische 1 am TTL Ausgang wird durch den Pegelwandler zu einer negativen Spannung, die zwischen -3 und -12V betragen darf, umgesetzt. Eine logische 0 wird dem entsprechend zu einer Spannung von +3… +12 Volt umgesetzt. Der Max besitzt eine interne Spannungspumpe. Diese wird dazu benötigt, um mit der Betriebsspannung von nur 5Volt, die Pegel für die RS232 Schnittstellenleitung zur Verfügung zu stellen. Wie funktioniert nun das senden eines Zeichens? Dazu müssen auf beiden Seiten der Übertragungsstrecke die gleichen Vereinbarungen getroffen werden. Bild 3.15 Ausschnitt der Com-Eigenschaften am PC Die Bitrate entscheidet darüber wie viel Bits pro Sekunde übertragen werden. Bei 9600 Bit/s beträgt die Bitzeit 104µs. Die Anzahl der Datenbits entscheidet darüber, wie viel Nutzdaten wir pro Datagramm versenden. Üblicherweise werden 8 Bits = 1Byte übertragen. Das Paritätsbit kann bei kritischen Daten mit übertragen werden. Da es aber keine 100% Fehlererkennung bei Übertragungsfehlern zulässt, verzichtet man zugunsten der Geschwindigkeit gerne darauf. Mit der Flusssteuerung können sich DEE und DTE über Betriebs und Sendebereitschaft verabreden. Das gängigste Format, welches auch das Interface benutzt ist das 8N1. Es bedeutet 8 Datenbits, keine Parität und ein Stoppbit. Bild 3.16 Übertragung eines Bytes Quelle TA. J.Schell Im Ruhezustand beträgt die Spannung am TTL Ausgang 5Volt. Der Empfänger tastet die Leitung mit einem Vielfachen der Bitzeit ab. Der Sender beginnt mit der Übertragung und legt dazu den Ausgang auf 0Volt. Der Empfänger startet nun eine interne Zeitzählung und tastet in der Bitmitte dreimal die Leitung ab. Davon müssen mindestens 2 Proben 0 sein. 104µs später also bei der nächsten Bitmitte wird wieder die Leitung dreimal abgetastet, und die Mehrheit der Proben entscheidet, welcher logische Zustand ausgewertet wird. Nach dem achten Datenbit, setzt der Sender die Datenleitung mit einer positiven Flanke wieder in den Ruhezustand zurück. Technikerarbeit 2005/2006 Dominik Beutner - 27 - Dokumentation V1.0 3.8 OBD2 - Diagnosegerät Umschaltung vom Interface zum LPC / PC Die Möglichkeit optional einen PC an das Diagnosegerät anzuschließen, brachte die Schwierigkeit der Umschaltung, von dem Interface zum LPC / PC mit sich. Die einfachste aber auch uneleganteste Möglichkeit wäre, die zwei Datenleitungen RX und TX des Interfaces über ein 2 x UM Relais jeweils an den Max 232 oder den seriellen Ein/Ausgängen des LPC zu leiten. Die nächst bessere Möglichkeit bestand nun darin, anstelle des Relais die Umschaltung mit Gattern der 74xx Baureihe zu lösen. Dazu wären dann, ein freier Pin als Umschaltsignal am LPC, 4 x UND, 1 x ODER, und 2 x NICHT Gatter notwendig. Zum Glück hatte ich, damals im Sommer 2005 noch genug Zeit bis zur Abgabe des Projektes. So konnte ich mir zwischendurch ein paar Tage Freizeit gönnen. Ausgerechnet beim „Nichtstun“ kam mir die scheinbar einfache Idee, die Umschaltung alleine durch den LPC zu realisieren. Bild 3.18 Prinzip der Umschaltung Die RX und TX Leitung des Interfaces sind fest an P1.0 und P1.1 des LPC angeschlossen. Im autonomen Betrieb verhält sich die Schaltung als wenn der MAX232 nicht angeschlossen wäre. Wenn die Datenauswertung jedoch mit dem PC erfolgen soll, wird Programmtechnisch Port 1.0 an den P1.6 und der P1.7 an den Port 1.1 geschalten. Dies ist nur möglich da in dieser Zeit der LPC keine andere Aufgabe als das kontinuierliche durchschalten der Ports übernehmen muss. Technikerarbeit 2005/2006 Dominik Beutner - 28 - Dokumentation V1.0 3.9 OBD2 - Diagnosegerät Stücklisten Stückliste für das Mainboard Position Widerstände: RN101,RN102,RN103 R101 R102 R103,R104 R105 R106 Kondensatoren: C101…C104 C105,C106 C107...C110 Halbleiter: IC101 IC102 IC103 Außerdem: Q101 LCD101 Frontrahmen für LCD K101 K102,K105 K103 K104 K106 F101 Sockel für F101 Sockel für IC102 Sockel für IC103 Platine Preis / Stück Wert Lieferant 47k R-Netzwerk 10k Poti 100 1k5 4k7 1k 0,12 € 0,21 € 0,09 € 0,09 € 0,09 € 0,09 € LPC 932 PLLC28 MAX 232 DIL16 Reichelt Reichelt Reichelt Reichelt Reichelt Reichelt Reichelt Reichelt Reichelt Reichelt Reichelt Conrad Herr Sperling Reichelt Quarz 7,3728MHZ LCD204B BL 4x20 LCD FRONT 9 16 Pol DIL 10 Pol Wannenst. D-SUB 10Pol male D-SUB 10Pol female Lötnagel 0,2A mittelträge Printausführung PLCC28 16 Pol DIL doppelseitig Reichelt Reichelt Reichelt Reichelt Reichelt Reichelt Reichelt Reichelt Reichelt Reichelt Reichelt Reichelt Fischer 0,49 € 34,50 € 7,10 € 0,18 € 0,07 € 0,17 € 0,17 € 0,03 € 0,34 € 0,28 € 0,32 € 0,18 € 51,45 € 100n 33n 10µ/35V stehend L4931 3,3v Gesamtkosten 0,12 € 0,11 € 0,14 € 1,19 € gesponsert 0,40 € 99,22 € Stückliste für die Frontplatine Position Wert Halbleiter: D201 LED rt 2mA D202 LED gn 2mA D203 LED ge 2mA Außerdem: S201…S205 Taster rt Befestigungssatzt für Taster K201 DIL 16 Gesamtkosten Lieferant Preis / Stück Reichelt Reichelt Reichelt 0,09 € 0,09 € 0,09 € Reichelt Reichelt Reichelt 1,65 € 0,30 € 0,18 € 10,20 € Technikerarbeit 2005/2006 Dominik Beutner - 29 - Dokumentation V1.0 OBD2 - Diagnosegerät Stückliste für das Interface Wurde als kompletter Bausatz zugekauft Position Widerstände: R1,R2 R3,R4 R5,R9,R15,R16,R21,R25 R6...R8,R10,R11,R14,R17,R22,R23 R12,R13 R18 R19 R20 R24 Kondensatoren: C5,C6 C8,C9,C10,C13...C15 C11,C12 Halbleiter: D3 D4,D5 T1,T5 T2...T4 IC1 (programmiert von ELEKTOR) Typenbezeichnung: OE90C2600 IC2 IC3 IC5 IC6 Außerdem: K1 K2 JP1 X1 PLCC-Fassung, 28-polig für IC1 OBD2 Verbindungskabel zum KFZ Platine Wert Lieferant 1k 100 4k7 10k 510 1k1 3k9 3k 1 ELEKTOR ELEKTOR ELEKTOR ELEKTOR ELEKTOR ELEKTOR ELEKTOR ELEKTOR ELEKTOR 27p 100 n 560 p ELEKTOR ELEKTOR ELEKTOR 1N4001 1N4148 2N3906 2N3904 T89C51 ELEKTOR ELEKTOR ELEKTOR ELEKTOR ELEKTOR LM339, DIL14 PCA82C251, DIL8 LM7805C, TO220 LM7808C, TO220 ELEKTOR ELEKTOR ELEKTOR ELEKTOR 9-polig Sub-D (weiblich),gerade 9-polig Sub-D (männlich),gerade 2-polige Pfosten-Stiftleiste Quarz 16 MHz ELEKTOR ELEKTOR ELEKTOR ELEKTOR ELEKTOR ELEKTOR ELEKTOR EPS 050092-72 EPS 050092-1 Gesamtkosten 83,50 € Gesamtkosten der drei Platinen + Kunststoffhandgehäuse 192,92€ 25,00€ Endpreis 217,92€ Technikerarbeit 2005/2006 Dominik Beutner - 30 - Dokumentation V1.0 OBD2 - Diagnosegerät 3.10 Layouts Mainboard Bestückungsseite Mainboard Layer oben Technikerarbeit 2005/2006 Dominik Beutner - 31 - Dokumentation V1.0 OBD2 - Diagnosegerät Mainboard Layer unten Frontplatine Bestückungsseite Technikerarbeit 2005/2006 Dominik Beutner - 32 - Dokumentation V1.0 OBD2 - Diagnosegerät Frontplatine Layer unten Technikerarbeit 2005/2006 Dominik Beutner - 33 - Dokumentation V1.0 OBD2 - Diagnosegerät 4. Senden und Empfangen über das Interface 4.1 Aufbau einer Nachricht Das Interface ist der Slave und der LPC (Anwender) stellt den Master dar. Die serielle Kommunikation erfolgt halbduplex. Die ECU im Fahrzeug wird von sich aus nie Daten zum Interface senden bevor man sie zuvor nicht dazu aufgefordert hatte. So zu sagen sendet man eine Anfrage (Request message) und bekommt dann die Daten mit einer Response message vom Fahrzeug über das Interface zurück. Die Nummerierung der Commands erfolgt dezimal. Alle anderen Werte (auch im Frame sind hexadezimal) Da das Interface die gemeinsame Schnittstelle darstellt, muss alls erstes der OE90C2600 angesprochen werden. Dies geschieht mit einem Command. Die kpl. Command Liste kann dem Datenblatt OE90C2600 entnommen werden. Dargestellt habe ich nur die Commands die für mein Projekt von Bedeutung waren. Tabelle 4.1 Command 02 für die Generic Modi Tabelle 4.2 Command 05 für das gefundene Protokoll nach der Initialisierung Tabelle 4.3 Command 06 für die ID. Nr. Technikerarbeit 2005/2006 Dominik Beutner - 34 - Dokumentation V1.0 OBD2 - Diagnosegerät Bsp.: Nachdem über die Status LED vom Interface über Port 0.4 (LED) eine erfolgreiche Initialisierung bestätigt wurde, liest der LPC als erstes die Chip ID. vom OE90C2600 aus. So zusagen ist dann die erste Kommunikation mit dem Interface erfolgreich verlaufen. Die empfangenen Bytes werden vom LPC in ein globales Array geschrieben und können anschließend von jeder Funktion ausgelesen werden. Bsp.: Request Response 6 6 0Ah 28h Beschreibung 1. Command senden 2. Positiver Resp. 3. Chip ID 4. 2600 (dezimal) Tabelle 4.4 Jetzt wird das gefundene Protokoll abgefragt Bsp.: Request Response 5 5 00h 01h Beschreibung 1. Command senden 2. Positiver Resp. 3. ISO 9141-2 4. kw 0808 Tabelle 4.5 Über Command 02 können wir direkte Anfragen an die ECU’s senden Der genormte Frame für das ISO 9141-2 sieht folgendermaßen aus: Request (Anfrage) Header Typ 68h Ziel Adresse 6Ah Sender Adresse F1h Datenfeld CRC 1 .... 7 Bytes Checksumme Tabelle 4.6 Response (Antwort) Typ Header Ziel Adresse 48h 6Bh Datenfeld Sender 1 .... 7 Adresse Bytes ECU Adr. CRC Checksumme Tabelle 4.7 Es wird von links nach rechts gesendet/empfangen! d.h. als erstes kommt das Typ. Byte. Das Typenfeld enthält Informationen über die Priorität und ob es sich um eine Physikalische Adressierung oder um eine Funktionale Adressierung handelt. Die Ziel Adresse ist die Adresse an die das Frame gesendet werden soll. Technikerarbeit 2005/2006 Dominik Beutner - 35 - Dokumentation V1.0 OBD2 - Diagnosegerät Die Sender Adresse enthält wie der Name schon sagt die Adresse des Senders. Im Datenfeld übergibt man bei der Anfrage den Mode und je nach Mode den PID, bei der Antwort steht dann im Datenfeld das Echo vom Mode + 40h danach der PID (wenn vorhanden) und dann kommen die eigentlichen Daten. Für Mode 3 und 7 die Fehlercodes und für Mode 1 die Daten der PID’s (siehe PID Tabelle 2.2 auf Seite 7). Das Datenfeld kann je nach Mode und PID 1 – 7 Bytes lang sein. Die Checksumme wird aus den gesendeten Bytes berechnet. Bei meinem Projekt wurden ausschließlich die generic Modi verwendet. Sie verwenden eine funktionelle Adressierung. Dabei wird nicht die einzelne ECU im Fahrzeug angesprochen, sondern es wird nach einem Verwendungszweck adressiert. Alle ECU’s die sich dann angesprochen fühlen d.h. diejenigen die den angeforderten Mode bzw. PID unterstützen, prüfen ob gerade die Datenleitung (KLine) belegt ist und antworten dann jeweils in einem separaten Frame nacheinander. In der Tabelle 4.8 sind die Adressen der Steuergeräte aufgelistet. Adresse (Physikalisch) 10-17F 18-1F 20-27 28-2F 30-37 38-3F 40-57 58-5F 60-6F 70-7F 80-8F 90-97 98-9F 0A-BF C0-C7 C8 C9 CA CB CC-CF D0-EF F0-FD Art des Steuergerätes (ECU) Motor-Steuergeräte Getriebe-Steuergeräte Hersteller-spezifische Erweiterung für Fahrwerk Bremsen-Steuergeräte Lenkungs-Steuergeräte Federungs-Steueräte Hersteller-spezifische Erweiterung für Karosserie Gurtanschnall-Systeme Fahrer-Informationssysteme Beleuchtung Unterhaltung/Audio Persönliche Kommunikation Klima-Automatik Komfort (Türen, Sitze, Fenster etc.) Sicherheits-Systeme Zubehör-Anschluß-Dienste Wechselspannungswandler Wechsel-/Gleichspannungswandler Energiespeicher-Management reserviert für künftige Erweiterungen reserviert für Hersteller-spezifische Aufgaben externe Tester / Diagnose-Geräte Tabelle 4.8 Das Interface besitzt die Möglichkeit bei einer Anfrage die Header und die Checksumme selbst zu generieren. Aus Komfort Gründen habe ich diese Art der Anfrage ausgewählt. Somit braucht bei der Anfrage anstatt des kompletten Frames nur der Command 02 für die generic Modi, danach der Mode und je nach Mode der PID gesendet werden. Bsp.: Es soll Mode1 PID 0 (für alle unterstützten PID’s von 1 – 20h) abgefragt werden. Technikerarbeit 2005/2006 Dominik Beutner - 36 - Dokumentation V1.0 OBD2 - Diagnosegerät Die Anfrage lautet: Request Response Beschreibung 2 1. Command senden 2. Positiver Resp. 3. sende Mode 4. sende PID 6 01h 00h Tabelle 4.9 Die Antwort sieht dann folgender maßen aus: Response (Antwort) vom Interface generiert Header Länge der Echo vom folgenden Command Bytes Typ Ziel ECU Mode + Adresse Adresse 40h PID unterstützte Pid’s Ech von o 0 - 20h 2 48h 6Bh 0h 0Ah Datenfeld F1 41h CRC BE 3E A8 Checksumme 11 B9 Tabelle 4.10 Als erstes empfangen wir das Echo des Command, danach die Länge der folgenden Bytes, diese beiden Bytes werden vom Interface erzeugt. Jetzt kommt der eigentliche Frame vom Fahrzeug. Die beiden ersten Headerbytes sehen bei jeder Response message gleich aus. Die Ziel Adresse ist keine Physikalische Adresse sondern eine Funktionelle! Im dritten Headerbyte sehen wir das nur eine ECU (F1 = Motorsteuergerät) geantwortet hat. Darauf folgt das Echo vom Mode + 40h und dann das Echo des angefragten PID. Jeder der nachfolgenden 4 Bytes enthält die Info für 8 PID’s BE 3E A8 11 enthält die Pid’s von 01 – 8h enthält die Pid’s von 09 – 10h enthält die Pid’s von 11 – 18h enthält die Pid’s von 19 – 20h (unterstützte PID’s aus dem Golf) Ein Byte enthält 8 Bit, das MSB enthält den ersten PID, das LSB den letzten PID. Unten sehen sie ein Bsp. Für das erste Byte BE MSB BEh PID Nr. = LSB 1 0 1 PID 1 PID 2 PID 3 unterstützt? OK X OK 1 1 1 1 0 PID 4 PID 5 PID 6 PID 7 PID 8 OK OK OK OK X Tabelle 4.11 Technikerarbeit 2005/2006 Dominik Beutner - 37 - Dokumentation V1.0 OBD2 - Diagnosegerät Analog zu diesem Beispiel werden die 3 weiteren Bytes ausgewertet. Die Anwender Software sollte dann bevor sie irgendeinen Sensorwert abfragt und auf dem Bildschirm darstellt, mit z.B. einer UND Maskierung prüfen, ob das entsprechende Bit für den PID (der ja die vorhandenen Sensoren verkörpert) auf 1 gesetzt ist. Wollen wir z.B. die aktuelle Geschwindigkeit auslesen, dann schauen wir in der PID Tabelle nach, welcher PID die Geschwindigkeit darstellt, dann überprüfen wir im zweiten Byte (3Eh) ob das Bit für den PID 0dh gesetzt ist. Da es auf 1 gesetzt ist können wir nun die entsprechende Anfrage an das Interface senden. Request Response 2 6 01h 0dh Beschreibung 1. Command senden 2. Positiver Resp. 3. sende Mode 4. sende PID Tabelle 4.12 Anfrage Geschwindigkeit Die Antwort sieht dann folgender maßen aus: Response (Antwort) vom Interface generiert Header Länge der Echo vom folgenden Ziel ECU Command Bytes Typ Adresse Adresse 2 07h 48h 6Bh F1 Datenfeld Mode + 40h 41h CRC Geschwindigkeit PID 1 Byte siehe CheckEcho PID Tabelle summe 0dh 0h 11h Tabelle 4.13 Laut PID Tabelle wird die Geschwindigkeit in 1 Byte dargestellt. Eine Umrechnung ist bei diesem PID nicht notwendig. Wir können also Geschwindigkeiten von 0 – 255 KMH auslesen. In unserem Beispiel steht das Fahrzeug gerade, da ja 0h. Wollen wir weitere Sensorwerte abfragen geschieht dies nach dem gleichen Schema. Technikerarbeit 2005/2006 Dominik Beutner - 38 - Dokumentation V1.0 4.2 OBD2 - Diagnosegerät Fehlerdiagnose Als erstes prüft man ob der Fehlerspeicher der ECU Fehler abgespeichert hatte, und wenn ja wie viele Fehler wurden abgespeichert. Diese Information steckt in Mode 1 PID 1. Eine Antwort könnte folgender maßen aussehen: Response (Antwort) vom Interface generiert Echo vom Länge der folgenden Command Bytes 2 0Ah Header Ziel Typ Datenfeld ECU Adresse Adresse 6Bh F1 48h CRC Check- Mode + 40h PID Echo 41h 01h 82h 07h summe E5h E5h 58h Tabelle 4.14 Die wichtige Information für uns steht nach dem PID, also der Wert 82h. Dieses Byte enthält im MSB ein Statusbit (ob die MIL gesetzt ist). In den übrigen 7 Bit steckt die Information der Fehleranzahl. Um dies zu verdeutlichen betrachten wir das Byte als Binärwert. MSB 82h = 1 LSB 0 0 MIL 0 0 0 1 0 Anzahl Fehler Tabelle 4.15 Die MIL in der Armaturen Tafel leuchtet, und es sind 2 Fehler abgespeichert. Für alle Neugierigen die es interessiert welche ECU die Fehler gespeichert hatte, brauchen dazu nur das dritte Byte im Header anschauen, und der Tabelle 5 die Art des Steuergerätes entnehmen. Diese Information wird auch bei meinem Diagnosegerät ausgegeben. Die zugehörigen Fehlercodes können wir dem Mode 3 entnehmen, dieser benötigt keine PID’s. Die Antwort sieht dann folgendermaßen aus: Response (Antwort) vom Interface generiert Echo vom Länge der folgenden Command Bytes 2 0Ah Header Ziel Typ 48h Datenfeld CRC Check- Mode+40h Fehlercodes max. 3 / je 2 Byte 43h 04h 07h 04h 03h 0h 0h summe 58h ECU Adresse Adresse 6Bh F1 Tabelle 4.16 Das Datenfeld enthält bei Mode 3 immer 7 Byte Nach dem Mode Echo folgen 6 Byte, jeder Fehlercode enthält 2 Byte und muss dadurch paarweise entschlüsselt werden. Technikerarbeit 2005/2006 Dominik Beutner - 39 - Dokumentation V1.0 OBD2 - Diagnosegerät In unserem Bsp. haben wir 2 Fehler (je 2 Byte). Um die Länge von 7 Byte für das Datenfeld einzuhalten müssen die restlichen Bytes mit 0 aufgefüllt sein. Ein Fehlercodepaar aus Nullen bedeutet: kein Fehler für diese Paar). Das high nibble vom HB also die 0 von 04h wird nun durch 2 Ziffern ersetzt. high nibble Ersatz Bedeutung (HB) 0 P0 Antrieb Codes - SAE definiert 1 P1 Antrieb Codes - Hersteller definiert 2 P2 Antrieb Codes - SAE definiert 3 P3 Antrieb Codes - unverbindlich definiert 4 C0 Chassis Codes - SAE definiert 5 C1 Chassis Codes - Hersteller definiert 6 C2 Chassis Codes - Hersteller definiert 7 C3 Chassis Codes - reserviert für Zukunft 8 B0 Karosserie Codes - SAE definiert 9 B1 Karosserie Codes - Hersteller definiert A B2 Karosserie Codes - Hersteller definiert B B3 Karosserie Codes - reserviert für Zukunft C U0 Netzwerk Codes - SAE definiert D U1 Netzwerk Codes - Hersteller definiert E U2 Netzwerk Codes - Hersteller definiert F U3 Netwerk Codes - reserviert für Zukunft Tabelle 4.17 Für unser Bsp. 0407h bedeutet das, das wir die 0 durch P0 ersetzen müssen. Nun werden das low nibble vom HB und das kpl. LB also 407h an die beiden Ziffern angehängt. Der kpl. Fehlercode lautet nun P0407. Zu jedem Fehlercode gibt es im Internet genug Informationsmaterial, die ganze Palette darzustellen würde denn Rahmen der Dokumentation sprengen. Für unser Bsp. lautet die Fehlerbeschreibung: „P0407 Abgas-Rückführ-System (EGR) Sensor B Schaltkreis zu niedrig“. Ich denke dass für die Reparatur des Fehlers Ein Handbuch des Fahrzeuges oder eine solide Kraftfahrzeugmechaniker Ausbildung von Vorteil wäre. Nach der Fehlerbehebung werden wir feststellen dass die MIL in der Armaturen Tafel nicht erlischt und der Fehlerspeicher immer noch zwei Fehler anzeigt. Der Grund dafür liegt darin, das Die ECU auch sporadische Fehler erkennen muss und abspeichert. Sie kann ja nicht wissen, ob der Fehler wirklich behoben ist oder nur sporadisch auftaucht. Mit Mode 7 werden nur die Fehler ausgegeben die aktuell vorhanden sind. Die Auswertung erfolgt analog zu Mode 3. Um die MIL auszuschalten und den Fehlerspeicher der ECU zu löschen, senden wir nach dem Command 2 für das Interface den Mode 4 ohne PID. Als Antwort bekommen wir im Datenfeld nur das Echo zu Mode 4, also 44h. Technikerarbeit 2005/2006 Dominik Beutner - 40 - Dokumentation V1.0 OBD2 - Diagnosegerät 5. Software 5.1 Programmstruktur Während der Testphase wurden die einzelnen Funktionen fortlaufend programmiert. Später als die Anzahl der Funktionen zunahm, segmentierte ich die Funktionen nach Verwendungszweck. Die Übersichtlichkeit nahm dadurch (hoffentlich auch für Außenstehende) zu. Die Software wurde mit Keil µ-Vision 3 erstellt. Bild 5.1 Technikerarbeit 2005/2006 Dominik Beutner - 41 - Dokumentation V1.0 5.2 OBD2 - Diagnosegerät Headerfiles Die Header sollen die Schreibarbeit der einzelnen Funktionen reduzieren, je nach Bedarf können sie in die gewünschte Funktion implementiert werden. Eine Anpassung an andere Prozessortypen wird dadurch erleichtert. stdlpc932.h Die Header werden von mehreren Funktionen genutzt, wenn eine Funktion eine andere aufruft, die das gleiche File schon eingebunden hatte, kann es zu Problemen wie auch bei mir, zu Warnungsmeldungen beim kompilieren kommen. Der Steuerparameter „ifndef“ fragt nun ab, ob dieses Headerfile schon einmal eingebunden wurde. Wenn dies schon geschehen ist springt er ans Ende des Files. Der Steuerparameter „pragma OT()“ optimiert beim kompilieren den Quelltext. Je nach Übergabewert 1-9 wird auf Geschwindigkeit oder Codeeinsparung optimiert. Mit dem Übergabewert 9 reduzierte sich der Quelltext nochmals um 67 Byte. definitionen.h In diesem File wurde jedem Portpin ein Name zugewiesen. So kann im Programmtext anstatt P0.3 der Name OK (für die Taste OK) verwendet werden. Die Anschlussbelegung der Ports kann dem Kapitel Hardware entnommen werden. Konstante Werte die bei Bedarf verändert werden, wurden ebenfalls mit einem Namen definiert. globale_variablen.h Variablen, auf die von mehreren Funktionen aus zugegriffen wird, werden in diesem File global (für alle Funktionen) implementiert. Die Funktion globale_variablen.c initalisiert die Variablen einmal mit einem festen Wert. funktionen.h Genau wie die Variablen, sind alle Funktionen in einem Header geschrieben. Es muss bei Bedarf jetzt nur einmal funktionen.h inkludiert werden. Technikerarbeit 2005/2006 Dominik Beutner - 42 - Dokumentation V1.0 5.3 OBD2 - Diagnosegerät Interruptus Bei Auftreten eines Interruptus wird der aktuelle Programmablauf unterbrochen und es wird in die Interrupt Service Routine (ISR) gesprungen. Nach Abarbeitung der ISR erfolgt der Rückssprung an der zuvor gestoppten Programmstelle. Eine Vergabe von Interruptprioritäten war für mein Projekt nicht notwendig. taste_m Bei betätigen der Taste <m> soll ein Rücksprung ins vorherige Menü signalisiert werden. Es setzt ein globales Flag auf 0. Dieses wird dann in der jeweiligen Funktion ausgewertet. rtc Nach Überlauf der RTC (100ms) wird eine globale Variable inkrementiert nach jedem 10 ten Einsprung (1s) wird eine zweite Variable für die Sekunden inkrementiert und die Variable für die Zehntel Sekunden wird rückgesetzt. seriell Der Einsprung erfolgt jedes Mal wenn ein Byte versendet oder empfangen wurde. Die ISR setzt das Sende und Empfangsflag zurück und prüft ob beim Empfang ein Framing Error, Break dedekt, d.h. wenn mehr als 11 aufeinander folgende 0 empfangen wurden (z.B. bei einem Leitungsschluss) oder wenn der Empfangspuffer von einem neuen Wert überschrieben wurde eingetreten ist. Bei einer dieser Fehler wird ein globales Flag gesetzt. 5.4 Funktionen Die einzelnen Funktionen werden in diesem Kapitel fortlaufend, mit Hilfe von Struktogrammen beschrieben. Die Reihenfolge habe ich so ausgewählt dass der Trend von den „Hilfsfunktionen“ zu den „Hauptfunktionen“ verläuft. zeit( unsigned int Zeit in ms) Die Funktion bekommt die Wartezeit in ms übergeben. Die innere Schleife wird benötigt da sonst zu große Werte übergeben werden müssten. Technikerarbeit 2005/2006 Dominik Beutner - 43 - Dokumentation V1.0 OBD2 - Diagnosegerät initalisierung () Hier werden alle notwendigen Einstellungen für den LPC gesetzt Es wird ein Resetimpuls von 5 Sekunden Dauer für das Interface erzeugt. Somit beginnt das Interface auch nach einem Reset erst nach dieser Zeit mit der Initialisierung (Protokollsuche). Technikerarbeit 2005/2006 Dominik Beutner - 44 - Dokumentation V1.0 OBD2 - Diagnosegerät Lcdtreiber (Assembler) Der Treiber für das LC-Display wurde freundlicherweise von Herrn Sperling zur Verfügung gestellt. Der Treiber beinhaltet mehrere C kompatible Unterprogramme die nach Bedarf aus den Funktionen aufgerufen werden. Folgende Unterprogramme habe ich für mein Projekt verwendet: init_display(): Initialisiert das Display, wird auch zum löschen des Display Inhaltes verwendet. printchar(char): stellt den übergebenen Character-Wert als ASCI Zeichen auf dem Display dar. moveto(char,char): positioniert den Cursor an die Übergebene (Zeile/Spalte). printhex(char): stellt den Übergebenen Character-Wert als Hex Zahl auf dem Display dar. char putchar (char) Das Display ist kompatibel zu dem Standart ASCI Code, bei der Verwendung der Funktion printf() werden Sonderzeichen wie z.B. „ä“ oder „ü“ als Character-Wert im Erweiterten ASCI Code Format übergeben. Auf dem Display erscheint dann alles, nur nicht das gewünschte Zeichen. Ein Blick ins Datenblatt ließ erkennen, dass die Sonderzeichen zwar ausgegeben werden können, dazu muss dann aber ein anderer Wert als der im erweiterten ASCI Code übergeben werden. Mit dieser geänderten Version wird jetzt wie gewohnt das Sonderzeichen 1 zu 1 ausgegeben. Ich habe nur die Sonderzeichen verändert die auch in meinem Projekt verwendet wurden, je nach Bedarf kann die Liste analog dazu erweitert werden. Mit dem Zeichen § wird automatisch in die dritte Zeile gesprungen, so kann ein Fehlermeldungstext auch mehr als 20 Buchstaben aufweisen ohne dazu die Funktion moveto benutzen zu müssen. . Technikerarbeit 2005/2006 Dominik Beutner - 45 - Dokumentation V1.0 OBD2 - Diagnosegerät geraete_fehler (unsigned char Fehlercode) Die Idee zu dieser Funktion entstand am Ende des Projektes. Trotz der einfachen Menüführung stieg mit der Anzahl der Funktionen auch die Wahrscheinlichkeit, dass sich das Gerät durch einen Bedienfehler oder sogar bei einem Defekt an irgendeiner Stelle im Programm aufhängen könnte. Um die Fehlersuche zu erleichtern werden an kritischen Programmpunkten wo z.B. auf externe Ereignisse wie das Interruptflag RI beim Empfang gewartet wird, bei überschreiten eines Zeitlimits ein Fehlercode Als Übergabewert an die Funktion geraete_fehler übergeben. Dieser wird dann auf dem Display als „Error + den Fehlercode“ ausgegeben. Anschließend verweilt das Programm in einer Dauerschleife. Vielleicht kann man das als eine Art OnBoardDiagnose im Diagnosegerät bezeichnen. Error Ursache Fehlerbeschreibung 1 Das Interface hatte sich nach dem Start innerhalb 30 nicht initialisieren können > die Status LED bleibt dunkel Prüfen ob Zündung am Auto eingeschaltet ist! Wenn das ohne Erfolg bleibt wurde keine OBD2 kompatible ECU im Fahrzeug gefunden 2 Die Chip Indent Nr. vom OE90C2600 im Interface ist ungültig Falscher Controller im Interface oder er ist defekt und antwortet falsch 3 kein OBD2 Protokoll gefunden Das Interface hatte keines der OBD2 gültigen Protokolle finden können Protokoll nicht freigegeben Es ist nur das ISO 9141-2 freigegeben Mit der Taste <u> kann nach der Anzeige "Verbindungsprotokoll" dennoch fortgefahren werden Falscher Command Response der LPC hatte einen falschen Command Response vom Interface empfangen > wahrscheinlich ist der LPC932 oder der OE90C2600 auf der IF- Platine defekt 4 5 6 Datenlänge = 0 7 kein Zeichen empfangen Das Interface hatte keine Daten vom Fahrzeug bekommen wahrscheinlich wurde die Zündung ausgeschalten Jedes empfangene Byte zum LPC bekommt ein Timeout von 1 Sekunde 8 Beim Empfang eines Bytes wurde im LPC das Flag für Framing Error, Break dedect, oder Overrun Error gesetzt Die Leitung RX P1.1 zwischen LPC und Interface prüfen evt. Liegt ein Kurzschluss vor Technikerarbeit 2005/2006 Dominik Beutner - 46 - Dokumentation V1.0 OBD2 - Diagnosegerät char eingabe () Die Funktion eingabe wertet die Tasten <u> <l> <OK> aus. Wenn keine Taste gedrückt wurde, gibt sie als Übergabewert <n> für nichts zurück. seriellrx () Die Funktion wird aufgerufen wenn ein Byte über die serielle Schnittstelle empfangen werden soll. Technikerarbeit 2005/2006 Dominik Beutner - 47 - Dokumentation V1.0 OBD2 - Diagnosegerät kommunikation (char Command, char Mode, char PID) Dieser Funktion muss nur ein Command, ein Mode, und ein PID übergeben werden Sie sendet dann die Anfrage an das Interface und speichert anschließend das empfangene Frame in ein globales Array zur Weiterverarbeitung ab. Für Commands die kein Mode bzw. für Modes die kein PID benötigen wird als Übergabewert eine 0 übergeben. Technikerarbeit 2005/2006 Dominik Beutner - 48 - Dokumentation V1.0 OBD2 - Diagnosegerät beschleunigung () Die Funktion stellt ein Untermenü vom Hauptmenü dar. Der Benutzer wird über ein Menü dazu aufgefordert, eine Start und eine Stopp Geschwindigkeit einzustellen. Nun wird kontinuierlich die aktuelle Geschwindigkeit abgefragt wenn die Startgeschwindigkeit überschritten ist, wird eine Variable für die Zehntel Sekunden und eine Variable für die Sekunden mit Hilfe der RTC hoch gezählt. Nach Erreichen der End-Geschwindigkeit wird die benötigte Zeit ausgegeben. Technikerarbeit 2005/2006 Dominik Beutner - 49 - Dokumentation V1.0 OBD2 - Diagnosegerät printwert (char Formatparameter) Einige Sensorwerte wie z.B. die Kühlwasser / Öl Temperatur müssen bevor sie auf dem Display ausgegeben werden, erst umgerechnet werden. Bsp.: die Kühlwassertemperatur PID 05h kann zwischen -40° und +215° liegen. 1 Byte kann aber nur die werte 0 - 255 enthalten. Also muss der Ausgabefunktion der Wert - 40 übergeben werden. Zur Code Einsparung habe ich beispielsweise anstatt Wert x 100/128 die Umrechnung mit Wert x 25/32 gemacht. Bei der Ausgabe eines Sensorwertes wird außerdem auf die Positionseinhaltung der Tausender, Hunderter, Zehner und Einer geachtet. Bei schnellen Potenzwechseln wie z.B. bei der Drehzahl wäre es sonst für den Betrachter unmöglich die Zahl abzulesen. Folgende 6 Übergabewerte werden akzeptiert und ausgegeben: 1 = 0 – 255 4 = - 64 - +64 2 = 0 - 100% 5 = -40 - +215 3 = -100% - +100% mit Vorzeichen 6 = 0 - 16556 Technikerarbeit 2005/2006 Dominik Beutner - 50 - Dokumentation V1.0 OBD2 - Diagnosegerät sensorwerte () Die Funktion stellt ein Untermenü des Hauptmenüs dar. Sie gibt acht aktuelle Sensorwerte auf dem Display aus. Vor jeder Ausgabe wird mit einer UND Maske geprüft ob der jeweilige PID auch gesetzt ist d.h. ob er unterstützt wird. Falls das PID nicht gesetzt ist wird er auch nicht dargestellt. Technikerarbeit 2005/2006 Dominik Beutner - 51 - Dokumentation V1.0 OBD2 - Diagnosegerät fehlerdiagnose () In diesem Menüpunkt wird mit Mode 1 PID 1 geprüft ob die MIL in der Armaturentafel leuchtet und wie Fehler abgespeichert sind. Das wird dann wiederum auf dem LCD ausgegeben. Der Benutzer kann zwischen den Menüpunkten aktuelle Fehler (Mode 7) und den gespeicherten Fehlern (Mode 3) auswählen. Zusätzlich gibt es noch ein Menüpunkt Fehler löschen, bei dem der Benutzer den Fehlerspeicher rücksetzen kann (Mode 4) Technikerarbeit 2005/2006 Dominik Beutner - 52 - Dokumentation V1.0 OBD2 - Diagnosegerät fehlercode () Diese Funktion liest sämtliche Fehlercodes aus, jeder Fehlercode bekommt zur Informationsdarstellung die kpl. vier Zeilen des LCD zur Verfügung gestellt. Mit den beiden Tastern <u> und <l> kann der Benutzer durch die Fehlercodes des kpl. Antwortframe scrollen, Fehlercodepaare die den Wert <00> <00> enthalten, werden übersprungen. Technikerarbeit 2005/2006 Dominik Beutner - 53 - Dokumentation V1.0 OBD2 - Diagnosegerät haupt() Sie gibt das gefundene Protokoll aus, prüft den Chip ID des Interface und speichert die unterstützten PID’s in ein globales Array ab. Außerdem stellt sie ein Auswahlmenü für die PC / µC Bedienung sowie das Hauptmenü für die weiteren Menü Punkte dar. Technikerarbeit 2005/2006 Dominik Beutner - 54 - Dokumentation V1.0 OBD2 - Diagnosegerät 6. Bedienung des Diagnosegerätes 6.1 Übersicht der Bedienelemente Bild 6.1 Übersicht Technikerarbeit 2005/2006 Dominik Beutner - 55 - Dokumentation V1.0 6.2 OBD2 - Diagnosegerät Diagnosefunktionen Anmeldevorgang Nach dem Start versucht das Diagnosegerät einen Verbindungsaufbau zum KFZ herzustellen Bild 6.2 Nach erfolgter Anmeldung kann der Benutzer jetzt wählen ob er die Diagnose mit einem PC über die RS232 Schnittstelle oder lieber mit dem µController gesteuerten Diagnosegerät durchführen möchte. Bild 6.3 Ist eine Diagnose mit dem PC erwünscht kann der Benutzer nach dem bestätigen, den PC mit der Sub-D-Buchse auf der Stirnseite des Diagnosegerätes verbinden. Die mitgelieferte (1:1) RS232 Verbindungsleitung kann als Verbindungsleitung zum PC sowie als Verlängerungsleitung für den OBD2 Anschluss verwendet werden. Das ermöglicht ein arbeiten im Motorraum. Die Software für den Pc wie z.B. Scanmaster wird im Internet kostenlos zur Verfügung gestellt. Auf die Bedienung der jeweiligen Software gehe ich hier nicht ein. Bild 6.4 Wurde der Reiter µC ausgewählt und bestätigt, so wird jetzt für ca. 5 Sekunden das Verbindungsprotokoll angezeigt. Das Diagnosegerät ist nur für das ISO 9141-2 Protokoll freigegeben. Sollte ein anderes Protokoll angezeigt werden wird auf dem Display „Nicht freigegeben“ erscheinen. Der Benutzer hat jetzt die Möglichkeit, durch längeres drücken der Scrolltaste <nach oben>, die Diagnose dennoch fortzusetzen. Für die meisten anderen Protokolle werden sie keine Veränderungen feststellen. Beim KWP 2000 und dem CAN Protokoll kann es jedoch vorkommen ,dass der ein oder andere Wert im Menü nicht richtig dargestellt wird. Bild 6.5 Technikerarbeit 2005/2006 Dominik Beutner - 56 - Dokumentation V1.0 OBD2 - Diagnosegerät Hauptmenü Der Benutzer kommt jetzt zum Hauptmenü. Durch scrollen und anschließendem bestätigen kann in eines der Untermenüs gesprungen werden. Das Hauptmenü ist immer Ausgangspunkt der Untermenüs. Bild 6.6 Menüpunkt „Fehler Diagnose“ In der ersten Zeile wird angezeigt ob die MIL (Motorstörungslampe) in der Armaturen Tafel leuchten sollte. Auch wenn sie nicht leuchtet ist es möglich das Fehler vorhanden sind. Der Untermenüpunkt „aktuelle Fehler“ zeigt alle Fehler an die aktuell vorhanden sind. Der Menüpunkt gespeicherte Fehler zeigt alle aufgetretenen Fehler seit der letzten Fehlerlöschung an. Es werden sporadische sowie aktuelle Fehler in diesem Menüpunkt angezeigt. Bild 6.7 Die Fehlercodes der beiden Menüpunkte werden nach dem gleichen Schema dargestellt. Sind mit dem jeweiligen Untermenüpunkt keine Fehler auffindbar, bekommt der Benutzer eine Meldung „Keine“ angezeigt. Nach ca. 3 Sekunden erfolgt automatisch ein Rücksprung ins Menü. Wenn Fehler vorhanden sind wird jeder Fehler in einem separaten Fenster angezeigt. Mit den Scroll Tasten kann nun durch die ganze Liste der Fehler gescrollt werden. In der ersten Zeile wird das Steuergerät dargestellt welche den Fehler gefunden hatte. Die zweite Zeile stellt den genormten OBD2 Fehlercode dar. In der dritten und vierten Zeile wird für einige Fehlercodes eine kurze Fehlerbeschreibung ausgegeben, falls die Info „Fehlerbeschreibung siehe Handbuch“ ausgegeben wird können sie im Internet z.B. bei google die Beschreibung zu dem Fehlercode (in der zweiten Zeile) finden. Bild 6.8 Mit der Taste <m> kehren sie nun zurück zum Menüpunkt Fehlerdiagnose. Mit dem bestätigen des Untermenüpunkt „Alle Fehler löschen“ bekommen sie zur Sicherheit nochmals eine Auswahl dargestellt. Mit der Taste <m> kehren sie wieder, wie gewohnt zurück ins Menü. Mit betätigen von <OK> setzen sie den Fehlerspeicher sämtlicher OBD2 kompatiblen Steuergeräte im Fahrzeug zurück. Des Weiteren werden die Onboard Logfiles verschiedener Sensoren wie z.B. der Technikerarbeit 2005/2006 Dominik Beutner - 57 - Dokumentation V1.0 OBD2 - Diagnosegerät Lambdasonde zurückgesetzt (gelöscht). Bei einem neuen Motorstart werden diese dann wieder neu geschrieben. Bild 6.9 Wenn sie bestätigt haben, bekommen sie Nochmals eine Meldung ob die FehlerLöschung erfolgreich getätigt wurde. Zu beachten ist, dass die Steuergeräte erst im Betriebszustand der Sensoren d.h. während der Fahrt prüfen können, ob der Sensor oder das Stellglied richtig arbeitet. Führen sie also eine Testfahrt durch, und lesen anschließend den Fehlerspeicher nochmals aus. Menüpunkt „Sensordaten“ In diesem Menüpunkt werden die Echtzeitdaten von max. acht Sensoren ausgegeben. Es wird dargestellt der Lastwert des Motors, die Öl / Kühlwasser Temperatur, die Drehzahl des Motors, die Geschwindigkeit, der Zündwinkel, die Drosselklappenstellung, der Einspritzdruck und die Einspritzmenge. Für ausführliche Informationen über die Bedeutung der einzelnen Werte, bitte ich Sie in entsprechender Fachliteratur nachzuschlagen. . Bild 6.10 Menüpunkt „Beschleunigung“ Hier wird der Benutzer aufgefordert durch scrollen, eine Startgeschwindigkeit auszuwählen. Nach dem bestätigen wird wiederum durch scrollen eine EndGeschwindigkeit ausgewählt. Jetzt sollte das Fahrzeug in die Ausgangslage gebracht werden. Wurde z.B. als Startgeschwindigkeit 0 KMH und als Endgeschwindigkeit 100 KMH ausgewählt, wartet das Diagnosegerät nun darauf, dass der Fahrer mit dem Sprint beginnt. Nach dem überschreiten von 100 KMH wird auf dem Display die benötigte Zeit und die Start / End-Geschwindigkeit dargestellt. Bild 6.11 Technikerarbeit 2005/2006 Dominik Beutner - 58 - Dokumentation V1.0 6.2 OBD2 - Diagnosegerät Wartungshinweise Sollte während dem Betrieb eine Meldung mit einem „Error + Fehlercode“ erscheinen, Bild 6.12 dann prüfen sie bitte ob die Zündung eingeschalten ist. Danach starten sie das Programm neu, mit Hilfe der Taste Reset. Wenn der „Error“ nicht verschwinden sollte, senden sie bitte an die oben genannte Adresse eine E-Mail. Bitte verwechseln sie diesen Meldungstyp nicht mit den OBD2-Fehlercodes im KFZ. Er weißt ausschließlich auf einen Bedienungs- oder Geräte Fehler hin. Wartungs- oder Kalibrier Maßnahmen sind für das Gerät nicht erforderlich. Die Versorgungsspannung wird aus der Diagnosebuchse vom Fahrzeug bereitgestellt. Bei Spannungsspitzen kann es vorkommen dass die Schmelzsicherung im Diagnosegerät ausgetauscht werden muss. Der innere Aufbau des Gerätes gleicht einer Sandwichbauweise. Das Mainboard wird zwischen den beiden Gehäusehalbschalen fixiert. Beim Zusammenbau müssen sie evt. Mit einer Hand die obere Gehäuseschale seitlich leicht zusammen drücken, um das Mainboard in den Führungsbolzen arretieren zu können. 7. Anhang 7.1 Informationsquellen Bücher: Michael Baldischweiler C51 Teil 1 & 2 Zeitschriften: ELEKTOR 10 & 11/2002 Fahrzeugdiagnose mit ELM ELEKTOR 7/2005 Ausgabe der verwendeten Interface Schaltung Internet: www.obd-2.de Infos über OBD2, PID/Mode Tabelle www.ozenelektronik.com Datenblätter & Komponenten für OBD2 www.elmelectronics.com Datenblätter www.troublecodes.net Fehlercodebeschreibung www.wgsoft.de Anwendersoftware für den PC Technikerarbeit 2005/2006 Dominik Beutner - 59 - Dokumentation V1.0 7.2 OBD2 - Diagnosegerät Zeitaufwand Stundenverteilung TA D.Beutner OBD2-Diagnosegerät Software Hardware 80 120 Dokumentation 40 Feintuning und Tests 70 50 Informationsbeschaffung & Auswertung Bild 7.1 7.3 Fazit Nun ist es so weit, nach 10 Monaten ist das Projekt „OBD2 Diagnosegerät“ beendet worden. Alle Punkte des Pflichtenheftes wurden ohne Abweichungen erfüllt. Obwohl ich einige schöne Sommertage und Wochenenden an meinem Computer oder in meinem zweiten Arbeitsplatz, dem Auto verbrachte, fand ich bis auf wenige Momente die Arbeit und das direkte Testen am Fahrzeug sehr spannend. Mögliche Erweiterungen für zukünftige Technikerarbeiten wären z.B. das Einbinden weiterer Protokolle, oder/und die Auswertung weiterer Mode. Selbst der Einbau als Bordcomputer im Fahrzeug wäre möglich. Bedanken möchte ich mich bei meinen Lehrern Herr Sperling und Herr Gross für die Unterstützung bei technischen Fragen, sowie bei Herrn Karrer für die Material und Messgeräte Versorgung. Zuletzt möchte ich Tanja Glatt und Dennis Auer für die Erstellung der FrontplattenFolie danken. Technikerarbeit 2005/2006 Dominik Beutner - 60 -