27
Opis działania programu sterownika http://megasquirt-de.serviceline.ch/success/user0001/derivate0001.htm Mit Derivaten (Abkömmlingen) sind alle Weiterentwicklungen von MegaSquirt gemeint. Das sind primär die anderen Codes (MegaSpark, MSnS...) aber auch Hardware-Modifikation (für weitere Sensoren) bis zu anderen Platinenlayouts des Originals. Allgemeines zu Code Modifikationen Die erste Abänderung war notwendig, weil ich keine GM- Temperatursensoren verwende, sondern einen von BOSCH und einen von Nippon Denso (sind BOSCH sehr ähnlich). Die in diesem Kapitel beschriebenen Tipps einer HiResThermfactor.inc- Datei sind bausteinartig anwendbar, d.h. man kann alle anwenden oder auch nur den einen oder anderen herauspicken. Easytherm4 Roger Enns hat das komfortable Windows-Programm Easytherm4 (ET4) geschrieben. Damit kann man beliebige MS-Codes (Endung .s19) aufspielen. Dazu ist kein Programmiergerät notwendig. Einfach MS mit dem 9poligen Datenkabel zum PC hängen und updaten. Auf meiner 'Download-Seite ' kannst du eine deutsche Übersetzung von ET4's readme.txt-Datei runterladen. Für mich war dieses Programm anfangs wichtig weil es die Möglichkeit bietet anhand von 3 Messpunkten einer Temperatur-Widerstands-Tabelle die Kennlinie für Nicht-GM-Sensoren erstellen zu lassen. Das wird für uns in Europa wahrscheinlich meist der Fall sein, da wir eher BOSCH- als GM(US)-Sensoren haben/verbauen. Eine billige Alternative wären jene von Deawoo, die kosten ~4€, haben metrisches Gewinde (statt 3/8'' bei GM-Sensoren), aber die GM- Temperaturcharakteristik, man muß sich bei MS-Updates nicht jedesmal umd die richtigen *inc-Files kümmern. CLT ist vom 1995er Deawoo 'Cielo', hat ein M17x?-Gewinde MAT/IAT vom 1994erDeawoo 'Prince' ('Perle' in Käfig) M14x1,5. Beide brauchen 19mm-Schlüsselweite und haben ovale GM-Stecker. (Die Deawoo-Infos sind ohne Gewähr, da aus div. MS-Mails extrahiert und von mir nicht überprüft. Zurück zu ET4, dieses generiert (im selben Ordner wie das Programm selbst) 3 .inc-Dateien, die mit jedem Editor lesbar sind. Man kann auch Kommentare einfügen (mit ";" kennzeichnen): matfactor.inc : Für den Temperaturfühler der Ansaugluft (MAT oder IAT). Braucht MT zur richtigen Anzeige, ird nicht im MS-Code verwendet. airdenfactor.inc : Entspricht der Charakteristik des MAT-Sensors, damit kann MS dann Temperaturabweichungen von seinem 'Standardwert' (MAT=70°F=21,11°C) nach dem idealen Gasgesetz berechnen

I próba z PDF

Embed Size (px)

Citation preview

Page 1: I próba z PDF

Opis działania programu sterownika

http://megasquirt-de.serviceline.ch/success/user0001/derivate0001.htm

Mit Derivaten (Abkömmlingen) sind alle Weiterentwicklungen von MegaSquirt gemeint. Das sind primär die anderen Codes (MegaSpark, MSnS...) aber auch Hardware-Modifikation (für weitere Sensoren) bis zu anderen Platinenlayouts des Originals.

Allgemeines zu Code Modifikationen

Die erste Abänderung war notwendig, weil ich keine GM-Temperatursensoren verwende, sondern einen von BOSCH und einen von Nippon Denso (sind BOSCH sehr ähnlich).

Die in diesem Kapitel beschriebenen Tipps einer HiResThermfactor.inc-Datei sind bausteinartig anwendbar, d.h. man kann alle anwenden oder auch nur den einen oder anderen herauspicken.

Easytherm4

Roger Enns hat das komfortable Windows-Programm Easytherm4 (ET4) geschrieben. Damit kann man beliebige MS-Codes (Endung .s19) aufspielen. Dazu ist kein Programmiergerät notwendig. Einfach MS mit dem 9poligen Datenkabel zum PC hängen und updaten. Auf meiner 'Download-Seite' kannst du eine deutsche Übersetzung von ET4's readme.txt-Datei runterladen.

