Sie sind auf Seite 1von 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

anderen Platinenlayouts des Originals.

)

aber auch Hardware-Modifikation (für weitere Sensoren) bis zu

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 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

(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 Gimmicks.

) für div.

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.

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,

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

-40°C 45313Ohm

+130°C

+/- 1,5K

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ügung

R

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 / 255

U, Vref

wie oben

ADC

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 bzw

R

/ ( R + R_Bias ) = ADC / 255

Mit einigen Umformungen (Schule!) kann man den Widerstand explizit ausdrücken:

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

RmatGauge = Rmat, "R_CLT", "Ohm", 0, 10000, -1, -1, 10001, 10001, 2,

Var

Title

Units Lo Hi

LoD LoW HiW

HiD

vd ld

0

RcltGauge = Rclt, "R_CLT", "Ohm", 0, 10000, -1, -1, 10001, 10001, 2, 0 Und 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

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

(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.

- 0,0032 * p^2

+ 0,7191 * p

+ 53,078

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

zu verschiedenen Zeiten mit unterschiedlichem Hintergrundwissen eingebaut habe, und ein Ausbau nur umständlich möglich ist, zeigen nicht alle das gleiche an *grrrr*.

)

trauen kann. Da ich meine Sensoren

Veränderung des CLT-Temperaturbereiches MAT:

Wer nicht selber Assembler programmieren kann muß mit dem vorgegebenen Intervall

-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!

= { tempCvt(table(cltADC, "thermfactor.inc")-40) }

Wendet man einen/beide folgende Tricks an, kann man auf diesen verzichten.

coolant

Vergrößerung des angezeigten/datageloggten Temperaturbereiches Sorry 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 ohms

folgende 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 gleich

Damit 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.

;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:

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.

100°C, 102°C, 104°C

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. Mit

U = R x I

R_Bias_min = U_max / I_max = 5,0V / 0,05A = 100Ohm

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!

wird

also wäre man

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

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 man 1.) 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 ohms werden 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 ohms Wichtig 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) und 106,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, 0 und 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

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 nutzen Man 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.s19 Das wars. Es gibt auch zahlreiche Parameter-Möglichkeiten, so bedeutet etwa -c2 dass die COMM2-Schnittstelle angesprochen wird. Standarmäßig

ist das COMM1 und braucht nicht extra angegeben werden. So werden alle Parameter aufgelistet (Hilfe):

download -h

Es gelten die 'Gestze' aus alten MS-DOS Tagen,

müssen im selben Ordner sein, ansonsten nachlesen/erinnern wie das mit config.sys und autoexec.bat damals war.

d.h.

.bat .s19 und .exe Datei

"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

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.

0.9

zu optimieren. Der MS30

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 tps cmp #$B2 bhi SKIPO2 Statt 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 SKIPO2 lda kpa cmp #100T bhi SKIPO2 Diese 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!

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ß

Gp32.equ

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! Diese Datei muß immer dabei sein. Keine Ahnung was die

matfactor.inc airdenfactor.inc thermfactor.inc

macht/kann. Wertetabelle für MAT-Sensor Wertetabelle für MAT-Sensor Wertetabelle für CLT-Sensor

barofactor4115.inc

Wertetabelle für sehr alte MAP-Sensoren die nur bis 115kPa

barofactor4250.inc

verwendbar waren Wertetabelle für MAP-Sensor

kpafactor4115.inc

Wertetabelle für sehr alte MAP-Sensoren die nur bis 115kPa

kpafactor4250.inc

verwendbar waren Wertetabelle für MAT-Sensor

boot_r12.asm

Das ist der Code für den Boot-Loader

CASM08Z.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 M Diese 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

Lamda-Anzeige Da 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 ld lambdaVEGauge=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 = lambdaVEGauge Am 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:

;Name

;TPSdotGauge = TPSdot, "TPSdot", "V/s", 0, 16, 2, 4, 8, 15, 2, 0

Var

Title Units Lo Hi LoD LoW HiW HiD vd ld

Diese 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:

;

pageButtons = "&EGO", "&WUE", "PW&1", "Accel"

Page 3

Page 1

Page 2

Page 4

gauge1

= xxx,

xxx,

xxx,

tachometer

gauge2

= xxx,

xxx,

xxx,

throttleGauge

gauge3

= xxx,

xxx,

xxx,

egoGauge

gauge4

= xxx,

xxx,

xxx,

pulseWidth1Gauge

gauge5