Für mich war dieses Programm anfangs wichtig weil es die Möglichkeit bietet anhand von 3 Messpunkten einer Temperatur-Widerstands-Tabelle die Kennlinie für Nicht-GM-Sensoren erstellen zu lassen. Das wird für uns in Europa wahrscheinlich meist der Fall sein, da wir eher BOSCH- als GM(US)-Sensoren haben/verbauen. Eine billige Alternative wären jene von Deawoo, die kosten ~4€, haben metrisches Gewinde (statt 3/8'' bei GM-Sensoren), aber die GM-Temperaturcharakteristik, man muß sich bei MS-Updates nicht jedesmal umd die richtigen *inc-Files kümmern. CLT ist vom 1995er Deawoo 'Cielo', hat ein M17x?-GewindeMAT/IAT vom 1994er Deawoo 'Prince' ('Perle' in Käfig) M14x1,5. Beide brauchen 19mm-Schlüsselweite und haben ovale GM-Stecker. (Die Deawoo-Infos sind ohne Gewähr, da aus div. MS-Mails extrahiert und von mir nicht überprüft.

Zurück zu ET4, dieses generiert (im selben Ordner wie das Programm selbst) 3 .inc-Dateien, die mit jedem Editor lesbar sind. Man kann auch Kommentare einfügen (mit ";" kennzeichnen):matfactor.inc: Für den Temperaturfühler der Ansaugluft (MAT oder IAT). Braucht MT zur richtigen Anzeige, ird nicht im MS-Code verwendet.airdenfactor.inc: Entspricht der Charakteristik des MAT-Sensors, damit kann MS dann Temperaturabweichungen von seinem 'Standardwert' (MAT=70°F=21,11°C) nach dem idealen Gasgesetz berechnen

Page 2: I próba z PDF

(interpolieren).thermfactor.inc: Für den Temperaturfühler des Kühlmediums (CLT). Braucht MS zum Starten (Warmup Enrichment) und für das Zusatzluftventil, bzw bei den neueren Codes (MSnSExtra...) für div. Gimmicks.

ET4 braucht zum Code-auf-MS-Laden immer die Startadresse der *.inc-Tabellen , werden dann dort 'verschlüsselt' (compiliert) abgelegt. Beim MS-B&G-Standard-Code und einfachen Modifikationen ist das F500, bei Dual Table F700, wo das bei anderen Codes ist mußt du den Autor fragen.

Wie liest MS die Temperatursensorwerte ein?MS misst nicht den Widerstand des Sensors, sondern die Spannung, eigentlich den Spannungsabfall von 0,0V (bei 0 Ohm) bis 5,0V (bei 'unendlichem' Widerstand) werden unter Berücksichtigung des Eingangswiderstandes (R4, R7) in 255(= 2^8 - 1 bit) Schritte geteilt (~0,02V/bit). Diese Spannung (ADC = Analog to Digital Converter) wird gemessen (eigentlich durch Vergleich hochgezählt habe ich mir sagen lassen) und mit der hinterlegten Tabelle (*.inc-Datei) verglichen. In dieser ist jedem ADC-Wert eine Temperatur zugeordnet. Bei einem Spannungsabfall auf z.B. 1,0V berechnet MS: 1,0V / 5,0V * 255 = 51. Dieser ADC-Wert 51 entspricht bei einem Eingangswiderstand von 2,49kOhm und der GM-Temperaturcharakteristik 162°F, bei einem BOSCH-Sensor 131°F.

MS hat im Code die *.inc-Files in 1 Byte (8bit) langen Zahlen abgelegt, d.h. die einzelnen Elemente dieser Tabelle können nur Werte zw 0 und 255 annehmen. Die Temperaturtabelle ist so angeordnet, dass die ADC-Werte ('x'-Spalte) einer dimensionslosen Spannung entsprechen (bezogen auf 5V -Brechnung siehe obiger Absatz). Die zugehörigen Temperaturwerte ('y'-Spalte) sind in °F angegeben, reichen also von von 0°F (-17,8°C) bis 255°F (123,9°C). Um aber auch Temperaturen kleiner 0°F zu messen (Winter), haben B&G einen 'Offset'-Wert von -40°F eingeführt, d.h. die Temperaturwerte in der Tabelle sind um -40°F verschoben. In den Algorithmen wird das natürlich berücksichtigt und jedesmal die 40°F dazugezählt, vgl. MegaManual Kapitel 'How does MS work'. Mit diesem Trick ist es möglich Temperaturen von 0-40=-40°F (-40°C) bis 255-40=215°F (101,7°C) in der Tabelle abzulegen. Deshalb sind in thermfactor.inc und matfactor.inc keine Temperaturwerte kleiner -40°F und größer 215°F abgelegt, da MS nicht darauf zugreifen könnte.Gemessen kann aber der volle Bereich on 0-5V werden, d.h. MS kann das ganze Band an möglichen Spannungen (0V -5V) als ADC-Nummer an MT weitergeben. Mit einem einfachen Trick kann man die MT-Temperaturanzeigen aufmotzen und beliebig hohe Temperaturen am Laptop verfolgen, bzw im Datalog abspeichern, denn MT ist NICHT an die 8bit-Grenze gebunden. Mehr dazu weiter unten.Nun aber wieder zurück zu den 162°F von oben.

Page 3: I próba z PDF

Aus 162°F werden also 162-40=122°F.

Wenn man eine *.inc-Datei mit einem Editor öffnet, liest man nach einigen Kommentaren zu Beginn Zeilen wie diese: ; ADC Fahrenheit - Celcius - resistance in ohms DB 210T; 0 - sensor failure, use limp home value.... DB 162T; 77 123 50 1077 ohms... DB 210T; 255 - sensor failure, use limp home value.

DB steht für 'Data Byte', das ist in der repräsentativen mittleren Zeile die Zahl 162T, (eine Zahl zw 0 und 255). Das T bei 162T sagt dem Code dass es sich um eine Dezimalzahl (für uns leichter zu lesen) handelt und keine binäre oder hexadezimale Zahl ('angeblich' für den Computer leichter zu lesen).Das Semikolon ";" steht am Anfang eines Kommentars, d.h. alles was in dieser Zeile nun kommt wird beim Compilieren oder Verarbeiten ignoriert (z.B. *.ini-Datei).Die Angabe von 210T bei ADC0 (Widerstand = 0Ohm =Kurzschluss) und ADC255 (Widerstand = unendlich = Kabel gerissen oder Stecker gelockert) geben MS eine Nottemperatur von 210°F - 40°F = 170°F = 77°C vor. Diese 170°F sind die MS-Basistemperatur - von hier wird die Dichteänderungsabweichung der Luft in Prozent in airdenfactor.inc angegeben, bzw sollte sich bei defektem Tempsensor/-kabel ein Auto nach Hause bewegen lassen (limp home = heim humpeln), obwohl z.B. keine WarmUpEnrichment möglich ist, bzw das ideale Gasgesetz nicht erfüllt werden kann.

MS 'misst' also eine Spannung die erst in eine Temperatur für den Code (oder Anzeige in MT) umgerechnet werden muß. Wenn dich die Berechnung interessiert, suche nach den Source-codes von ET4 (im Download-Bereich von www.msefi.com) bzw den Vorläuferversionen von ET4 gentherm.c (Interpolieren zwischen vielen Stützwerten) und gentherm2.c (Konstantenberechnung mit genau 3 Stützwerten nach Steinhart-Hart-Approximationsgleichung).

Weil ich es natürlich besonders exakt wissen/haben wollte, habe ich am Küchenherd diese (und andere) Temperatursensoren bei verschiedenen Temperaturen gemessen. Die in der Kfz-Industrie verwendeten Thermistoren können sehr gut mit der Approximationsfunktion von Steihart und Hart

T = 1 / { A + B * ln R + C * ( ln R )^3 }T.....Temperatur [K]R.....Widerstand (Thermistor) [Ohm]A, B, C sind die 3 Konstanten, Stichwort Gleichungssystem mit 3 Unbekannten

angenähert werden.ET4 braucht dazu 3 Wertepaare, ich habe beim ersten selbst erstellten *.inc-File all meine Wertepaare (~10) in die Fit-Software 'Tablecurve' eingegeben,

Page 4: I próba z PDF

und so einen recht genauen Graphen erhalten, 3 Wertepaare daraus abgelesen (berechnet) und diese in ET4 eingegben. Da diese Spielerei exakt nur für meine 2 Sensoren gilt, stelle ich sie nicht im Download-Bereich zur Verfügung.Für die meisten BOSCH-Sensoren gelten folgende Daten (Werksangaben): -30°C....+130°C +/- 1,5K -40°C....45313Ohm 0°C....5896Ohm 20°C....2500Ohm 40°C....1175Ohm 60°C....595,5Ohm 100°C...186,6Ohm 120°C...112,7Ohm

Die genaueste Bestimmung des Widerstandes eines Thermistors ist MS selber. Nicht weil MS das beste Messwerkzeug auf Erden wäre, sondern weil MS genau das eingegeben wird, was der MS-Code braucht (also als 'richtig' erkennt), d.h. es gibt keinen Fehler des DMM beim Messen, bzw die nicht exakten 5,0000V des Spannungsreglers spielen auch keine Rolle.Jede Größe kann man in MT auch als ADC-Wert anzeigen, hier z.B. matADCGauge und cltADCGauge , beides in der Sektion [GaugeConfigurations] der *.ini-Dateien zu finden.

Was ist der Sinn des ADC-Gauges?Dazu brauchen wir ein paar Gleichungen:Der Temperatur-Sensoreingang von MS ist ein sog. Spannungsteiler, die Gleichung drückt die Verhältnisse der Spannungen aus:

U / Vref = R / (R+R_Bias)U..........gemessene Spannung [V]Vref......Versorgungsspannung [V] der Schaltung, der Spannungsregler stellt 5,0V zur VerfügungR..........Widerstand (Thermistor) [Ohm]R_Bias..Biaswiderstand [Ohm], bei MS standardmäßig 2490Ohm (R4, R7)

Ein anderes Verhältnis habe ich bei der Einführung des Begriffes ADC oben schon hingeschrieben, nun etwas anders formuliert:

U / Vref = ADC / 255U, Vref..... wie obenADC.........Nummer [-] der Stufe zw. 0 und 255 je nach eingelesener Spnannung U

U/Vref kann man nun auf die obigen beiden Arten ausdrücken:U / Vref = R / ( R + R_Bias ) = ADC / 255 bzwR / ( R + R_Bias ) = ADC / 255Mit einigen Umformungen (Schule!) kann man den Widerstand explizit ausdrücken:

R = ( R_Bias * ADC ) / ( 255 - ADC )

Page 5: I próba z PDF

gentherm2.c verwendet diese Form der Gleichung:R = ( R_Bias ) / ( 255 / ADC - 1 )

Weiß ich nun die Temperatur (z.B. Eiswasser=0°C) und kenne den passenden ADC-Wert von der MT-Anzeige, kann ich mit der obigen Formel den für MS exakten Widerstand ausrechnen. Das geht natürlich in der Anwendung durch Definition einer neuen MT-Anzeige automatisch:In der Sektion [GaugeConfigurations] werden folgende Zeilen eingetragen: ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld RmatGauge = Rmat, "R_CLT", "Ohm", 0, 10000, -1, -1, 10001, 10001, 2, 0 RcltGauge = Rclt, "R_CLT", "Ohm", 0, 10000, -1, -1, 10001, 10001, 2, 0Und in der Sektion [OutputChannels] einige Variablen definiert: R_BiasMAT = 2490 ; [Ohm] verwendeten Bias-Widerstand R4 eintragen R_BiasCLT = 2490 ; [Ohm] verwendeten Bias-Widerstand R7 eintragen Rmat = { R_BiasMAT * matADC / ( 255 - matADC ) } Rclt = { R_BiasCLT * cltADC / ( 255 - cltADC ) }Nicht notwendig, aber vielleicht interesssant ist es die Widerstandswerte im Datalog zu protokollieren, also folgende oder ähnliche Einträge in der Sektion [Datalog] machen: entry = Rmat, "R_MAT", float, "%.1f" entry = Rclt, "R_CLT", float, "%.1f"Nicht vergessen die Anzeige in der [FrontPage]-Sektion an gewünschte Stelle setzen und los geht es!Die beim Messen ausgepuckten Widerstände mit den korrespondierenden Temperaturen in ET4 eingeben und man hat die genauesten *.inc Files die man sich selber basteln kann, denn nun hat man alle Fehler mitberücksichtigt (Abweichung des Eingangswiderstands R4 bzw R7 ~2,49kOhm, Messfehler beim Widerstandmessen, Spannungsregler hat nicht exakt 5,0000V) die mitberücksichtgt werden können. Messfehler können nur mehr bei der Temperaturbestimmung gemacht werden, aber auch das kann man mit einfachen Mitteln genau genug hinbekommen. Für diese Messungen eignet sich der Stimulator sehr gut, nur muß man die CLT/MAT-Potis irgendwie deaktivieren, am einfachsten durch Einlöten eines Jumpers/Umschalters und zweipoliger Kabel die zu den Sensoren ins Wasserbad führen.

Wie bekommt man daheim möglichst genaue Wertepaare?2 charakteristische Zustände sind Eiswasser und siedendes Wasser, der 3. Wert sollte irgendwo dazwischen sein, z.B. 40°C. » Auch in deinem Haushalt gibt es ein Thermometer das 40° sehr exakt messen kann: Das Fieberthermometer! Ist es ein elektronisches, dann ist nur zu beachten dass der wirklich genaue Bereich zw ~36 und ~42°C liegt. Bei konventionellen Flüssigkeitsthermometern darf das Wasser nicht heisser werden als das Ende der Skala anzeigt, sonst wird es kaputt! Es ist nicht ganz leicht eine gewünschte Temperatur mit Kochtopf und Herd genau einzustellen, insbesonders auf modernen Küchenherden die die Zwischenstufen durch Ein- und Ausschalten regeln. Je größer die Wassermenge, desto träger ist das System, desto genauer die Werte. Außerdem hilft es den Topf zuzudecken um den Wärmeverlust und somit den Temperaturgradienten im Wasser klein zu halten.Der Sensor soll möglichst in der Mitte sein, das gilt ganz besonders auch

Page 6: I próba z PDF

beim Siedeversuch, denn die Herdplatte ist heisser als Siedetemperatur.» Eiswasser ist vom Luftdruck so gut wie unabhängig, daher einfach herzustellen. Der Gefrierpunkt (und die Siedetemperatur) wird aber etwas durch gelöste Stoffe beeinflusst, vgl Wirkung von Streusalz. Leider habe ich keine Unterlagen inwieweit sich der Gefrierpunkt von mehr oder weniger hartem (gelöster Kalk etc) Leitungswasser und destilliertem Wasser (Dampftafeln) unterscheidet. Fülle etwas kaltes (ev destilliertes) Wasser und viele Eiswürfel (ev auch aus destilliertem Wasser) in eine Thermoskanne. Rühre immer wieder um, bzw verfolge die Widerstandsänderung deines Temperatursensors im Eiswasser. Je nach Ausgangstemperatur der flüssigen Phase kann es schon einige Zeit dauern bis sich der Widerstand nicht mehr ändert und du annehmen kannst dass 0°C erreicht sind, also nicht hudeln. Eiswasser ist temperaturstabil, erst wenn alles zu Eis wird, bzw wenn alle Eiswürfel aufgetaut sind ändert sich die Temeperatur. Das ist ein Charakteristikum von Phasenumwandlungen, gilt auch für's Sieden.»Nicht ganz so einfach ist es bei siedendem Wasser, da die Siedetemperatur vom Luftdruck abhängt, deshalb wird Wasser bei dir daheim sicher nicht bei 100,0°C sieden.Den Luftdruck kann man mit dem MAP-Sensor von MS (MPX4250A) messen, es ist zu beachten dass der tatsächliche Luftdruck lt. Datenblatt um +/-5kPa abweichen kann! Die Kennline des MPX4250A selbst ist sehr genau, aber möglicherweise um einen konstanten Wert 'Offset' (eben bis 5kPa) verschoben. Diesen Offset kann man durch Besuch eines Optikers (die oft Barometer servicieren), eines nahegelegenen Flughafens oder einer örlichen Wetterstation feststellen. Man muß nur aufpassen dass man den tatsächlich herrschenden und nicht den (auf Meereshöhe) standardisierten Luftdruck erfragt.Jetzt weißt du also wieviel kPa dein MAP-Sensor (falsch) anzeigt und wie hoch tatsächlich dann der in deinem Küchenlabor herrschende Druck ist. Aus Dampftafeln habe ich für den Bereich zw. 80 und 120kPa folgenden Zusammenhang zwischen Luftdruck und Siedeemperatur ermittelt (gefittet):ts = 7,00 * 10^(-06) * p^3 - 0,0032 * p^2 + 0,7191 * p + 53,078 (mit p in [kPa] und ts in [°C] )Auf 'meiner Download-Seite' kannst du ein Excel-Sheet downloaden mit dem man mit Einsetzen des Luftdrucks sofort auf die Siedetemperatur ts bekommt.

Es ist sinnvoll gleich alle Sensoren zugleich zu kallibrieren, dann ist der Fehler bei jedem Sensor etwa gleich. Es schaut einfach besser aus, wenn beim morgendlichen Start MAT und CLT und ev die Öltemperatur gleich groß sind. :) Hast du ev. einen (oder 2) weitere CLT-Sensoren positioniert, ist es gut wenn man den Messwerten und ihren Unterschieden (linke, rechte Zylinderbank; 1, und letzter Zylinder...) trauen kann. Da ich meine Sensoren zu verschiedenen Zeiten mit unterschiedlichem Hintergrundwissen eingebaut habe, und ein Ausbau nur umständlich möglich ist, zeigen nicht alle das gleiche an *grrrr*.

Veränderung des CLT-TemperaturbereichesMAT: Wer nicht selber Assembler programmieren kann muß mit dem vorgegebenen Intervall

Page 7: I próba z PDF

-40°F (-40°C) bis 215°F (101,7°C)als MS-Messbereich leben, denn MAT wird im Code laufend zur richtigen Einspritzmengenberechnung herangezogen, eine Abänderung würde alles auf den Kopf stellen. Ist aber nicht weiter schlimm, da die Ansaugluft den Rahmen von -40°C bis 102°C kaum sprengen wird. Durch die nichtlineare Charakteristik der verwendeten Thermistoren werden niedrigere Temperaturen genauer aufgelöst als hohe, auch das passt für MAT.

CLT: Anders schaut es bei CLT aus, denn es kann leicht sein dass das Kühlmedium (z.B. Luft) oder ein weiterer Temperatur-Sensor (z.B. Öltemperatur) mehr als 101,7°C heiss werden. Da dies für den Motor auch lebensdauerbedrohlich werden kann, wird es Sinn machen eine Erweiterung des Einsatzspektrums nach oben anzudenken, außerdem wird auch die Auflösung bei hohen Temperaturen etwas besser. Diese Änderung hat aber auch Folgen im Algorithmus, denn die Warm-Up-Anreicherung und andere MSnSExtra-Features greifen auf CLT-Werte zurück.Mit ET4 kann man den Offset von -40°F nicht ändern, dazu {1} muß man auf gentherm2.c zurückgreifen und diesen C-Code etwas anpassen (einfach alles nach '40' absuchen und nach Wunsch ändern), mit passendem C-Compiler kompilieren, die *.exe-Datei abarbeiten lassen, dabei werden neue *.inc-Files erstellt, für CLT braucht man nur die thermfactor,inc-Datei, die anderen beiden kann/soll man löschen.{2} Der geänderte Offset von -40 muß auch in der MT *.ini-Datei im Abschnitt [OutputChannels] angepasst werden, also -40 durch den in gentherm2.c verwendeten Wert ersetzen! coolant = { tempCvt(table(cltADC, "thermfactor.inc")-40) }Wendet man einen/beide folgende Tricks an, kann man auf diesen verzichten.

Vergrößerung des angezeigten/datageloggten TemperaturbereichesSorry für dämlich neudeutsche Form des Partizips.Dieser Tipp macht nur für CLT-Sensoren Sinn, da MAT wohl immer in dem von MS vorgegebenenen Intervall (-40°C -10°C) bleibt.Eine einfache, Möglichkeit ist {3} die thermfactor.inc-Datei die im MT-Ordner abgelegt wird (und nur diese!) etwas zu ändern. Man kann die Einträge höher als 255T durch die eigentlich dazugehörenden (degF+40)-Werte ersetzen. So werden beispielsweise aus diesen Zeilen

ADC Fahrenheit - Celcius - resistance in ohms DB 255T; 15 220 104 156 ohms DB 255T; 16 216 102 167 ohms DB 252T; 17 212 100 178 ohmsfolgende Zeilen: DB 260T; 15 220 104 156 ohms 260=220+40 DB 256T; 16 216 102 167 ohms 256=216+40 DB 252T; 17 212 100 178 ohms bleibt gleichDamit es beim nächsten Hardware-, MT- oder MS-Code-Update zu keinen Zuordnungsfehlern kommt, sollte {4} ein Kommentar ";" eingefügt werden, d.h. folgende Zeilen wird gleich zu Beginn eingefügt: ;2006-05-01 Diese thermfactor.inc ist zum Compilieren geeignet.Die oben {bei 3} modifizierte Datei die nur MT verwendet bekommt folgenden Eintrag.

Page 8: I próba z PDF

;2006-05-01 Diese HiResThermfactor.inc ist nur fuer MT geeignet!Ich füge diesem Kommentar dann immer noch andere Infos dazu, wie und wann die Datei erstellt wurde, um welchen Sensor es sich genau handelt etc.

Besonders empfehlen möchte ich {3a} die *.inc-Datei für MT neu zu benennen, dann kann beim Compilieren nichts passieren! Ich bennenne sie mal "HiResThermfactor.inc", damit kann es keine Missverständnisse geben. Am Ende des Kapitels schlage ich eine Konfiguration einer Anzeige vor.

Am Ende des klein gedruckten Absatz zu Beginn des Kapitels 'Wie liest MS die Temperatursensor-Werte ein?' habe ich hingewiesen dass MT auch Zahlen größer 255 in den *.inc-Files lesen kann (nicht aber MS selber!). Dies machen wir uns nun zunutze, denn so kann man die CLT-Anzeige (cltGauge) in MT auch höhere Temperaturen ausgeben lassen. {5} Ev. die obere Anzeigengrenze des CLT-Rundinstrumentes anheben (Upper scale limit of gauge). Leider werden die Temperatursprünge mit zumehmender Temperatur immer größer:100°C, 102°C, 104°C .... 118°C, 121°C, 126°C, 130, 136°C, 142°C, 151°C, 162°C, 178°C, 209°C.5°C-Schritte und mehr sind bei kritischen Temperaturen sicher viel zu groß, aber zumindest mehr Information als vorher.

Diese Ungenauighkeit im interessanten Bereich kann man deutlich verbessern indem {6} man z.B. den Bias-Resistor R7 verkleinert, z.B. auf ein Zehntel des ursprünglichen Wertes, z.B. ~250Ohm. Die Strombelastung für MS sollte nicht zu hoch werden, d.h. im Extremfalles eines Kurzschlusses (U_max = 5,0V) soll der Strom I_max~50mA=0,05A nicht übersteigen. MitU = R x I wirdR_Bias_min = U_max / I_max = 5,0V / 0,05A = 100Ohm also wäre man mit 250Ohm auf jeden Fall auf der sicheren Seite. Befolgt man auch den obigen letzten Tipp mit nur der Änderung der thermfactor.inc-Datei (im MT-Ordner) ist die Schrittweite bis 163°C in max 1°C-Schritten - eine wirkliche Verbesserung der Temperaturanzeige! Durch Parallelanlöten (ev mit Jumper zum einfachen Deaktivieren) eines Widerstandes R_parallel kann man ohne Rauslöten der Originalplatine R_bias anpassen: R_Bias_neu = 1 / ( 1/R7 + 1/R_parallel )Allgemein gilt dass R_Bias gleich groß sein soll wie der Widerstand des Sensors im wirklich interessanten Bereich, so wird die Genauigkeit in diesem Bereich am besten.Will man weiterhin den 2,49kOhm-Bias-Widerstand nutzen, eigent sich zur Kühlmediums-/Öl-Temperatur-Anzeige sehr gut z.B. ein Ford-MAT-Sensor, da diese wesentlich hochohmiger als jene von BOSCH oder GM sind (~50kOhm bei Raumtemperatur, ~2,5kOhm bei siedendem Wasser).Nicht übersehen, eine Verbesserung der Genauigkeit bei hohen Temperaturen führt automatisch zu einer Verschlechterung bei niedrigen Temperaturen!

Verbesserung der Genauigkeit/Aufösung der TemperaturanzeigenSinnvoll für CLT und MAT.Standardmäßig liest MT die Temperatur als Integerzahlen (ganze Zahlen)

Page 9: I próba z PDF

aus und gibt sie als solche aus, das sind 2 Rundungsfehler die überhaupt nicht sein müssen, denn MT ist nicht auf die 255 Stufen und ganze Zahlen beschränkt. Für genauere Sprungwerte kann man1.) in der *.inc-Datei- mehr Dezimalstellen angeben (=Umrechnung des ADC-Wertes), bzw 2.) mehr Stellen in MT anzeigen und im Datalog abspeichern.@ 1.)Zuerst geht es darum den eingelesenen ADC-Werten (immer 8bit Integer, da hilft alles nichts) möglichst genaue Temperaturen zuzuordnen. {7} Eine höhere Genauigkeit in der Look-Up-Tabelle ist sinnvoll, da MT jedesmal Mal von (den eingelesenen) °Fahrenheit (minus 40) in die bei uns gebräuchlichen °Celsius umrechnet. Bei ADC96 ist das z.B. DB 147T = 107°F (41,667°C) oder bei mehr angegebenen Stellen 106,653°F (41,474°C). Bei der üblichen Temperaturausgabe in Integerzahlen 1°C Rundungsfehler.Angewendet auf die 3 Beispielszeilen weiter oben im Text:

ADC Fahrenheit - Celcius - resistance in ohms DB 261T; 15 221,26 105,14 156 ohms DB 257T; 16 216,73 102,63 167 ohms DB 253T; 17 212,54 100,30 178 ohmswerden nach dem DB so geändert: DB 261.259T; 15 221,26 105,14 156 ohms DB 256.732T; 16 216,73 102,63 167 ohms DB 252.535T; 17 212,54 100,30 178 ohmsWichtig ist nur die Zahl zwischen dem DB und dem T. Nach dem Semikolon ist alles Kommentar und kann beliebig beschrieben werden. @ 2.)hg Bei der Temperaturanzeige empfehle ich eine Dezimalstelle, mehr bringt keine weitere 'echte' Informnation, so aber bekommt man nun auch mehr angezeigte Zwischenwerte, denn so manche DB xxxT -Zahl ist durch Rundung auf ganze Zahl in 2 aufeinanderfolgenden Zeilen gleich, vgl. in der B&G thermfactor.inc-Datei z.B. die ADC-Werte 95&96: 2x 107.000°F = 41,667°C (angezeigt immer nur 41,7°C) oder

107,283°F = 41,824°C (angezeigt 41,8°C) und106,653°F = 41,474°C (angezeigt 41,5°C).

Am einfachsten ist es in der *.ini-Datei eine neue MT-Anzeige zu kreieren: HiResMATGauge = HiResMAT, "HiRes_MAT", "%TEMP", 0, 100, 0, 80, 60, 70, 1, 0 HiResCLTGauge = HiResCLT, "HiRes_CLT", "%TEMP", 0, 100, 0, 100, 110, 150, 1, 0und weiter unten die Variablendefinition: HiResMAT = { tempCvt(table(matADC, "HiResMatfactor.inc")-40)} HiResCLT = { tempCvt(table(cltADC, "HiResThermfactor.inc")-40)}sowie Eintragsmöglichkeiten zum Dataloggen: entry = HiResMAT, "HiRes_MAT", float, "%.1f" entry = HiResCLT, "HiRes_CLT", float, "%.1f"

Anmerkung: Ich habe hier immer mit die GM-Sensortabelle thermfactor.inc von B&G zitert, da man als Anfänger wahrscheinlich nur diese ohne Fehler zur Verfügung hat, bzw beim Experimentieren einen Vergleich hat.Zwischen der original B&G-thermfactor.inc-Datei und meiner Berechnung sind kleine Unterscheide, wahrscheinlich wg Rundungsungenauigkeiten in

Page 10: I próba z PDF

gentherm.c, oder weil ich die Eingabe der 3 Wertepaare in °C vornehme.