= xxx,

xxx,

xxx,

TPSdotGauge

gauge6 = xxx,

xxx,

xxx,

accelEnrichGauge

Jetzt 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:

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

»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.

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:

» 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,

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

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.

BAR31=-0.31Pa, BAR32=0kPa.

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-Subforum von 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

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 LM386 zeigt 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

Program

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.

Bezeichnung

10-17

Motor-Steuergeräte

18-1F

Getriebe-Steuergeräte

20-27

Hersteller-spezifische Erweiterung für Fahrwerk

28-2F

Bremsen-Steuergeräte

30-37

Lenkungs-Steuergeräte

38-3F

Federungs-Steueräte

40-57

Hersteller-spezifische Erweiterung für Karosserie

58-5F

Gurtanschnall-Systeme

60-6F

Fahrer-Informationssysteme

70-7F

Beleuchtung

80-8F

Unterhaltung/Audio

90-97

Persönliche Kommunikation

98-9F

Klima-Automatik

0A-BF

Komfort (Türen, Sitze, Fenster etc.)

Nowa sekcja 1 Strona 1

C0-C7 Sicherheits-Systeme C8 Zubehör-Anschluß-Dienste C9 Wechselspannungswandler

CA Wechsel-/Gleichspannungswandler CB Energiespeicher-Management

CC-CF

reserviert für künftige Erweiterungen

D0-EF

reserviert für Hersteller-spezifische Aufgaben

F0-FD

externe Tester / Diagnose-Geräte

Damit 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 Daten

02

Freeze Frame Daten

03

Diagnose Fehlercodes

04

Löschung Fehlercodes u. gespeicherter Werte

05

Testergebnisse, z.B. Lambdasonde

06

Testergebnisse nicht kontinuierlich überwachter Systeme

07

Testergebnisse kontinuierlich überwachter Systeme

08

besonderer Kontrollmodus

09

Fahrzeug-Informationen, z.B. VIN

Darü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 Abfrage

10

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-Adresse

23

Diagnosedaten nach Speicher-Adresse

24

Abfrage Skalierung und Offset oder PID

25

Datenübertragung Stop

26

Einstellung Datenübertragung

27

Geschützter Zugriff

28

Abschaltung normaler Nachrichtenübertragung

29

Einschaltung normaler Nachrichtenübertragung

2A

Abfrage Diagnose-Datenpackete

2B

Definition Datenpackete nach Offset

2C

Definition Datenpackete

2F

Ein-/Ausgangkontrolle nach PID

30

Ein-/Ausgangkontrolle nach Datenwert ID

31

Start Diagnoseroutine nach Testnummer

32

Stop Diagnoseroutine nach Testnummer

33

Diagnoseroutine Ergebnisse nach Testnummer

34

Anforderung Download

35

Anforderung Upload

36

Datenübertragung

37

Stop Datenübertragung

38

Start Diagnoseroutine nach Adresse

39

Stop Diagnoseroutine nach Adresse

Nowa sekcja 1 Strona 2

3A Diagnoseroutine Ergebnisse nach Adresse 3B Datenblock schreiben 3C Datenblock lesen 3F 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 Byte

03

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 Offset

06

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

0B

Kraftstoffdruck

0 kPa

Absolutdruck Einlaßkanal

765 kPa 0 kPa (absolut)

3 kPa pro Bit 255 kPa (absolut)

1 kPa pro Bit

0C

Motor-Umdrehungen

0 min-1

16383,75 min-1

0,25 U/min pro Bit

0D

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 V

Kurzzeit 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 V

Kurzzeit 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 V

Kurzzeit 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 V

Kurzzeit 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 V

Kurzzeit 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/128 % 1B Ausgangsspannung Lambdasonde Bank 2, Sensor 4 0 V 1,275 V 0,005 V

Kurzzeit Einspritztrimm Bank 2, Sensor 4 100/128 %

-100 % (mager)

-100 % (mager)

+99,22 % (fett)

+99,22 % (fett)

Nowa sekcja 1 Strona 3

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 vorhanden

1E

Power Take Off (PTO) Status

Status Hilfseingang

Bit-codiert

1F

Zeit seit Motorstart 0 Sek.

65.535 Sek.

2 Byte, 1 Sek./Bit

 

20

unterstützte PIDs, Bereich 21 - 40 Bit-codiert

 

21

Fahrtstrecke seit MIL gesetzt 0 km

65.535 km

2 Byte, 1 km/Bit