Beim ersten Mal durchlesen nicht alles verstanden? Nochmals genau lesen, besser 2x! :) Vielleicht hilft es dem Überblick, hier eine kurze Zusammenfassung eines Luxus-Temperatur-Anzeigers, mit Bezug auf die Marker {x} in diesem Kapitel, manche Punkte kann man auslassen, wenn man diese oder jene Option nicht nutzen will/kan:»1) R_bias (R7) verkleinern, vgl {6}, Sinnhaftigkeit + .»2) Neue HiResThermfactor.ini-Datei erstellen: »2.1) Will/kann man den -40°F Offset ändern, gentherm2.c anpassen, compilieren und *.exe ausführen, vgl {1}, Sinnhaftigkeit - .»2.2) Den Anzeigebereich von MT erweitern, dazu statt DB 255T und DB 0T die tatsächlichen Werte zuweisen, vgl {3}, Sinnhaftgkeit +++.»2.3) Will man die Genauigkeit der Umrechnung erhöhen, einfach der DB xxxT Spalte Dezimalstellen anhängen: DB xxx.xxxT, vgl {7}, Sinnhaftigkeit ++ .»2.4) Will man die Auflösung erhöhen, in der *.ini-Datei eine Dezimalstelle in dem Temperatur-Rundinstrumenten zulassen, vgl {8}, Sinnhaftigkeit ++ .»2.5) Ausreichend Kommentare einfügen dass man ein paar Monate später weiß wie die Datei zustande kam, vgl {4}, Sinnhaftigkeit ++.»2.6) Die neue HiRes*factor-Datei in den richtigen MT-Ordner kopieren.»3) Neue Rundinstrumente in *.ini-Datei von MT erstellen, Sinnhaftigkeit ++ :»3.1) HiRes*Gauges definieren.»3.2) Die neue Variablen HiRes* definieren.»3.3) Bei Bedarf Einträge in die Datalog-Datei vornehmen.

Anpassen von R_Bias um jeden Temperatursensor ohne Änderung der *factor.inc-Dateien zu nutzenMan kann jeden NTC-Temperatursensor durch geeignete Wahl von R4, R7 (R_Bias) verwenden ohne bei jedem Code-Update die inc-Files berücksichtigen zu müssen. Voraussetzung: Die Charakteristik des Sensors muß mit der Steinhart-Hart-Funktion zur Deckung gebracht werden können. Das trifft auf die meisten (alle?) Temperatursensoren im automotiven Bereich (GM, Ford, BOSCH) zu. Temperatur-Sensoren aus dem Elektronikladen haben ev eine andere Charteristik (PTC, THermoelement...).

Berechnung kommt noch!

download.exe

Dieses kleine MS-DOS Tool von Eric Fahlgran kann ebenfalls zum Software-Updaten verwendet werden. Es wird in einem DOS-Fenster ausgeführt oder noch besser/einfacher mit einer einzeiligen Batch-Datei (wenn man das öfters machen will/muß). Wenn der Code z.B. ms-mod12.s19 heißt, schreibt man mit einem Editor in die erste Zeile oder beim DOS Prompt:download ms-mod12.s19Das wars. Es gibt auch zahlreiche Parameter-Möglichkeiten, so bedeutet etwa -c2 dass die COMM2-Schnittstelle angesprochen wird. Standarmäßig

Page 11: I próba z PDF

ist das COMM1 und braucht nicht extra angegeben werden. So werden alle Parameter aufgelistet (Hilfe):download -hEs gelten die 'Gestze' aus alten MS-DOS Tagen, d.h. .bat .s19 und .exe Datei müssen im selben Ordner sein, ansonsten nachlesen/erinnern wie das mit config.sys und autoexec.bat damals war.

"Closed Loop" für das ganze Kennfeld:

Die erste echte Code-Modifikation betraf meinen Wunsch ein komplettes Kennfeld mit lamda=1einzufahren und erst von da ausgehend den Vollastbereich auf lambda=0.85...0.9 zu optimieren. Der MS30 Standardcode wechselt aber bei einem TPS von ~80% in den open loop, d.h. die lambda-Sonde findet keine Berücksichtigung mehr.Lance Gardiner hat kurz zuvor eine einfache Modifikation vorgestellt, dass nicht TPS der Parameter sein soll, sondern MAP. Er war so nett und hat für mich einfach den Wert auf 100kPa eingestellt, der bei meinem Motor nie erreicht wird.

Ich wollte aber selber wissen wie das Compilieren funktioniert und habe die Modifikation nachgestellt. Irgendwo nach dem 1. Drittel in der .asm-Datei findet sich der Algorithmus (~Unterprogramm) für die Variable MAE:lda tpscmp #$B2bhi SKIPO2Statt dass wie bisher der TPS-Wert der Variable tps abgefragt (und verglichen) wird, soll das der MAP-Wert sein: kpa.$B2 ist die Hexadezimaldarstellung für 178. Das ist der ADC-Wert, den du auch siehst wenn du in MT das TPS kallibrierst. Ist das Gaspedal zu, hast du vielleicht einen ADC TPS-Wert von 31, bei voll geöffnetem Pedal vielleicht 235. 178 wäre dann ein zu 87% geöffnetes Gaspedal.Steht vor der Zahl kein $-Zeichen und danach ein T, interpretiert der Compiler dies als gewöhnliche Dezimalzahl, hier also ein MAP-Wert von 100kPa..Mit dem Semikolon ";"werden Zeilen unter 'Kommentar' für den Compiler also unsichtbar dargestellt.Wer sich nicht ganz sicher ist, sollte nun vor jede Zeile ein en Strich-Punkt setzen und darunter 3 neue Zeilen mit 3 Befehlen einfügen: ;lda tps;cmp #$B2;bhi SKIPO2lda kpacmp #100Tbhi SKIPO2Diese Code-Änderung ist auch im MegaManual veröffentlicht, bzw heute schon in Phil Ringwoods MSnSEnhanced so eingebaut, dass du ganz einfach im Menü von MT wählen kannst.

WARNUNG: Es ist verdammt gefährlich gedankenlos immer im 'closed loop' zu fahren, weil die magere Verbrennung deutlich heisser (=besser) abläuft als ein fettes Gemisch. Deshalb immer nur kurze Strecken Vollgas fahren!

Page 12: I próba z PDF

Assembler Compilieren mit CASM08Z

Um die in Assembler (für manche Menschen lesbar) geschriebene Software unserem 68HC08-Prozessor verständlich (für die meisten Menschen nicht lesbar) zu machen muß der Code compiliert werden. Kurz: Aus dem .asm File wird ein .s19-File. Wir dürfen dazu eine kostemlose Software von P&E verwenden. Das klingt zwar freundlich da aber einige Dinge zu berücksichtigen sind, kann es auch zu Unfreundlichkeiten des ungeübten Users kommen.

Zuerst ladest du dir die Software runter - aktuellen Link findest du im MegaManual, entzippst das ganze in einem beliebigen Ordner. Dieses Programm wird nicht installiert, kann daher als ganzes leicht von einem Ordner/Rechner in einen anderen verschoben werden. Wichtig ist nur dass einige Dateien immer im gleichen Verzeichnis sind.Das sind:ms-mod12.asm Das ist dein geänderter oder irgendwo runtergeladener Source Code.megasquirt-mod12.h Das gehört auch zu deinem Source-Code. Diese Datei kann, muß

aber nicht modifiziert sein, kann also auch normal megasquirt.h heissen. Wichtig ist, dass die.asm-Datei (mit Editor öffnen) genau auf diese .-Datei Bezug nimmt!

Gp32.equ Diese Datei muß immer dabei sein. Keine Ahnung was die macht/kann.

matfactor.inc Wertetabelle für MAT-Sensorairdenfactor.inc Wertetabelle für MAT-Sensorthermfactor.inc Wertetabelle für CLT-Sensorbarofactor4115.inc Wertetabelle für sehr alte MAP-Sensoren die nur bis 115kPa

verwendbar warenbarofactor4250.inc Wertetabelle für MAP-Sensorkpafactor4115.inc Wertetabelle für sehr alte MAP-Sensoren die nur bis 115kPa

verwendbar warenkpafactor4250.inc Wertetabelle für MAT-Sensorboot_r12.asm Das ist der Code für den Boot-LoaderCASM08Z.EXE Natürlich auch die ausführende Programm-Datei(compile.bat) Optional kann man sich eine Batch-Datei schreiben.

Wie bei download.exe kann es auch hier hilfreich sein eine einzeilige .bat Datei zu schreiben.casm08z.exe megasquirt-mod12.h S L I MDiese 4 Buchstaben am Ende sind wieder Parameter, so bedeutet S, dass ein .s19-File erzeugt wird. Die anderen Parameter sind wohl nicht so wichtig (L: erstelle Listing file; I, M: weite Include und Macros im Listing-File aus).

Es gibt auch eine Windows-Enwicklungsumgebung von P&E. Ich finde die gar nicht so toll, denn der Editor ist nicht aufregend und man muß die Entwicklungsumgebung konfigurieren, das 'DOS' Programm casm08z.exe ist meiner Meinung nach flexibler.

So nun wieder zurück zum stöchiometrischen Kennfeld:

Die .ini Dateien von MegaTune

megatune.ini

Page 13: I próba z PDF

Lamda-AnzeigeDa ich keine Breitbandlamda-Sonde samt dazupassendem Controller habe, möchte ich in MT eine Anzeige für lamda basteln.Der Plan ist, dass die Kennfelder VE_stöch und VE_tatsächlich verglichen werden. Das funktioniert, denn der Liefergrad ist im stationären Zustand direkt proportional zur Einspritzmenge/-dauer. Ich könnte auch die Einspritzdauern vergleichen.

Eric hat eine Funktion eingebaut mit der man solch ein Kennfeld einlesen kann. Dazu wird das stöchiometrische Kennfeld als .vex-Datei exportiert und stoichVE.vex genannt.Unter [GaugeConfigurations] soll die neue Anzeige definiert werden:;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ldlambdaVEGauge=lambdaVE, "Lambda(VE)", "", 0.8, 1.2, 0.85, 0.9, 1.01, 1.1, 2, 2 Unter [FrontPage] kann man sich die Stelle aussuchen, z.B. rechts unten:gauge8 = lambdaVEGaugeAm Ende nach dem letzten Eintrag kann man noch eigene Variablen definieren, z.B. stoichVE: stoichVE = { vexInterp(rpm100, map, 0, "stoichVE.vex") }lambdaVE = { stoichVE / veCurr }Fertig ist eine praktische Anzeige.

Es empfiehlt sich aber all diese Einträge in einer eigenen custom.ini-Datei abzulegen und in megatune.ini nur darauf zu verweisen:#include "custom.ini"Das hat den entscheidenden Vorteil, dass bei einem Update von MT (und die Möglichkeit kommt oft vor) megatune.ini überschrieben wird und alle Einträge futsch sind. Ich bin sogar soweit gegangen dass ich auch custom.ini nicht verwende sondern dort nur einen Verweis (z.B. #include "meins.ini") eingebaut habe und alles in einer eigenen nie überschreibbaren meins.ini-Datei stehen habe.

TPS-Beschleunigungs-Anzeige:Zum Tunen der Beschleunigungsanreicherung kann man abhängig von der Drosselklappenwinkelgeschwindigkeit eine zusätzliche Zeit eingeben die die Einspritzdüsen offen sind. Dies ist aber nur schwer abschätzbar, denn der einzig feststellbare Wert ist der TPSdot Threshold [V/s] da wenn dieser erreicht ist eine der 3 LEDs auf MS leuchtet. Alles was darüber geht ist Schätzung - wilde Schätzung.Zur Objektivierung habe ich mir eine weitere Anzeige einfallen lassen.

Dazu passt die Erklärung des Ausdrucks 'dot' der im Manual immer wieder vorkommt. Dot ist der Punkt und zeitliche Ableitungen werden mit einem Punkt dargestellt. y_Strich=dy/dx hieß das allgemein in der Schule, bzw s_Punkt=ds/dt für die Zeit. TPSdot ist also die zeitliche Ableitung des Winkels, der durch das Poti im TPS als Spannung gemessen wird --> [V/s]. Mathematisch: U_Punkt=dU/dt.

In den .ini-Files kann man selber Variablen definieren, muß bzw kann dabei aber auf vorhandene zurückgreifen.Wieder unter [GaugeConfigurations] soll die neue Anzeige definiert werden:

Page 14: I próba z PDF

;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld;TPSdotGauge = TPSdot, "TPSdot", "V/s", 0, 16, 2, 4, 8, 15, 2, 0Diese Anzeige macht keinen Sinn auf der ersten Seite, wohl aber unter dem Menü 'Runtime' im Punkt 'Tuning'.MT bietet hier 4 selbst konfigurierbare Anzeigenkombinationen (pages) zu je 6 Instrumenten. In megatune.ini finden sich diese Einstellungen unter [Tuning]. Vielleicht macht es Sinn statt 'PW2' eine 'Accel'-Seite einzurichten:; Page 1 Page 2 Page 3 Page 4pageButtons = "&EGO", "&WUE", "PW&1", "Accel"gauge1 = xxx, xxx, xxx, tachometergauge2 = xxx, xxx, xxx, throttleGaugegauge3 = xxx, xxx, xxx, egoGaugegauge4 = xxx, xxx, xxx, pulseWidth1Gaugegauge5 = xxx, xxx, xxx, TPSdotGaugegauge6 = xxx, xxx, xxx, accelEnrichGaugeJetzt ist nur mehr die Definition von TPSdot offen:timeold = { timenew }timenew = { timeNow }deltatime = { (timenew - timeold) }tpsADCold = { tpsADCnew }tpsADCnew = { tpsADC }deltatpsADC = { tpsADCnew - tpsADCold }TPSdot = { deltatpsADC/255*5.0 / deltatime }Jedesmal wenn MS über das Datenkabel die aktuellen Werte sendet, wird auch die Zeit timeNow mitgesendet. Zeitgleich auch die Spannung des TPS-Potis tpsADC. Durch abspeichern dieser Werte und dem Vergleich mit den Werten des vorigen Auslesevorgangs ergeben sich Differenzen aus denen zwar nicht exakt U_Punkt=dU/dt infinitesimal bestimmt wird, allerdings sollte die Näherung U_Punkt~delta_U/delta_t für unsere Tuningzwecke gut genug sein. Je größer TPSdot ist, desto größer wird der Fehler.

MS3.0-Code-Adaption für mehrere CLT-Sensoren

Bei Wassergekühlten Motoren ist es recht einfach die Kühlmitteltemperatur zu messen, weil meist ist der Platz vorgegben.Was bzw wie misst man aber bei einem Luftgekühlten?Abluft:Wie der Name 'luftgekühlt' sagt, ist das Kühlmedium Luft. Diese vernünftig zu messen ist nicht ganz einfach. Da beim Entenmotor durch das Lüfterrad immer Luft an den Zylinderköpfen vorbeiströmt ist es naheliegend diesen Luftstrom zu messen. Habe ich auch so gemacht - siehe meine MS-EinbauDetails im Fahrzeug. Bei Bergfahrten mußte ich aber feststellen dass die Ablufttemperatur nur stark verzögert die Motorerwärmung wiedergibt. Sowohl beim Bergauf-, als auch beim Bergabbfahren. Gibt es einen besseren Platz?Öl:Die Messung der Öltemperaturhat den großen Nachteil, dass es recht lange dauert bis Betriebstemperatur erreicht wird. Bei wassergekühlten Motoren ändert sich die Öltemperatur angeblich auch langsamer als das Kühlwasser.Auspuffgase:

Page 15: I próba z PDF

Diese reagieren sicher am schnellsten auf Lastwechsel und erwärmen sich rasch. Auch wenn der Auspuffkrümmer schon brennheiss ist, muß der Motor noch lange nicht warm sein, bzw umgekehrt muß eine vermeintliche Abkühlung des heissen Motors nicht tatsächlich ausreichend sein. Ausserdem sind die hohen Temperaturen nicht mit einfachen Sensoren zu messen.Zylinderkopf:Ich könnte mir vorstellen dass die Kühlrippen recht nahe am Auslassventil eine repräsentative Temperaturaussage zulassen.Um von der Spekulation zur Entscheidung zu kommen, möchte ich mehrer CLT-Sensoren gleichzeitig einlesen bzw mitprotokollieren (datalog). Dann sollten einfache Excel-Tabellen bzw Bildausschnitte on MSLVV die tatsächlichen Temperaturverhältnisse ans Tageslicht bringen.

Später möchte ich dann eine 2. Lambda-Sonde einbauen und vergleichen wie unterschiedlich die Zylinder arbeiten.

Hardware-Anpassung von MS:

Wie der Schaltplan von MS zeigt, braucht jeder Temperatursensor einen Eingangswiderstand und noch ein paar billige Bauteile. Diese sollen auf eine Experimentierplatine aufgelötet und mit MS in das Gehäuse eingeschoben werden. Die Kontakte für Stromversorgung und Masse nehme ich von Durchgangsbohrungen bzw freien Stellen der MS-Platine ab.Für den Anfang habe ich einmal eine weitere CLT-Sensor 'input section' nachgebaut.

Software-Anpassung von MS und .ini-Anapssung für MT:

Eigentlich scheint es nicht schwer zu sein einen weiteren CLT-Sensor zu implementieren. Der Hund liegt aber anscheinend im Detail, vielleicht habe ich auch nur einen Fehler in den .ini-Dateien on MT gemacht.Phil Ringwood empfiehlt doch mal seinen MSnSEnhanced Code zu probieren. Dieser erlaubt auch weitere Eingänge. Allerdings funktioniert der Standard-MSnS-Code und auch seiner erst ab 4 Zylindern. Das liegt an irgendwelchen Zeitvariablen die von 4 bis 8 Zylindern zwar ähnlich sind, bei1- und 2-Zylindern aber total aus dem Rahmen fallen.Das Projekt schläft, ist aber noch nicht entschlafen.

Keine 2 Tage später sendet mir Phil ein Mail mit dem Code zum Testen:

MSnSEnhanced Code

Dieser Code erfordert MT ab Version 2.25b228, da zahlreiche Features mit MT gesteuert werden können.Es ist geplant alle wichtigen Weiterentwicklungen in einen Code zu bringen, sodass man nur mit MT, bzw Einstellung von .ini-Dateien sofort ändern kann. Weiters wird z.Zt. noch gearbeitet alle Kennfelder als 12x12 große Felder zu erweitern!

Features (Version 0.8) sind:»natürlich Benzin-Einspritzung

Page 16: I próba z PDF

»Zündsiganl für 1,2,4,6 und 8Zylinder-Motoren»Temperaturabhängige Veränderung der Vorzündung»Eingang für Klopfsensorsignal»Wasser/Alkohol-Einspritzung wird ab gewissen Bedingungen von CLT, IAT und MAP zu/abgeschaltet.»Zusätliche Eingänge für Temperatursensoren und Benzindrucksensor»2 zusätzliche selbst konfigurierbare Ausgänge (Ventilator...)»Zusätzlicher Eingang einer 2.Lambda-Sonde die die Injector bank2 ansteuert UND regelt.»Drehzahlbegrenzer mit Benzin und/oder Zündrücknahme»Drehzahlbegrenzer um bei durchgetretenem Gaspedal schalten zu können

Hier einige Installationshinweise die aus der englischen Anleitung (noch) nicht hervorgehen:

»Den aktuellen Code, MT-Version und alle notwendigen .ini-Dateien kann man auf Phil Ringwoods Website herunterladen: http://www.replica-cobra.co.uk/ .Wähle den Knopf "MS CODE" ganz unten (links).

»Wie man einen Code in MS 'hineinbring' steht weiter oben, ebenso wie du deine eigenen .inc-Files generierst bzw hier einbindest.

»In der *code*.zip-Datei ist eine Hilfe 'help.txt'.

»Es macht Sinn jedes Update des Codes bzw deiner alten Codes als eigenes Project zu starten - kennst du vielleicht schon von MegaDoctor. Das hat den Vorteil, dass man mit einer neuen MT-Version auch die anderen alten .msq-Files lesen/bearbeiten kann. Das ist nur möglich wenn man neben dem bekannten Standardordner 'car1' für die persönlichen Einstellungen von MT einen beliebigen anderen Ordner einfügt und noch zusätzlich einen Unterordner 'mtCfg', also ganz gleich wie beim 'car1'-Ordnersystem.

»Es müssen auch die gleichen Dateien wie im 'car1'-Ordner sein, nicht aber die selben! Das sind 'settings.ini' und 'megatune.cfg'. Diese befinden sich im *MT*.zip-File. Ob du deine eigene custom.ini brauchst hängt von deinem Bedarf ab.

»megatune.ini muß im Ordnersytem wo 'megatune.exe' abgelegt ist überschreiben werden. Du erkennst diesen 'mtCfg'-Ordner daran dass dort alle .inc-Daten schon drinnen sind, wahrscheinlich hast du diese schon durch deine eignen ersetzt. Auf jeden Fall muß noch die .ini-Datei des gewünschten codes (EnhancedV*.ini) aus dem *MT*.zip-File extrahiert werden.

»Bei jedem Start von MT kannst du nun dein gewünschtes Projekt auswählen.

»Wenn du MT2.25b228 mit dem MSNEnhanced Code ab 0.8 das erste Mal startest und dein Motor nur einen oder 2 Zylinder hat, dann mußt du im Menü "Fuel" 'Engine cylinder setup' wählen und dort auf '<=2' wechseln.

Page 17: I próba z PDF

Damit diese Änderung wirksam wird muß das MS-Board neu gestartet werden (=aus- und wieder einschalten). Dann kannst du all deine weiteren Daten eingeben. Leider sind die .msq -Files nicht immer auf- und abwärtskompatibel, die .vex-Files füre die kennfelder schon. Ich habe einfach von den alten Einstellungs-Menüs Screenshots ('Druck'-Taste auf der Tastatur) und in einem Bildbearbeitungsprogramm als Bilder abgespeichert, kann man auch direkt in ein Word-Dokument einfügen und so sammeln.

Das klingt jetzt sicher sehr kompliziert, war es für mich am Anfang auch. :) Zahlt sich aber aus. Vielleicht wird das in Zukunft bedienerfreundlicher. Sollte ich was vergessen haben oder ein Fehler unterlaufen sein, bitte melden.

MSnS: Tunen des Zündkennfeldes:

So da hat man die Möglichkeit endlich ein Zündkennfeld selbst erstellen zu können - aber echte Freude kommt auch nicht auf, denn welches ist nun das beste Zündkennfeld, zumindest fast das beste?

Das Ziel ist es dass der Schwerpunkt im p-v-Diagramm möglichst weit nach OT zu bekommen, bzw die Fläche selbst ein Maximum wird - dann ist das Drehmoment ein Maximum. Verinfacht bedeutet das dass das Zylinderdruckmaximum bei gewöhnlicher Motorgeometrie 15-18°nOT liegen soll.Zündet man zu spät liegt es zwar weiter 'rechts', der Wert ist aber kleiner, bei zu großer Vorzündung verbrennt schon ein Gutteil des Treibstoffs ohne etwas Sinnvolles geleistet zu haben, der Motor wird thermisch höher belastet.