22

Kraftstoffdruck relativ zu Einlaßvakuum

0 kPa

5177,27 kPa

0,079 kPa pro

Bit

23

Kraftstoffdruck

0 kPa

655.350 kPa

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

erlaubt

24

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

Ausgangsspannung

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

Ausgangsspannung

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

Ausgangsspannung

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

Ausgangsspannung

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

Ausgangsspannung

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

0 V

0 V

0 V

0 V

0 V

7,999 V

7,999 V

7,999 V

7,999 V

7,999 V

0,000122 V

0,000122 V

0,000122 V

0,000122 V

0,000122 V

Ausgangsspannung

0 V

7,999 V

0,000122 V

2A

Äquivalenz-Verhältnis Lambdasonde Bank 4, Sensor 1

0

1,999

0,0000305

Ausgangsspannung

0 V

7,999 V

0,000122 V

2B

Äquivalenz-Verhältnis Lambdasonde Bank 4, Sensor 2

0

1,999

0,0000305

Ausgangsspannung

0 V

7,999 V

0,000122 V

 

2C 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)

2E

100/255 %

+99,22 % (mehr als angefordert)

100/128 % (0 % bei 128)

100% (max. Fluß)

Anforderung Entgasungsmenge

0 % (kein Fluß)

2F

Kraftstofftank-Inhalt

0 % (leer)

100 % (voll)

100/255 %

 

30

Anzahl Warmlaufzyklen seit Fehlercode -Löschung 0 255 1 Zyklus je

Zähler

31

Distanz seit Fehlercode -Löschung 0 km

65.535 km

 

1 km je Zähler

32

Entgasungsdampfdruck

+8192 Pa

0,25 Pa pro Bit

 

33

barometrischer Druck

-8192 Pa 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 mA

 

35 Ä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 mA

 

36 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 3

0

1,999

0,0000305

Ausgangsstrom (PID 36 nur, wenn PID 13 unterstützt)

-128 mA

127,996 mA

0,00390625 mA

 

37 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 4

0

1,999

0,0000305

Ausgangsstrom (PID 37 nur, wenn PID 13 unterstützt)

-128 mA

127,996 mA

0,00390625 mA

 

38 Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 1

0

1,999

0,0000305

Ausgangsstrom (PID 38 nur, wenn PID 13 unterstützt)

-128 mA

127,996 mA

0,00390625 mA

 

39 Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 2

0

1,999

0,0000305

Ausgangsstrom (PID 39 nur, wenn PID 13 unterstützt)

-128 mA

127,996 mA

0,00390625 mA 3A Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 3

0

1,999

0,0000305

Ausgangsstrom (PID 3A nur, wenn PID 13 unterstützt)

-128 mA

127,996 mA

0,00390625 mA 3B Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 4

Ausgangsstrom (PID 3B nur, wenn PID 13 unterstützt) 0,00390625 mA

0

-128 mA

1,999

127,996 mA

0,0000305

3C

Kat-Substrat

Temperatur Bank

1, Sensor 1

-40 °C

+6513,5 °C

0,1 °C/Bit

mit -40 °C Offset

 

3D

Kat-Substrat Temperatur Bank 1, Sensor 2

-40 °C

+6513,5

°C

0,1 °C/Bit

Nowa sekcja 1 Strona 4

mit -40 °C Offset

3E

Kat-Substrat Temperatur Bank 2, Sensor 1

-40 °C

+6513,5 °C

0,1 °C/Bit

mit -40 °C Offset 3F Kat-Substrat mit -40 °C Offset

Temperatur Bank 2, Sensor 2

-40 °C

+6513,5 °C

0,1 °C/Bit

40 unterstützte PIDs, Bereich größer 40

41 Überwachungsstatus Fahrzyklus

Überwachungen

Bit -codiert Bit -codiert für kontinuierliche u. nicht -kontin.

42

Eingangsspannung Steuergerät

0 V

65,535 V

0,001 V pro Bit

43

absoluter Lastwert 0 % 25700

%

100/255 %

 

44

angefordertes Äquivalenz-Verhältnis 0

1,999

0,0000305

45

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ähler

4E

Zeit seit Fehlercode-Löschung

0 Minuten

65535 Minuten

1 Minute pro

Zähler

4F

bis FF reserviert für Erweiterungen

Weitere 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

1

P

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

Nowa sekcja 1 Strona 5

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

Nowa sekcja 1 Strona 7

Nowa sekcja 1 Strona 7