Leider gibt es kein universell passendes Zündkennfeld, denn mehrere Parameter verlangen mehr oder weniger Vorzündung: Langhuber, dachförmige Brennräume, 2Ventiler (asysm. Zündkerzenlage) verlangen tendenziell nach mehr Vorzündung, neigen aber auch zum Klopfen, d.h. Klopfen ist sowieso eine einzuhaltende Grenze. Moderne Motoren weisen diese Merkmale nicht auf, kommen also mit weniger Frühzündung aus. Und dann gibt es noch die Betriebszustände: Drehzahl braucht bei Zunahme mehr, Lastzustand und Lambda bei Zunahme weniger Vorzündung.Nicht zuletzt beeinflusst der Zündzeitpunkt auch die Abgaszusammensetzung.

Ohne Leistungsprüfstand tut man sich wirklich schwer all diese theoretischen Weisheiten richtig auszuwerten.

Einen Anhalt bietet die Software eines anderen Aftermarket Controllers. Haltech bietet einen einfachen Zündkennfeldrechner der Aufgrund einiger Parameter ein Kennfeld erstellt. Sicher kein Optimum, aber besser als nichts.

Zündkennfeld erstellen:

Page 18: I próba z PDF

» Lade dir die MS DOS Konfigurations-Software E6Kv63 (156kB) herunter und extrahiere sie in einem Ordner deiner Wahl.» Die Hilfedatei ist ungleich größer: e6kv9man.pdf (1.85MB)» Auf Seite 53 im Kapitel "5.4 Loading an Ignition Library Map" findet sich eine Einführung, bzw Beschreibung.» Geh auf http://www.megasquirt.info/ms2/tune.htm#spark , lies den zündungsrelevanten teil und bekomme ein Gefühl auf was es ankommt.» Öffne E6Kv634.exe und bestätige mit <N> den offline modus. » Drücke Alt+S (Setup) und Ctrl+M (Main Setup) » Für eine Grundeinstellung des Zündkennfeldes soll man sich einen dem Motor 'passenden' MAP-Sensor (1, 2 oder 3bar) und einen Drehzahlbereich (10500 oder 16000) wählen. Je weniger möglich ist, desto besser.» Verlasse dieses Menü indem du Alt+O (Options) und dann Ctrl+O (Output Options) drückst. » Wähle auf der linken Seite Target Idle speed und tippe deine Leerlaufdrehzahl ein. » Bewege den Cursor eine Zeile hinauf um die Leerlaufkontrolle einzuschalten ENABLE, Änderung mit der Tabulator-Taste. » Verlasse dieses Menü mit Alt+M (Maps) und Q (Ignition QuickMap Map). » Ein Fesnster sollte sich öffnen: "Enter the MAP Name you wish to create:" Jetzt kommt man zum eigentlichen Kennfeld = Code:

» Die ersten beiden Zahlen geben die Leerlaufvorzündung an. Das Beispiel sagt 15°, 08° sind aber auch möglich. » Das dritte Zeichen (Buchstabe) entspricht der Drehzahl bei der die maximale Vorzündung erreicht werden soll. Option A bedeutet max. Vorzündung bei 1500U/min, Option B bei 2000U/min, Option C bei 2500U/min usw. bis J bei 6000U/min. » Die Stellen vier und fünf geben als Zahl die maximale Vorzündung an die der Motor haben soll wenn im Ansaugohr Umgebungsluftdruck herrscht (Vollgas bei Saugern). Beim Cruisen (Teillast) wird mehr Vorzündung dazuaddiert, während bei höherem Druck (Aufladung) die Vorzündung davon wieder zurückgenommen wird.» Das sechste Zeichen (Buchstabe) gibt die die extra dazuaddierte zusätzliche Vorzündung bei Teillast an. Dies entspricht der Unterdruckverstellung bei herkömmlichen Verteiler. Bei A wird keine weiter Vorzündung zugelassen, jeder weitere Buchstabe entspricht 3° bis H (21°).» Falls es sich um einen aufgeladenen Motor handelt, geben die Stellen sieben und acht (also wieder eine Zahlenangabe) die Verminderung der Vorzündung bei Überdruck an. Dieser Wert wird von der Umgebungsluftdruckvorzündung (Stelle 5) abgezogen. Bei Saugmotoren bleiben diese Stellen frei, der Code endet also nach der 6. Stelle.

» Wenn du zufrieden bist, drücke <Y>, das Kennfeld wird 'geladen'. » Wähle wieder Alt+M aber Ctrl+I (Ignition Map). » Drücke Enter oder wähle eine Drehzahl. » Jetzt kann man sehen dass jeder Balken BAR einem kPA-Wert entspricht -aber aufgepasst: 0 ist hier der Umgebungsluftdruck! Bei MS entspricht das dem MAP von etwa 90 bis 100kPa (hängt von deiner Seehöhe ab)! » Um das ganze Kennfeld zu sehen drücke Alt+N (Numerical table). » Die riesig große Tabelle ist ähnlich jener von MS, aber um 90° im Uhrzeigersinn gedreht. Die Drehzahl erstreckt sich entweder: 0, 500, 1000,

Page 19: I próba z PDF

1500...9500, 10000, 10500 (10500rpm Mode im Main Setup) oder 0, 1000, 2000...16000 (16000rpm Mode). » Die Spalten sind von 1 bis 32 (BAR = Balken, Postion) numeriert. Für den 1 bar MAP-Sensor ist BAR1 der größte Unterdruck -100kPa, BAR2=-99.69kPa, BAR3=-99.38kPa... BAR31=-0.31Pa, BAR32=0kPa.2 (und 3) bar MAP-Sensoren haben größere Schrittweiten und 0 ist zwischen -100 and 200 (300)kPa. Das ist etwas kompliziert wenn man die MS-Nomenklatur gewohnt ist. » Wenn du das das erste Mal gemacht hast, gehe zurück mit Alt+M und Ctrl+I und kontrolliere einige Drehzahlen. Es kann sein dass etwas nicht gleich so funktioniert hat wie du es eigentlich wolltest. :)» Leider ist das Speicherformat *.6xm weder mit Excel noch mit Notepad editierbar. --> Drücke 'Drucken' und füge die Zwischenablage in ein einfaches Grafikprogramm (mit Alt+Tab wieder zu Windows) ein oder drucke es direkt auf Papier aus.» Wenn alles passend ausschaut, übertrage die Werte mit MT in MS. Wenn du bei den Drehzahlen nicht 500 als Schrittweite gewählt hast, mußt du ev noch etwas interpolieren, die kPa-Skalierung ist sicher fein genug dass der nächstbeste Wert passt.

Die komfortablere Konfigurationssoftware von HallTech Windows Hallwin hat diese IgnitionQuickMap-Funktion nicht (mehr) enthalten.

Ionenstrommessung:

Es gibt schon eine Möglichkeit den Punkt des maximalen Druckes im Zylinder abzuschätzen. Diese Wundertechnik nennt sich Ionenstrommessung und wurde von SAAB schon Ende der 80er bis Mitte der 90er Jahre verwendet. Der aktuelle 10Zylinder-Benziner von BMW z.B. hat auch Ionenstrommessung.Dabei wird - wenn die Zündentladung vorbei ist - über den Zündkerzenspalt eine Spannung von etwa 400V angelegt. Der gemessene Strom entspricht dem Ionenstrom der über einen Algorithmus Rückschlüsse auf den Verbrennungsverlauf zulässt. Dazu braucht man aber eine CDI (HKZ), da der Zündfunken möglichst kurz sein soll - dann kann man früh mit dem Ionenstrommessen beginnen und kommt zu besseren Daten.Wenn ich also die DIY-CDI (von Silicon Chip) genaut habe, geht es mit Ionenstrommessung weiter. Mehr dazu im HiTech-Subforumvon msefi.com, suche mit ISP (oder ion sesnsing), steht für IonSensingProject.

Klopfgrenze, Klopfdetector:

Wie jeder weiß ist die Klopfgrenze eine natürliche Grenze die (bei gewünschter anhaltender Lebensdauer des Motors) eingehalten werden sol. Leider hört man Klopfen bei hohen Drehzahlen erst im fortgeschrittenen Stadium. Deshalb habe ich mir einen DIY-Klopfdetector basierend auf einem LM386 mit Piezoscheiben als Signalaufnehmer gebastelt. Die Schaltung basiert auf einem Artikel von AutoSpeed . Der Artikel sagt dass Klopfen zwar schwer für 'dumme' Algorithmen auszumachen sei, nicht aber

Page 20: I próba z PDF

für das menschliche Gehör, das Signal ließe sich leicht vom restlichen Motorlärm unterscheiden. Ich habe die Schaltung ausspioniert und mit Hilfe von 2 2CV-Tüftlern fertiggestellt, bzw für meine Zwecke angepasst. Das Datenblatt des LM386zeigt einige Schaltungsvorschläge. Ich verwende die Schaltung (Datenblatt Seite 5) für 20-fache Verstärkung, bzw gönne mir den Luxus von 2 Kanälen - ein Ohr, ein Kanal, ein Zylinder! 'Leider' höre ich bei meinem Motor auch mit 91 Oktan kein Klopfen, werde demnächst einen Test mit einem klopffreudigen 2CV4 machen. Dann kommen Soundkartenaufnahmebilder, aber auch der genaue Schaltplan bzw Bilder der Schaltung.Hatte den Detector auch bei einem 2CV-Clubabend mit - auch Techniklaien waren dann doch begeistert was man damit alles hören kann. Zündkerzen, Lagergeräusche, Lichtmaschine, besonders die Ventile. Einer hat sich das Kastl gleich ausgeborgt um einem Knacken am Fahrwerk (BX) auf die Schliche zu kommen.

Wenn du eine Anregung, eine Bemerkung oder einen Vorschlag zu diesen Seiten hast, wende dich bitte an das

"MegaSquirt-de"-Team. Kontaktadresse auf MegaSquirt-de

Page 21: I próba z PDF

Programmierer-Tips

Diese einfache Einführung in die OBD2-Kommunikation soll Programmierern eigener

Anwendungsprogramme zur Kfz-Diagnose lediglich einen ersten Überblick verschaffen. Auch für Nicht-Programmierer können die folgenden Internas interessant sein. Die Informationen

erfolgen nach bestem Wissen ohne Gewähr für Richtigkeit oder Verwendbarkeit. Sie sind copyright-geschützt und nur zum Privat-Gebrauch. Zur ernsthaften Programm-Erstellung ist die

Anwendung der entsprechenden Normen (siehe hier) und evtl. auch der Hersteller-spezifischen Zusatz-Dokumentationen unumgänglich.

Wie alle modernen Kommunikationsverfahren basiert auch OBD2 auf dem 7-schichtigen OSI-

Referenzmodell. Die oberste Schicht 7 (auch Layer genannt) repräsentiert die Anwendungsebene wie sie z.B. in den Normen SAE J1979 und J2190 festgelegt ist, die untersten

Layer 1 (Physical) und 2 (Data Link) repräsentieren die Hardware. Die dazwischen liegenden Layer 3 (Network) und 5 (Session) sind in ISO 15765-2 und ISO 15765-4 beschrieben. Von

Interesse bei gegebener Hardware ist Layer 7.

Die Kommunikation zwischen dem oder den Steuergerät(en) des Fahrzeugs (Server) und dem

angeschlossenen Tester (Client) erfolgt als Frage- und Antwortspiel. Frage und Antwort bestehen aus Datenpacketen mit Header-Bytes, Daten-Bytes und abschließendem

Checksummen-Byte. Die eigentlichen Daten können 1 bis 7 und 63 oder 255 Byte umfassen, abhängig vom verwendeten Standard. Der Datenbus wurde vorrangig für die Kommunikation

zwischen verschiedenen Steuergeräten (Knoten, Nodes) im Fahrzeug entwickelt, um die Verkabelung zwischen diesen Knoten (Motor-Kontroller, Getriebe-Kontroller, ABS-Kontroller,

Komfort-Kontroller usw. usw.) kostengünstig gestalten zu können. Der evtl. angeschlossene Tester ist nur ein weiterer Knoten. Die Header-Bytes (1 bis 4 Bytes je nach Standard, bei CAN 11 oder 29 Bit) können u.a. bitcodierde Informationen über die Adressierung (Ziel und Quelle),

Adressierungsart (funktional oder physisch), Länge der folgenden Datenbytes und Priorität des Datenpackets enthalten. Bei ISO9141 erfolgt die Adressierung bereits während der

Initialisierung. Speziell für Tester entwickelte Chips wie die ELM-Chips übernehmen die Aufgabe, die Header und Checksumme zu interpretieren oder zu erzeugen, so daß sich der Programmierer

eines Diagnose-Programms nur um das Datenfeld zu kümmern braucht. Auch die Initialisierung übernehmen diese Chips ebenso selbsttätig wie die Verwendung der richtigen Baudrate.

Im Allgemeinen verwendet OBD2/EOBD eine funktionale Adressierung, das heißt, die

tatsächlichen Adressen des jeweiligen Steuergerätes müssen nicht (und können meist auch nicht) bekannt sein. Die im Folgenden beispielhaft gezeigten Funktionen (Mode, PID) werden

von jedem OBD2/EOBD-fähigen Steuergerät verstanden. Es lassen sich somit universale Diagnosegeräte verwenden. Im Unterschied dazu gibt es die absolute Adressierung, wenn das

Steuergerät und dazu die absoluten Speicheradressen bekannt sind. Herstellerspezifische Diagnosegeräte können daher oftmals eine absolute Adressierung verwenden.

Die Normen haben den Nodes folgende Bereiche hexadezimaler Adressen zugeordnet:

Hex-Adr. Bezeichnung10-17 Motor-Steuergeräte18-1F Getriebe-Steuergeräte20-27 Hersteller-spezifische Erweiterung für Fahrwerk28-2F Bremsen-Steuergeräte30-37 Lenkungs-Steuergeräte38-3F Federungs-Steueräte40-57 Hersteller-spezifische Erweiterung für Karosserie58-5F Gurtanschnall-Systeme60-6F Fahrer-Informationssysteme70-7F Beleuchtung80-8F Unterhaltung/Audio

90-97 Persönliche Kommunikation

98-9F Klima-Automatik

0A-BF Komfort (Türen, Sitze, Fenster etc.)

C0-C7 Sicherheits-Systeme

Program

Nowa sekcja 1 Strona 1

Page 22: I próba z PDF

C0-C7 Sicherheits-SystemeC8 Zubehör-Anschluß-DiensteC9 WechselspannungswandlerCA Wechsel-/GleichspannungswandlerCB Energiespeicher-ManagementCC-CF reserviert für künftige ErweiterungenD0-EF reserviert für Hersteller-spezifische AufgabenF0-FD externe Tester / Diagnose-GeräteDamit sind - wie bei fast allen Festlegungen in den Normen - auch zukunftsweisende

Anwendungen berücksichtigt worden. Auch Fahrzeuge, die es heute noch gar nicht gibt, können also abgedeckt werden.

Die Standards haben zur Diagnose mit OBD2 eine genormte Adressierung festgelegt, die

einheitlich für die verwendeten Protokolle gilt. Die Funktionen sind in Funktionsgruppen ( genannt Mode) klassifiziert und innerhalb dieser Modes bezeichnet eine Parameter-

Identifikation (kurz PID) eine bestimmte Funktion. Einige Modes besitzen jedoch keine PIDs, andere sog. TIDs (Test-Identifikationen). Die Normen kennen folgende Modes, die ebenfalls in

hexadezimaler Schreibweise bezeichnet sind:

Mode Bezeichnung der Abfrage

01 Aktuelle Daten02 Freeze Frame Daten03 Diagnose Fehlercodes04 Löschung Fehlercodes u. gespeicherter Werte05 Testergebnisse, z.B. Lambdasonde06 Testergebnisse nicht kontinuierlich überwachter Systeme07 Testergebnisse kontinuierlich überwachter Systeme08 besonderer Kontrollmodus09 Fahrzeug-Informationen, z.B. VINDarüber hinaus definiert SAE J2190 weitere Diagnose-Test-Modes im Bereich von Hex 10 bis

Hex 7F. Der Bereich 80 - FF ist reserviert für zukünftige Erweiterungen und Hersteller-spezifische Verwendung. Der in der SAE J2190 spezifizierte erweiterte (enhanced) Diagnose-

Umfang umfaßt auch nicht-abgasrelevante Bereiche der Kfz-Elektronik. Das hierzulande oft gehörte Statement, OBD2/EOBD betreffe nur die Emissionsüberwachung ist unzutreffend.

Mode Bezeichnung der Abfrage10 Initiierung der Diagnose-Funktion

11 Modul Reset

12 Freeze Frame Daten

13 Diagnose Fehlercodes

14 Löschung Fehlercodes

17 Abfrage Status der Fehlercodes

18 Abfrage Fehlercodes nach Status

20 Rückkehr in Normalbetrieb des Moduls

21 Diagnosedaten nach Offset-Adresse

22 Diagnosedaten nach PID-Adresse23 Diagnosedaten nach Speicher-Adresse24 Abfrage Skalierung und Offset oder PID25 Datenübertragung Stop26 Einstellung Datenübertragung27 Geschützter Zugriff28 Abschaltung normaler Nachrichtenübertragung29 Einschaltung normaler Nachrichtenübertragung2A Abfrage Diagnose-Datenpackete2B Definition Datenpackete nach Offset2C Definition Datenpackete2F Ein-/Ausgangkontrolle nach PID30 Ein-/Ausgangkontrolle nach Datenwert ID31 Start Diagnoseroutine nach Testnummer32 Stop Diagnoseroutine nach Testnummer33 Diagnoseroutine Ergebnisse nach Testnummer34 Anforderung Download

35 Anforderung Upload

36 Datenübertragung

37 Stop Datenübertragung

38 Start Diagnoseroutine nach Adresse

39 Stop Diagnoseroutine nach Adresse

3A Diagnoseroutine Ergebnisse nach Adresse

Nowa sekcja 1 Strona 2

Page 23: I próba z PDF

3A Diagnoseroutine Ergebnisse nach Adresse3B Datenblock schreiben3C Datenblock lesen3F Tester angeschlossenÜblicherweise bieten nur höherwertige Diagnosesysteme wie Vehikel-Erkunder oder AMX diese

erweiterten Modes und deren Funktionen.

Nach dem Initialisierungsprozeß, der bei ISO/KWP, CAN, PWM und VPW unterschiedlich abläuft,

sendet der angeschlossene Tester üblicherweise eine Frage und wartet auf die Antwort. Die Initialisierung kann im übrigen auch beinhalten, daß die an den Datenbus angeschlossenen

Steuergeräte (Nodes) um Ruhe gebeten werden, um den Datenbus für den Datenverkehr mit dem angeschlosenen Tester möglichst freizuhalten. Die abgesandte Frage des Testers besteht

aus einem Mode-Teil und einem PID- oder TID-Teil. An dieser Stelle kann nur ein Auszug der möglichen PIDs und TIDs wieder gegeben werden. Da nicht alle PIDs von jedem Steuergerät

unterstützt werden, ist PID hexadezimal 00 immer reserviert für die Abfrage der möglichen PIDs je Mode. Ebenso werden nicht alle Modes immer von jedem Steuergerät unterstützt. Für Mode 01 und 02 sind also die möglichen PIDs:

PID Bezeichnung Min Max Umrechnung

00 unterstützte PIDs, Bereich 01 - 20 Bit-codiert

01 MIL-Status, Anzahl Fehlercodes, Überwachungsstatus 4 Bytes, Bit -codiert

02 Fehlercode, der Freeze Frame Daten gesetzt hat 2 Byte03 Status Einspritzsystem 2 Bytes, Bit-codiert offener, geschlossener Loop etc.04 berechneter Lastwert 0 % 100 % 100/255 %05 Motor-Kühlwassertemperatur -40 °C +215 °C 1 °C mit -40 °C Offset06 Kurzzeit Einspritztrimm Bank 1 -100 % (mager) +99,22 % (fett) 100/128

%07 Langzeit Einspritztrimm Bank 1 -100 % (mager) +99,22 % (fett)

100/128 %08 Kurzzeit Einspritztrimm Bank 2 -100 % (mager) +99,22 % (fett) 100/128

%09 Langzeit Einspritztrimm Bank 2 -100 % (mager) +99,22 % (fett)

100/128 %0A Kraftstoffdruck 0 kPa 765 kPa 3 kPa pro Bit0B Absolutdruck Einlaßkanal 0 kPa (absolut) 255 kPa (absolut) 1 kPa pro Bit0C Motor-Umdrehungen 0 min-1 16383,75 min-1 0,25 U/min pro Bit0D Geschwindigkeit 0 km/h 255 km/h 1 km/h pro Bit

0E Zündvoreilung -64 ° 63,5 ° 0,5 ° mit 0 ° bei 128

0F Einlaß-Lufttemperatur -40 °C +215 °C 1 °C mit -40 °C Offset

10 Luftdurchfluß 0 g/s 655,35 g/s 0,01 g/s

11 Absolute Drosselklappenstellung 0 % 100 % 100/255 %

12 Zusatzluftstatus Bit-codiert

13 Einbauort Lambdasonden Bit-codiert

14 Ausgangsspannung Lambdasonde Bank 1, Sensor 1 0 V 1,275 V 0,005 V

Kurzzeit Einspritztrimm Bank 1, Sensor 1 -100 % (mager) +99,22 % (fett)

100/128 %15 Ausgangsspannung Lambdasonde Bank 1, Sensor 2 0 V 1,275 V 0,005 VKurzzeit Einspritztrimm Bank 1, Sensor 2 -100 % (mager) +99,22 % (fett)

100/128 %16 Ausgangsspannung Lambdasonde Bank 1, Sensor 3 0 V 1,275 V 0,005 VKurzzeit Einspritztrimm Bank 1, Sensor 3 -100 % (mager) +99,22 % (fett)

100/128 %17 Ausgangsspannung Lambdasonde Bank 1, Sensor 4 0 V 1,275 V 0,005 VKurzzeit Einspritztrimm Bank 1, Sensor 4 -100 % (mager) +99,22 % (fett)

100/128 %18 Ausgangsspannung Lambdasonde Bank 2, Sensor 1 0 V 1,275 V 0,005 VKurzzeit Einspritztrimm Bank 2, Sensor 1 -100 % (mager) +99,22 % (fett)

100/128 %19 Ausgangsspannung Lambdasonde Bank 2, Sensor 2 0 V 1,275 V 0,005 VKurzzeit Einspritztrimm Bank 2, Sensor 2 -100 % (mager) +99,22 % (fett)

100/128 %1A Ausgangsspannung Lambdasonde Bank 2, Sensor 3 0 V 1,275 V 0,005 V

Kurzzeit Einspritztrimm Bank 2, Sensor 3 -100 % (mager) +99,22 % (fett)

100/128 %1B Ausgangsspannung Lambdasonde Bank 2, Sensor 4 0 V 1,275 V 0,005 V

Kurzzeit Einspritztrimm Bank 2, Sensor 4 -100 % (mager) +99,22 % (fett)

100/128 %1C OBD Kompatibilität 1 Byte, Hexwert: 04=OBD1, 01=OBD2(CARB), 06=EOBD, 05

Nowa sekcja 1 Strona 3

Page 24: I próba z PDF

1C OBD Kompatibilität 1 Byte, Hexwert: 04=OBD1, 01=OBD2(CARB), 06=EOBD, 05

=kein OBD etc.1D Einbauorte Lambdasonden Bit-codiert, nur wenn PID 13 nicht vorhanden1E Status HilfseingangPower Take Off (PTO) Status Bit-codiert1F Zeit seit Motorstart 0 Sek. 65.535 Sek. 2 Byte, 1 Sek./Bit20 unterstützte PIDs, Bereich 21 - 40 Bit-codiert21 Fahrtstrecke seit MIL gesetzt 0 km 65.535 km 2 Byte, 1 km/Bit22 Kraftstoffdruck relativ zu Einlaßvakuum 0 kPa 5177,27 kPa 0,079 kPa pro

Bit23 Kraftstoffdruck 0 kPa 655.350 kPa 10 kPa pro Bit, nur PID 0A, 22 oder 23

erlaubt24 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 1 0 1,999 0,0000305

Ausgangsspannung 0 V 7,999 V 0,000122 V

25 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 2 0 1,999 0,0000305

Ausgangsspannung 0 V 7,999 V 0,000122 V

26 Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 1 0 1,999 0,0000305

Ausgangsspannung 0 V 7,999 V 0,000122 V

27 Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 2 0 1,999 0,0000305

Ausgangsspannung 0 V 7,999 V 0,000122 V

28 Äquivalenz-Verhältnis Lambdasonde Bank 3, Sensor 1 0 1,999 0,0000305

Ausgangsspannung 0 V 7,999 V 0,000122 V29 Äquivalenz-Verhältnis Lambdasonde Bank 3, Sensor 2 0 1,999 0,0000305Ausgangsspannung 0 V 7,999 V 0,000122 V2A Äquivalenz-Verhältnis Lambdasonde Bank 4, Sensor 1 0 1,999 0,0000305Ausgangsspannung 0 V 7,999 V 0,000122 V2B Äquivalenz-Verhältnis Lambdasonde Bank 4, Sensor 2 0 1,999 0,0000305Ausgangsspannung 0 V 7,999 V 0,000122 V2C Anforderung Abgasrückführsystem 0 % (kein Durchfluß) 100 % (max.

Durchfluß) 100/255 %2D Verhältnis angeforderte zu aktuelle Abgasrückführung -100 % (weniger als

angefordert) +99,22 % (mehr als angefordert) 100/128 % (0 % bei 128)2E Anforderung Entgasungsmenge 0 % (kein Fluß) 100% (max. Fluß)

100/255 %2F Kraftstofftank-Inhalt 0 % (leer) 100 % (voll) 100/255 %30 Anzahl Warmlaufzyklen seit Fehlercode-Löschung 0 255 1 Zyklus je

Zähler31 Distanz seit Fehlercode-Löschung 0 km 65.535 km 1 km je Zähler

32 Entgasungsdampfdruck -8192 Pa +8192 Pa 0,25 Pa pro Bit

33 barometrischer Druck 0 kPa (absolute) 255 kPa (absolut) 1 kPa pro Bit

34 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 1 0 1,999 0,0000305

Ausgangsstrom (PID 34 nur, wenn PID 13 unterstützt) -128 mA 127,996 mA

0,00390625 mA35 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 2 0 1,999 0,0000305

Ausgangsstrom (PID 35 nur, wenn PID 13 unterstützt) -128 mA 127,996 mA

0,00390625 mA36 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 3 0 1,999 0,0000305Ausgangsstrom (PID 36 nur, wenn PID 13 unterstützt) -128 mA 127,996 mA

0,00390625 mA37 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 4 0 1,999 0,0000305Ausgangsstrom (PID 37 nur, wenn PID 13 unterstützt) -128 mA 127,996 mA

0,00390625 mA38 Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 1 0 1,999 0,0000305Ausgangsstrom (PID 38 nur, wenn PID 13 unterstützt) -128 mA 127,996 mA

0,00390625 mA39 Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 2 0 1,999 0,0000305Ausgangsstrom (PID 39 nur, wenn PID 13 unterstützt) -128 mA 127,996 mA

0,00390625 mA3A Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 3 0 1,999 0,0000305Ausgangsstrom (PID 3A nur, wenn PID 13 unterstützt) -128 mA 127,996 mA

0,00390625 mA3B Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 4 0 1,999 0,0000305Ausgangsstrom (PID 3B nur, wenn PID 13 unterstützt) -128 mA 127,996 mA

0,00390625 mA3C Kat-Substrat Temperatur Bank 1, Sensor 1 -40 °C +6513,5 °C 0,1 °C/Bit

mit -40 °C Offset3D Kat-Substrat Temperatur Bank 1, Sensor 2 -40 °C +6513,5 °C 0,1 °C/Bit

mit -40 °C Offset

Nowa sekcja 1 Strona 4

Page 25: I próba z PDF

mit -40 °C Offset3E Kat-Substrat Temperatur Bank 2, Sensor 1 -40 °C +6513,5 °C 0,1 °C/Bit

mit -40 °C Offset3F Kat-Substrat Temperatur Bank 2, Sensor 2 -40 °C +6513,5 °C 0,1 °C/Bit

mit -40 °C Offset40 unterstützte PIDs, Bereich größer 40 Bit-codiert41 Überwachungsstatus Fahrzyklus Bit-codiert für kontinuierliche u. nicht-kontin.

Überwachungen42 Eingangsspannung Steuergerät 0 V 65,535 V 0,001 V pro Bit43 absoluter Lastwert 0 % 25700 % 100/255 %44 angefordertes Äquivalenz-Verhältnis 0 1,999 0,000030545 relative Drosselklappenstellung 0 % 100 % 100/255 %

46 Umgebungstemperatur -40 °C +215 °C 1 °C mit -40 °C Offset

47 absolute Drosselklappenstellung B 0 % 100 % 100/255 %

48 absolute Drosselklappenstellung C 0 % 100 % 100/255 %

49 Gaspedalstellung D 0 % 100 % 100/255 %

4A Gaspedalstellung E 0 % 100 % 100/255 %

4B Gaspedalstellung F 0 % 100 % 100/255 %

4C angeforderte Drosselklappen-Stellkontrolle 0 % (geschlossen) 100 % (weit

offen) 100/255 %4D Motorbetrieb seit Entritt Fehlercode 0 Minuten 65535 Minuten 1 Minute

pro Zähler4E Zeit seit Fehlercode-Löschung 0 Minuten 65535 Minuten 1 Minute pro

Zähler4F bis FF reserviert für ErweiterungenWeitere Tabellen hier aufzulisten oder auch weitere Erklärungen zu o.g. PIDs würde den

Rahmen hier sprengen. Nur soviel noch, da die angezeigten Werte oft Mißverständnis hervorrufen:Der berechnete Lastwerte (PID 04) ist eine fiktive, berechnete Größe, die absolut nichts mit der

tatsächlichen aktuellen Leistung eines Motors zu tun hat. Das Motorsteuergerät berechnet sie aus:aktueller Luftdurchfluß geteilt durch maximaler Luftdurchfluß bei weit geöffneter Drosselklappe

bei Standard Temperatur und Druck mal barometrischer Druck geteilt durch 29,92 mal Quadratwurzel aus 298 geteilt durch Umgebungslufttemperatur plus 273.Nicht alle Modes haben jedoch derart viele PIDs. Mode 03 gibt die gespeicherten Fehlercodes

(siehe hier) mit 3 Codes je Antwort zurück. Die Dekodierung zeigt das Beispiel:0 0 0 0 0 0 0 1 0 1 0 0 0 0

1 1P 0 1 4 3

Das Programm eines angeschlossenen Testers fragt sinnvollerweise zuerst mit Mode 01 und PID

01 die Anzahl der evtl. vorhandenen Fehlercodes ab und erhält als Antwort im Datenfeld eine Bytefolge zurück beginnend mit 41 (Mode-Antwort zu 01), dann 01 (PID) und darauf die 4

Daten-Bytes, aus denen dann die Anzahl zu dekodieren ist. Dieses Antwortschema ist übrigens immer gleich, d.h. bei einer Abfrage von z.B. Mode 07 wird 47 zurückgegeben mit den dann

folgenden Daten. Ist die Anzahl gespeicherter Fehlercodes größer 0, kann das Programm dann die eigentlichen Fehlercodes mit Mode 03 abfragen. Mode 03 kennt keine PIDs. Eine Antwort

könnte sein: 43 01 43 01 96 02 34, also somit Fehlercodes P0143, P0196 und P0234.

Mode 04 (ohne weitere PID) löscht folgende Daten oder setzt sie zurück:

* Anzahl Fehlercodes (Mode 01 PID 01) * Fehlercodes (Mode 03) * Fehlercode für Freeze Frame Daten (Mode 02 PID 02) * Freeze Frame Daten (Mode 02) * Lambdasonden Testdaten (Mode 05) * Status der System-Überwachungstests (Mode 01 PID 01) * On-board Überwachungs-Testergebnisse (Modes 06 und 07) * Zurückgelegte Fahrtstrecke mit aktivierter MIL (Mode 01 PID 21) * Anzahl Warmlaufzyklen seit gelöschten Fehlercodes (Mode 01 PID 30)

* zurückgelegte Fahrtstrecke seit gelöschten Fehlercodes (Mode 01 PID 31)

* Motorbetrieb seit aktivierter MIL (Mode 01 PID 4D)

* Zeit seit gelöschten Fehlercodes (Mode 01 PID 4E)

Im Erfolgsfall wird 44 zurückgegeben, schlägt der Befehl fehl, wird 7F 04 22 zurückgegeben.

Letzteres kann z.B. erfolgen bei unzutreffenden Konditionen. Der Mode 04 Befehl soll bei Zündung ein und Motor aus gegeben werden. Ein Testerprogramm prüft also sinnvollerweise auf

den Rückgabewert und teilt dem Anwender mit, daß er gegebenenfalls Zündung ein und Motor

Nowa sekcja 1 Strona 5

Page 26: I próba z PDF

den Rückgabewert und teilt dem Anwender mit, daß er gegebenenfalls Zündung ein und Motor aus machen soll. Da bei Löschung mit Mode 04 auch andere Daten gelöscht werden, ist eine

vorherige Sicherheitsabfrage an den Anwender vorgeschrieben.

Wie anfangs ausgeführt, ist dies nur ein kleiner Einblick. Nicht alle Modes und alle PIDs werden

von einem Steuergerät unterstützt. Eine Diagnose-Software kann daher immer nur die Daten liefern, die ein Fahrzeug auch zur Verfügung stellt.

© 2001 - 2005 Copyright by Gerhard Müller, letzte Änderung am 05. April 2005

Nowa sekcja 1 Strona 6

Page 27: I próba z PDF

Nowa sekcja 1 Strona 7