Forum: Mikrocontroller und Digitale Elektronik Kennfeld ablegen? Intern o. extern?


von Thomas (Gast)


Lesenswert?

Hallo,

ich benutze eine 90S8535 und möchte ein Kennfeld(Drehzahl u. Last) 
ablegen in dem alle 6µSek ein 8Bit Wert (aus 700 8Bit Werten) ausgelesen 
werden soll.

Ist der interne Epprom schnell genug oder muss es über einen externen 
Speicher laufen?
Wenn die Daten im EPPROM sind und ich den Saft abschalte und wieder 
einschalte sind doch sämtliche Daten noch da oder nicht?

Angenommen am Port D wird der Wert 00001010(10) eingelesen und soll als 
1000 U/Min intepretiert werden. Am Port C wird der Wert 1100100(100) 
eingelesen (100%Last)

Mit diesen beiden Werten soll also ne bestimmte Adresse im Epprom 
angesprungen und ausgelsen werden. Aber wie soll ich das machen?

Hab mir gedacht 10 + 100=10100 also könnte ich das ja als Adresse nehmen 
oder seht ihr das anderst. Wie sieht der Adressbereich aus? Von wo bis 
wo?

von Steffen (Gast)


Lesenswert?

6 µsek???

Die Schreibzeit des internen EEPROM beträgt bei 5V VCC typischerweise 
2.5ms. Das lesen sollte schneller sein, aber 6 µsek wird es wohl 
deutlich überschreiten.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

So eine Tabelle ist doch im Flash-Rom bestens aufgehoben, wozu das 
EEPROM verwenden? Schau dir mal die Assemblerdirektive ".db" und den 
Befehl "lpm" an.

MfG
Andreas

von Thomas (Gast)


Lesenswert?

Hallo,

ja ich dachte das ein AVR das meiste in 125 nSek machen sollte. Das 
Schreiben wäre eigentlich wurscht weil ich das vor dem eigentlichen 
Programm ausführen lassen sollte. Aber das lesen muss doch irgendwie 
schneller gehen.

Habe ein ca. 100 Seiten starkes Datenblatt vor mir liegen und am Schluß 
ist das Instruction Set Summary warscheinlich ist das eine 
Befehlszusammenfassung aber lpm taucht dort nicht auf. Kenne das aber 
vom x86 Assembler.

Meint ihr das es mit einem externen Baustein gehen könnte? Habe gerade 
gelesen das der 8535 sowieso nur 512 Byte EPPROM hat und ich mind. 700 
bräuchte.

Kann man aus dem Flash schneller lesen das sollte doch eigentlich in ein 
paar taktzyklen erledigt sein oder?

von Steffen (Gast)


Lesenswert?

EEPROM-Zugriff ist zu langsam. Versuchs mit dem Flash, so wie Andreas es 
vorgeschlagen hat.

Lade dir von Atmel doch mal das InstructionSet (also die reine 
Befehlserklärung - nicht das Datenblatt vom µC)

von Uwe (Gast)


Lesenswert?

Hi

Wiso ist EEProm lesen langsam? Dauert 2 Taktzyklen. Du mußt allerdings 
erst die Adresse schreiben dann "lesen Bit" setzen und wenn das Bit auf 
0 ist Daten lesen bei 125ns Takt schaffe ich das in 750 ns.
Gruß Uwe

von Thomas (Gast)


Lesenswert?

@Uwe

Hallo,

das dachte ich mir doch. Wie gesagt das schreiben ist nebensächlich da 
wenn ich 512 Bytes schreibe und pro Byte dauert es 2,5 mSek, dann hab 
ich das nach spätestens 2 Sek fertig(inkl. Befehle) und kann das 
eigentliche Programm starten.

Kannst du mir noch nen Tip geben wie ich das ganze so verknüpfe das ich 
mir genau das hole was ich brauche.
Epprom fängt ja bei $000 an und hört bei $1FF auf. Ich denke mir das ich 
z.B. $107 z.B. für Drehzahl=1000 und 7=Last 70% nehme. $125 z.B 
Drehzahl=1200 und Last=50. Oder würdet ihr das anderst machen.

Jetzt kommt aber ne weitere Frage auf da ich eigentlich ein Newbie in 
Sachen AVR bin. Wie verbinde ich 2 Register mit einander im einen steht 
10 und im anderem 7, daraus soll 107 werden. Es sollte doch bestimmt mir 
wenigen Befehlen machbar sein da ich sowieso nicht viel Leerlauf habe 
und das ganze fast ohne Interuppt mache.

Bei Reichelt hab ich mir mal die Daten für externes Epprom angeschaut. 
Die Zugriffszeiten liegen bei ca. 50-150 nSek.

von Jonas Diemer (Gast)


Lesenswert?

das eeprom kannst du ja gleich beim flashen mitprogrammieren... wie das 
adressiert wird steht im datasheet (ist echt mal ein blick wert :-)

Jonas

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

also ich hab jetzt etwas mit lmp und .db rumbrobiert.
Kann auch schon in die Entsprechende Tabelle springen siehe Anhang, das 
Programm sucht sich den Wert 9 raus und gibt ihn aus.

Aber wie erreiche ich die 6 gibt es da einen 2ten Pointer?

Und wo landet der Wert nach lpm zuerst?
In Temp? Dann könnte ich ja "mov temp,zeichen" weglassen und gleich "out 
pinb,temp" schreiben oder?

Und wofür steht in dieser Zeile "ldi ZL,Low(Last10*2)" das "*2"?

Also Danke schon mal im Vorraus.

von Jonas Diemer (Gast)


Lesenswert?

also wenn ich dich richtig verstehe, willst du eine art tabelle haben, 
die du per zeile und spalte angibst...

dabei reihst du einfach die zeilen aneinander. wenn du dann den 3. wert 
in der 4. zeile haben willst, dann ist der offset:

offset = 4*(zeilenlänge)+3

is also recht einfach.

von Axel(ojojo) (Gast)


Lesenswert?

nach "lpm" landen die Daten in r1 , oder !?

jo
Axel

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Nein, in R0.

MfG
Andreas

von Thomas (Gast)


Lesenswert?

Hallo,

offset = 4*(zeilenlänge)+3? wie hat das konkret als ldi... auszusehen?

in meinem Prog landet die Daten in R16. Warscheinlich weil ich nur R16 
habe oder?

von Jonas Diemer (Gast)


Lesenswert?

naja, da musst du dann rechnen (lassen).

vielleicht in ner schleife die addresse (im Z pointer) <zeile> mal um 
<zeilenlänge> erhöhen, danach noch um <spalte> erhöhen, schon haste die 
adresse für ldi

:-)

von Thomas (Gast)


Lesenswert?

Hallo,

hast du vielleicht ein kleines Beispiel, habe gedacht das ich ohne 
Schleife auskomme sondern irgendwie direkt hinkomme. Angenomen in 
R15=Drehzahl steht 3, dann will ich an das Dritte Zeichen kommen die 
verschiedenen Zeilen kann ich schon auswählen.

von Jonas Diemer (Gast)


Lesenswert?

sei doch selbst mal kreativ! :-)

wie, du kannst die zeilen schon auswählen???

die schleife dient nur der multiplikation...

von Thomas (Gast)


Lesenswert?

Hallo,

ich versuche selbst kreativ zu sein. Aber habe noch keinen Plan, weiß ja 
nicht mal was ich hier
ldi ZL,Low(Last10*2)
ldi ZH,High(Last10*2) ändern muss um einen anderen Wert zu bekommen. 
Wenn ich Last10 in Last20 ändere dann wird die letzte Tabelle ausgesucht 
und ich erhalte den ersten Wert. Z ist anscheinend der Pointer für hoch 
runter aber welcher ist für rechts links?

Kennt vielleicht irgendjemand ein Listing wo man erkennt wies 
funktioniert.

von Thomas (Gast)


Lesenswert?

Hallo,

ich glaube ich habs gefunden.
ADD ZL,R16
BRCC NixUeberlauf ;Macht weiter wenn es keinen Überlauf gibt
INC ZH            ;hier gehts bei Überlauf weiter
und dann kann ich wieder lpm ausführen.

Verstehe nicht warum manche Leute so misstrauisch sind und denken das 
man nichts selber programmieren will. In den Forum wo ich Ahnung habe 
versuche ich doch auch zu helfen.

von Jonas Diemer (Gast)


Lesenswert?

so hab ich das ja nicht gemeint...

zum Z-Pointer steht recht viel in den data sheets und im AVR assembler 
handbuch (gibts auch als pdf von AVR).

der Z-Pointer zeigt auf eine adresse im Flash. hierbei gibt es 
eigentlich nur eine "einteilung". der flash ist ja linear angeordnet. 
zeilen und spalten gibt es also nur virtuell.


zeile1: .db <daten der 1. zeile>
zeile2: .db <daten der 2. zeile>
zeile3: .db <daten der 3. zeile>

die daten stehen im flash nun direkt hintereinander:

<daten der 1. zeile><daten der 2. zeile><daten der 3. zeile>

addressieren kannst du dann also auch direkt von der 1.zeile und 
addierst dann x mal die zeilenlänge wenn du in zeile x willst, plus y 
für die y. spalte.

machts nun sinn?

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

das ist mir verständlich das alles hintereinander im Flash ist.

Habe das ganze mit einer einfachen addition gelöst. Werde das mal als 
Anhang mitschicken.

Statt  >ldi temp,3
       >add zl,temp

kann man auch adiw zl,3 schreiben
dadurch wird zur Standart 1 3 dazuaddiert und der 4te Wert aus der Zeile 
Last10 ausgelesen
weil der Z-Pointer mit
ldi ZL,Low(Last10*2)
ldi ZH,High(Last10*2) geladen wurde.

Kann man statt Last10 auch 1,2 o. 3 reinschreiben und wofür steht die 2 
da?

Also ich komme immer mehr dahinter. Die 2 PDF Dateien hab ich auch 
ausgedruckt vor mir liegen.

von Jonas Diemer (Gast)


Lesenswert?

meinst du die *2?

du musst die adressen jeweils mit 2 multiplizieren (geht auch mit <<1), 
da der flash in WORDS und nicht in Bytes organisiert ist.

von Thomas (Gast)


Lesenswert?

Hallo,

ja die *2 hab ich gemeint.

von Uwe (Gast)


Lesenswert?

Hi,
Ausgeben solltest du aber an PortB, nicht PinB.
Gruß Uwe

von Thomas (Gast)


Lesenswert?

Hallo,

das hab ich mir auch gedacht so hab ich es aber in einem anderen 
Programm gesehen und im AVR-Studio wird die Ausgabe auch richtig 
angezeigt. Mit PinB ist warscheinlich das gleiche gemeint wie PortB 
sonst müsste es doch PinB3 heißen oder?

von Jonas Diemer (Gast)


Lesenswert?

nein, das sind zwei verschiedene adressen im port file.

pinb ist der eingang, portb der ausgang. so sind die auch zu benutzen!

von Thomas (Gast)


Lesenswert?

Hallo nochmal,

welchen Speichertyp kann ich den an den Controller anschließen ohne ihn 
brennen zu müssen.

Habe was von SRAM gelesen. Wird der beim flashen mit beschrieben o. muss 
ich die Daten an den Anfang des Programms schreiben um damit vor dem 
eigentlichen Start die Daten ins SRAM schreiben.

Es ist doch ein Paraleller speicher o. läuft das alles seriell?

Gibt es Bausteine womit ich über eine Steuerleitung zw. 2 8Bit-Leitungen 
Wechseln kann?

von Jonas Diemer (Gast)


Lesenswert?

also nen sram is komplett doof, wenn der anfangs initialisiert werden 
muss. dann kannste die daten auch im flash lassen und von dort lesen...

es muss also, wenn der speicher konstanten (also quasie eine tabelle) 
enthalten soll, ein nichtflüchtiger  sein, damit's sinn macht.

von Thomas (Gast)


Lesenswert?

Hallo,

hab mir das noch mal durch denn Kopf gehen lassen. 6µSek dauert es ca. 
bis 1° durchläuft. Der Zündabstand ist aber 90° was bei einer Vorzündung 
von 30° und einer darauffolgenden Vorzündung von 10° ein Zündabstand von 
70° ergibt. Also habe ich eigentlich 70 x 6µSek Zeit=420µSek wo ich 
meine Berechnungen usw. durchführen lassen kann. Das wären dann bei 125 
nSek /Befehl=ca. 3300 Befehle. Das sollte also reichen jetzt kommt mir 
allerdings die Idee das ich die Kennfelder auch lernbar gestalten 
könnte. Damit nicht immer Lamda1 nachgeregelt werden muss sondern schon 
einigermaßen zutrifft.

Was sollte ich da für Speicher nemmen?
Was bedeutet die Zugriffszeit? Ist das die Zeit die zw. 2 
Auslesevorgängen pausiert werden muss oder ist das die Zeit in der ich 
nach einer Anforderung den Wert erhalte. In dem Buch 
AVR-Mikrocontroller-Praxis hab ich gelesen das 60 Kbyte externes SRAM 
angeprochen werden können. Außerdem könnte ich den SRAM Baustein mittels 
einer ständig angelegten Versorgungsspannung versorgen und zur 
Sicherheit noch mit einem Goldcap puffern.

Also Danke nochmals für die Mühe

von Jonas Diemer (Gast)


Lesenswert?

warum nimmste nicht den flash? selbst das eeprom kommt mittlerweile ja 
in frage.

von Thomas (Gast)


Lesenswert?

Hallo,

also das Epprom ist ja mit seinen 2,5mSek beim Schreiben zu langsam.

Das eprom kann ich doch so beschreiben oder?

.Eseg
Tabelle .db 45,32,31,30

dann wird es doch beim flashen reingeschrieben oder verwechsle ich das 
und ist flashen(Programmdraufspiele) ganz was anderes

von Jonas Diemer (Gast)


Lesenswert?

nein, so gehts!

evtl. legt der assembler das eeprom dann in eine extra datei.

von Uwe (Gast)


Lesenswert?

Hi,
EEProm schreiben dauert zwar 2,5ms aber du kannst doch in der 
zwischenzeit was anderes machen. 2,5ms ist doch nur für  weitere Byt's 
von Interresse. Übrigens brauchst du nur das Schreibbit abfragen und du 
weisst ob du das nächste Byte brennen kannst.
Gruß Uwe

von Thomas (Gast)


Lesenswert?

Hallo,

also angenommen die Lamdasonde meldet das gemisch ist zu fett also muß 
ich den Wert im Epprom ändern. Also hab ich dazu 420µSek da ja dann ner 
nächste Zyklus läuft und die Lamdasonde wieder sagt "zu fett" und ich 
muss den Wert wieder decrementiert im Epprom speichern. Aber das muss ja 
in Echtzeit ablaufen, kanns ja nicht in ne Warteschleife legen da die 
irgendwann überläuft. Ne andere Lösung wäre das ich pro Zylinder einen 
eigenen Controller nehme und dadurch 4mal mehr Zeit habe.

Aber es eilt ja nicht. Werde mich noch ne weile mit Assemblertexten 
rumschlagen um gute Routinen rauszusuchen. Werd mich jetzt mal mit der 
Stromversorgung des Controllers beschäftigen da es ja im Auto ganz schön 
stört.

von Phagsae (Gast)


Lesenswert?

Hallo Thomas
Das EEPROM kann man nur ca 100.000 mal beschreiben
Dann wirds langsam kritisch.

Normalerweise legt man ins EEPROM die Grunddaten ab
Die dann ins SRAM kopiert werden
SRAM lesen/schreiben 2 Tackte

Phagsae

von Jonas Diemer (Gast)


Lesenswert?

was genau baust du da????

von Thomas (Gast)


Lesenswert?

Hallo,

ich will mir ein Einspritz/Zündsystem fürs Auto bauen mit 
Ladedruckregelung, Wassereinspritzung, Lamdaregelung...

von Jonas Diemer (Gast)


Lesenswert?

krass! :-)

von Axel(ojojo) (Gast)


Lesenswert?

konkret krass

Wassereinspritzung
Das dehnt sich ja um den Faktor 1200 aus, gell ?
hmm ... das sind dann bei ner 4,8 LiterMaschiene mit 8Zylindern nur 
0,5ml/Zylinder um alles in die Luft zu sprengen :-)
da brauchst Du aber nen stabilen Motorblock, ne assi Kopfdichtung und 
mal lieber "zu kleine" Kolben, viel Öl, und mit der Kühlung isses net 
ganz so schlimm, weil das Wasser Dir super viel Wärme aufnimmt.
und immer schön langsam
Was ist das denn für ein Auto ?

jo
Axel

von Jonas Diemer (Gast)


Lesenswert?

wie jetzt, das hab ich nicht gerallt... das benzin mit wasser mischen???

von Thomas (Gast)


Lesenswert?

Hallo,

ja das ist so um so höher man auflädt desto höher ist die Temperatur der 
Ladeluft und der Verbrennungsvorgang selbst. Dadurch das man Wasser 
einspritz wird der Brennraum gekühlt dadurch kann man noch höher 
aufladen und läuft nicht gleich Gefahr den Block durch Klopfen zu töten. 
Man kann ca. 10° mehr Vorzündung fahren. Oder läßt es so wie es ist und 
hat noch ein paar extra Reserven. Bei normalen Motoren wird bei höheren 
Drehzahl einfach angefettet (mehr Benzin) dadurch steigt natürlich auch 
der Verbrauch. Wenn man aber noch nen extra Wassertank spazieren fährt 
kann man halt auch etwas Benzinsparen. Saab hat das früher mit der 
Wassereinspritzung praktiziert. Wurde auch in der Formel1 verwenden bis 
es verboten wurde.

Ist ein komplett neu aufgebauter Opel-Motor 1,8Liter, extrem kurzhubig, 
Stahlpleuel, Schmiedekolben, nitrierte Kurbelwelle...
nur leider hab ich eine mechanische Zündverstellung und da läßt sich 
nicht umprogrammieren.

von Thomas (Gast)


Lesenswert?

kleiner Nachtrag,

soll jetzt in einem Ascona C eingetragen werden und später mal in einen 
leergeräumten Corsa A wandern der nicht besonders schwer sein darf.

von Marcus (Gast)


Lesenswert?

Hallo Thomas,

ich verfolge schon einige Zeit Eure Diskussion. Da ich mich im Umfeld
von Einspritzsystemen (L-Jetronic / Motronic) recht gut auskenne will
ich ein paar Hinweise beisteuern:

Folgende Parameter werden zwingend für eine entsprechende Gemischbildung
benötigt:

1. Luftmasse (z.B. über Heißfilmsensor)
2. Ansauglufttemperatur - Besonders bei aufgeladenen Motoren
3. Ladedruck
4. Lambda - Wert
5. Drosselklappenstellung
6. Kurbelwellenstellung / Drehzahl
7. Bei aufgeladenen Motoren zwingend nötig: Klopfsensor
8. Wassertemperatur

Die genannten Parameter sind das absolute Minimum. Ansätze, die die
Luftmassenmessung durch den Ladedruck ersetzen haben sich nicht bewährt,
da sie zu träge sind und auf Druckwellen im Ansaugtrakt mit 
Fehlmessungen
reagieren.

Ergeben sollte sich folgendes:

1. Zündzeitpunkt
2. Einspritzmenge = Länge des Öffnungsimpulses des Einspritzventils.
3. ggf. Ladedruckregelung.

Die Parameter 1, 3, 4, 5, 6 gehen DIREKT in das enstehende Kennfeld ein.
Die anderen Werte lassen sich durch Korrekturen des errechneten 
Kennfeldes
ermitteln.

Wenn ich die ganzen Kenngrößen betrachte, fällt mir kein AVR ein, der 
über
entsprechend viele Analogeingänge (1., 2., 3., 4., 5., 8. = 6 insgesamt) 
verfügt.
Außerdem muß die Messung zumindest der Signale 1,2,3,4 sehr schnell 
erfolgen.
Sie sollten für jede Umdrehung neu ermittelt werden.

Das Ganze in Echtzeit zu machen ist sicher auch nicht trivial:

7000 U/min bedeuten ca. 233 Zündungen je Sekunde (bei einem 4-Zylinder).
Das alleine sollte gehen. Interessant ist folgendes: Die Genauigkeit des
ermittelten Zündzeitpunktes sollte für einen Hochleistungsmotor schon im
Bereich von 1 Grad KW liegen. Das bedeutet für die vorgegebenen 
Drehzahlen
ein max. Abweichung von ca. 24 uS.
Ähnliches gilt für die Einspritzzeiten: Hier ist das allerdings eher
umgekehrt. Die VOllastzeiten sind sicherlich leichter zu erreichen,
problematisch sind hier die sehr kurzen Impulse im Leerlauf, die sicher
auf +/- 1uS stimmen müssen, um einen stabilen Leerlauf zu erreichen.

Problematisch ist sicher auch die Abspeicherung dieses 5-dimensonialen
Kennfeldes mit je zwei resultierenden Werten.

Ein Abspeichern von Lambda Werten im EEPROM ist kaum sinnvoll und auch
nicht nötig. Gängige Systeme speichern Korrekturwerte für das ClosedLoop 
System
immer im RAM ab. Sollte die Batterie abgeklemmt werden, kalibrieren sie 
sich neu.

Wenn man schon den ganzen Aufwand treibt, sollte man auch direkt eine 
Einzelzündung
vorsehen. - So läßt sich der Zündverteiler eliminieren.

Ich fürchte allerdings, daß dieses System für einen Hobbyisten nicht 
realisierbar
ist. Alleine die Messmittel, die nötig sind (Motorenprüfstand incl. 
Messung und
Echtzeitprotokollierung aller Parameter), sind schlicht Unbezahlbar. 
Wenn das Auto
im Straßenverkehr eingesetzt werden soll kommt noch die Einhaltung und 
Begutachtung
der Abgaswerte hinzu ...

Ich weiß, daß es für den Motorsport entsprechende Systeme fertig gibt. - 
Ich
habe so was auch schon mal im Internet gesehen. Ein anderer Weg wäre, 
ein
Motronic System für einen ähnlichen Motor (z.B. Calibra Turbo) über 
anderen
Kraftstoffdruck oder Einspritzdüsen entsprechend anzugleichen.

Viele weitere Probleme (z.B. Plazierung und Auswertung des Klopfsensors, 
Auswertung
der Lambdamessung - kein proportionales Signal sondern Umschlag bei 
Lambda=1,
Störsicherheit im PKW ...) habe ich hier noch gar nicht angesprochen.

Außerdem ist ungeheuer schwierig, ein derartiges Echtzeitsystem zu 
debuggen. Ich
weiß, wovon ich hier spreche, da ich kürzlich ein komplexes IR 
Fernbedienungssystem
mit einem AVR realisiert habe ...

Sorry hier den Miesmacher zu spielen, aber ich halte das Ganze für nicht 
realisierbar ...

Du kannst mir gerne mal eine Mail schreiben, wenn Du noch Fragen hast.

Gruß, Marcus

von Thomas (Gast)


Lesenswert?

Hallo,

danke für deine Ausfürhliche Antwort.
Aber ich komme bei 8000 U/Min auf 133 Zündungen pro Sek=7,5mSek pro 
Umdrehung/360=20,8 µSek pro 1°. Ich will aber ne höhere Genauigkeit. 
Also werde ich einen zweiten AVR verwenden der mir pro Grad 5 Impulse 
liefert. Und der zweite AVR macht die Berechnungen aus dem Kennfeld und 
zählt dann die Impulse um im richtigen Zeitpunkt zu zünden(Schleife 
herunterzahlen). Außerdem findet eine Zündung nur alle 90° statt und 
dazwischen hab ich die Zeit um meine Berechnungen zu machen. Also mit 
einer Reserve ca. 1,5mSek. Da macht ein AVR bei 8MHz 15000 Befehle evtl. 
durch 2 falls man mit 250nS pro/Befehlrechnet.

Einzelzündung muss es eigentlich nicht sein dachte eher an 
Doppelzündung, weil dadurch keine unverbrannte Abgase zum Kat gelangen 
der verschleiß der Kerzen ist halt doppelt so hoch aber was kosten die 
schon. Eine Schaltung inkl. Programm hab ich für den AVR schon gefunden. 
Ich werde es an einem Prüfstandmotor machen bevor es in mein Auto kommt. 
Das mit dem Klopfsensor sehe ich nicht so schlimm, da ich ein 
Klopfsignal schon mit dem Oszi erkannt habe. Allerdings nicht 
Zylinderselektiv. Was man aber machen kann das nur ca. 30° vor OT bis 10 
nach OT im beim Arbeitstakt eines Zylinders das Signal an einen 
AD-Wandler läuft.
Ich möchte es erstmal mit der Jetronic probieren, einfach den 
Luftmengenmesser vor den Turbo dadurch misst er auch alles ein was 
angesaugt wird. Weiterhin habe ich einen einstellbaren Benzindruckregler 
der auf unter und Überdruck reagiert. Die Ladedruckregelung wird erstmal 
5 Stufig über eine Regelung gemacht die ich mit mit nem AVR 
zusammengebastelt habe. Abbringen kann mich davon keiner da auch AME 
einen Rechner mit einen 80535 realisiert haben. Zuerst werde ich mich um 
die Zündung kümmern da ich die Last/Ladedruckabhängig gestalten 
will/muss.

Mein Asci wird 2004 20jahre alt muss mich mal erkundigen wegen 
07-Kennzeichen dann gibts nämlich ne pauschal-Steuer und ich könte die 
Lamdaregelung außer acht lassen. Aber für die Abstimmung ist es ganz 
nützlich.

von Axel(ojojo) (Gast)


Lesenswert?

Also ich komm auf 533,3.. Zündungen/Sekunde :-)

Thomas:
ist der Lamdawert nicht sehr nützlich für die Bestimmung der 
Benzinmenge?
Ist es nicht sinnvoller beim Benzindruck immer den höchstmöglichen Wert 
zu nutzen und lieber die Einspritzdauer als den Druck zu ändern?
Welche Leistung erwartest Du nach erfolgreicher Implementierung Deiner 
Steuerung?

Markus:
Kannst Du noch ein wenig zum Klopfsensor sagen?
Danke

jo
Axel

von Thomas (Gast)


Lesenswert?

Hallo,

ja der Benzindruck muss mit dem Ladedruck steigen und dem Unterdruck im 
Saugbetrieb (unterer Drehzahlbereich) sinken um genau das zu erreichen, 
das die Einspritzmenge nur von der Einspritzzeit abhängig ist.

Also ich habe mir einen Motoraufbauen lassen der einige Leckerbissen 
hat, der ist jetzt 9,0:1 verdichtet und leistet immerhin noch 125  PS. 
Erstmal werd ich mit nur 0,3bar effektiv aufladen also samtliche 
Drosselverluste sind dann schon kompensiert. Damit müsste meine 
LE-Jetronic zurecht kommen. Wenn ich mal die Einspritz/Zündanlage fertig 
habe werde ich mit mind. 1bar aufladen , nen Overboost von ca. 1,3bar 
und ca. 250 PS erreichen. Was für ein 700-800kg Fahrzeug ausreichen 
sollte.

Ich könnte im Moment auch noch per PWM und nachgeschalteter R/C-Stufe 
meinen Original-Steuergerät falsche Daten liefern (Motortemperatur). 
Hatte mal nen Wackelkontakt an dem Stecker und mir ist mein Motor bei 
5000 U/Min abgesoffen. Also von der Einspritzmenge liefert meine Anlage 
genug, da sie alle 180° Kurbelwelle einspritz schafft sie einfach 
doppelt soviel wie ne full-seq- Einspritzanlage.

von Marcus (Gast)


Lesenswert?

Hi Thomas,
Bei 8000 U/min hast Du 16.000 Zündungen / min (ein Viertakter zündet
jede 2. Umdrehung * 4 Zylinder = (8.000 / 2) * 4 = 16.000). Das sind je
Sekunde 266 (oder 233 bei 7000 U/min).

Wenn Du einen Prüfstand hast, sehen die Chancen schon viel besser aus.
Das Gleiche gilt natürlich, wenn Du kein Abgasgutachten brauchst.
Dennoch hilft dir eine Lambdaregelung natürlich die Regelung insgesamt
besser abzustimmen, wenn auch eine kurzfristige (=schnelle) Regelung
nicht möglich ist. Dir ist sicherlich auch klar, daß bei einem hoch 
aufgeladenen
Motor wenige Sekunden zu magerer Lauf im Vollastbereich zu einem
GAU (=schmelzen wichtiger Motorbestandteile) führen wird.

Mit Einzelzündung meinte ich eine Direktzündung (ohne Zündverteiler)
mit Einzelzündspulen. Das gibt zum einen einen besseren Zündfunken,
da der Schließwinkel größer wird, außerdem entfallen Verteiler und
Hochspannunskabel. Bei einem aufgeladenen Motor mit hohen Dreh-
zahlen ist ein besonders kräftiger Zündfunken emminent wichtig.

Um die einzelnen Impulslängen zu generieren würde ich in jedem Falle
mit Timern arbeiten. Verzögerungsschleifen sind ungenau und verbieten
die Nutzung von Interrupts, die Du aber mit Sicherheit brauchen wirst.
Die AVR Timer sind in Verbindung mit Interrupts ungemein elegant und
auch flexibel.

@Axel: Der Benzindruck muß geregelt werden, um eine konstante Ein-
spritzmenge bei einer bestimmten Öffnungszeit des Ventils zu erreichen.
Im Prinzip muß immer der gleiche Differenzdruck zwischen Saugrohrdruck
und Benzindruck herrschen. Alle mir bekannten Systeme (Bosch Jetronic
und Motronic) setzen hierfür einen mechanischen Kraftstoffdruckregler
ein.

@Thomas: Wenn Du ohnehin den Saugrohrdruck mißt, könntest Du auch
die Korrektur des Benzindrucks errechnen (noch ein Faktor mehr ....).

Zum Thema Klopfsensor weiß ich nur, daß es sich um einen Piezofühler
handelt, der durch die Zündungen des Motors erregt wird. Die Erkennung
einer Frühzündung (=klopfen) erfolgt soweit ich weiß sowohl über die
Signalform (=Amplitude) als auch über den Zeitpunkt der stärksten 
Erregung.
Problematisch ist hier noch die Plazierung, da der Abstand zu den 
einzelnen
Zylindern immer unterschiedlich ist, was sowohl die Amplitude als auch 
das
Timing des Signals beeinflußt. Motoren ab 5 Zylindern haben auch fast
immer mehr als einen Klopfsensor (bis zu 4 beim V12).

Es gibt übrigens noch ein Verfahren um die Klopfregelung komplett zu
ersetzen: Saab z.B. mißt den Zündstrom während der Zündung. Der
Verlauf dieses Zündstroms (während der Microsekunden, die das dauert).
Der Verlauf des Zündstroms erlaubt dann zu bestimmen, ob die
Verbrennung sauber ist. Eine unkontrollierte Zündung "bläst" quasi
den Zündfunken aus, so daß der Zündstrom zu früh zusammenbricht.

Gruß, Marcus

von Thomas (Gast)


Lesenswert?

Hallo,

ein 4Zylinder-4 Takter hat eine Zündabstand von 180° Kurbelwelle also 
zündet er jede halbe Umdrehung. Also hab ich ja 180° Pause zwischen 2 
Zündungen um meine Befehle
auszuführen. Fehler meinerseits es sind doch 266/Sek.

Mir ist schon klar was du mir Einzelzündung gemeint hast. Aber für die 
Schließwinkelregelung habe ich ein externes Bauteil das den 
Schließwinkel selbstätig regelt(auch bei verschiedenen Zündspulen da es 
direkt sie Sättigung überwacht und mir diese Aufgabe deshalb keine 
Prob's bereitet.
Über Einzelszündspulen hab ich auch schon nachgedacht. Allerdings hab 
ich da nicht den Effekt das in den Austoßtakt reingzündet wird.

Bei der Ionen-Strommessung von Saab wird nicht der Zündstrom gemessen 
sondern kurz nach der Zündung ein Gleichstrom mit 400V (was ich 
eigentlich nicht praktizieren will, da es doch ganz schön gefährlich 
ist) durch den Brennraum gejagt wird. Und je nach Stärke der Detonation 
leitet das Gas besser oder schlechter, dadurch kann man direkt auf den 
Druckverlauf im Zylinder schließen und die Klopfenden Bereiche meiden. 
Weiß jetzt nicht genau ab wieviel bar Verbrennungsdruck der klopfende 
Bereich anfängt und außerdem vertragen manche Motoren einfach mehr 
Verbrennungsdruck da sie halt stärker konstruiert sind. Saab kann sich 
dadurch viel genauer an die Klopfgrenze wagen als andere Hersteller da 
sie den Druckverlauf direkt messen und nicht erst auf ein Signal des 
Klopfsensors warten.

Mein Motor hat eine Aufnahme für einen Klopfsensor ab Werk sollte also 
schon die optimale Position sein.

Das mit der Impulsbildung hab ich mir so vorgestellt. Ein 2ter AVR misst 
mir die Länge zwischen einer fallenden und einer steigenden 
Flanke(welche durch einen Sensor an der Kurbelwelle die Impulse an den 
AVR liefert)
durch diese Zeit kann ich jetzt die U/Min u./o. 360° Kurbelwelle 
errechen o. 720 o. 1440 um die Genauigkeit auf 0,25° zu steigern. Aber 
das Prob ist folgendes ich muss die Zeiten zw. 1,666..mSek(100 U/MIN) 
und 20,833..µSek(8000U/MIN) messen können und  ob das Ergebniss 
überhaupt als 8bit rauskommt oder wäre das genau genug. Müsste dann die 
neuen Impulse entweder per einiger verschachtelter Schleifen generieren 
und die Entschleife mit einen Wert zw. 0 u. 255 laden oder per PWM das 
ganze machen aber ob man mit PWM diese Bandbreite erreicht 
1,6mSek-20,8µSek?

Und ich bin auf der Suche nach folgendem Bauteil VB029(u. Preis) als 
Pentawatt-Gehäuse ist ein Zündspulentreiber der eine interne 
Strombegrenzung von 12,5 Ampere hat und mit einen Portpin geschalten 
weren kann also TTL-Kompatibel, denn kann man ja auch als Schalter für 
sämtliche Dinge benutzen.

Das mit dem benzindruck haben wir uns gegenseitig abgelaufen warst 
zuerst auch dem Senden-Button.

Muss dann auf Arbeit werde aber heute Abend wieder ins Forum schauen, 
also bis dann.

von Marcus (Gast)


Lesenswert?

Hallo Thomas,

für die Direktzündung solltest Du natürlich jede Zündspule einzeln 
ansteuern.

Jetzt aber zum Timing-Problem:
Ich würde mit einem 0-Grad KW Sensor Drehzahl und KW Position messen. 
Zusätzlich ist wohl
noch ein 0-Grad Sensor an der Nockenwelle nötig, um die Arbeitstakte 
auseinander zu halten.
Evtl. tut es hier ja auch der alte Zündverteiler, der ja mit 
Nockenwellendrehzahl läuft.

Durch die Messung der Periodendauer der Kurbelwelle erhältst Du einen 
Wert zwischen 125 uS
bei 8000 U/min und 2000 uS bei 500 U/min. Wenn Du den Zeitraum mit einem 
mit 8 MHz getakteten
16 Bit Timer misst bekommst Du Werte zwischen 1000 (* 125 nS) und 16000 
(* 125 nS). Das bedeutet
wiederum, daß Du den KW Winkel auf ca. 0.3 Grad genau messen kannst. Den 
gemessenen Periodenwert
kannst Du durch einfaches Rechtsschieben beliebig in ein Kennfeld 
umwandeln: Eine Teilung durch 64
z.B. ergibt ein fast perfektes 8 Bit Feld mit Werten zwischen 15 und 250 
für das genannte
Drehzahlband. Wahrscheinlich muß man aber noch den Kehrwert der 
Periodendauer nehmen, da sonst
die Genauigkeit bei höheren Drehzahlen unbefriedigend ist.

Das sollte sogar mit nur einem AVR gehen: Du verwendest Timer 1 mit 
Chiptakt = 8 Mhz getaktet.
Hier hast Du dann 125 ns Periodendauer. Der 0 Grad Sensor triggert den 
Input Capture Event.
Außerdem setzt Du den Timer mit jedem Input Capture zurück 
(automatisch). Jetzt kannst Du Drehzahl und Kennfeld
ermitteln. Das Output Compare Register des Timers lädst Du dann mit den 
gewählten Werten.
Es ist Hardwaremäßig direkt Abfragbar. Nun mußt Du nur noch über 4 
Ausgänge den passenden Zylinder
auswählen, so daß der richtige Zylinder zündet. Ich glaube, die 
Ungenauigkeit, die durch eine
Drehzahländerung während der Umdrehung entsteht ist zu vernachlässigen. 
Unter Last - und nur das
ist wichtig, vor allem in den Höheren Gängen, ändert sich die Drehzahl 
nicht mehr so schnell.

Aber auch das läßt sich ja abschätzen:

Eine Verdopplung der Drehzahl (von 3.000 auf 6.000 U/min) sollte 
mindestens 2 s dauern.
Bei 6000 U/min habe ich in diesen 2 s insgesamt 200 KW Umdrehungen. Das 
sollte genügen, um
das Kennfeld hinreichend genau zu steuern. Bei niedrigen Drehzahlen 
(z.B. von 1.000 auf 2.000 U/min)
ist die Änderung des Zündzeitpunktes wiederum nicht so groß. Soweit ich 
weiß, arbeitet die Bosch
Motronic auch mit einem 0 Grad Sensor und  berechnet alle Korrekturwerte 
bezogen auf die nächste
KW Umdrehung.

Falls die Genauigkeit so nicht genügt, kann man Sie mit einem 2. Impuls 
bei 180 Grad KW verdoppeln.
Das Verfahren bleibt gleich, nur die Synchronisierung wird etwas 
aufwendiger, da ich nun die Events
zählen muß und mit 0 Grad Nockenwelle synchronisieren muß.

Den Bereich des Anlassens muß man ohnehin anders erkennen und behandeln. 
Hier kann man dann
einen anderen Teiler wählen (z.B. / 8). Das Kennfeld spielt beim 
Anlassen ohnehin keine Rolle.

Du kannst mir auch gerne mal eine Mail schreiben, dann maile ich Dir mal 
meine Telefonnummer.

Gruß, Marcus.

von Thomas (Gast)


Lesenswert?

Hallo,

danke für die ausführliche Antwort. Aber ich möchte nicht eine ganze 
Umdrehung warten bis ich die Drehzahl ermitteln kann, weil ja die 
Beschleunigung dazwischen erst ausser acht gelassen wird. Habe mir das 
so vorgestellt. Es gibt bei einem 2 Liter-Motor ein Bauteil das ich auch 
verwenden könnte sitzt an der Kurbelwelle und liefert 65 Impulse oder 
ich mach es irgendwie per Hall o. Induktionsgeber an der 
Kurbelwellenscheibe also dort wo der Anlasser reinhackt. Die OT 
Bestimmung für Zylinder 1+3 u. 2+4 werd ich am Nockenwellenrad 
realisieren. Da sich die Nockenwelle nur 1:2 schnell dreht. Ich müsste 
allerdings die Drehzahl pro Impuls ermitteln.

von FrankL (Gast)


Lesenswert?

Hallo Thomas

Tolles Projekt

Hier noch ein paar Tips an die Du vielleicht schon gedacht hast.

Wenn Du irgend etwas messen möchtes nimm die internen Timer und 
Interrupt's. In der gewonnenen Zeit kannst Du die Variablen über die 
RS232 Schnittstelle an ein Hyperterminal senden. Dies wäre nützlich 
für's debuggen in einem "Realtime Projekt". Obwohl der AVR Simulator 
oder einige Entwicklungsboards nützlich für die Programmentwicklung 
sind, aber "Realtime" können nur recht teure Systeme.

von FrankL (Gast)


Lesenswert?

Hallo noch mal ich

Habe gerade in ein Conrad Katalog geschaut dort gibt es ein BUK 101-50GL
(schaltet mit 5V) vielleicht reicht der aus um die Zündspule zu 
schalten.

Ansonsten gibt es genug MOS FET's BUZ11 schaltes +14V an Emitter 
Transistor an Collektor über Widerstände ans Gate. Freilaufdiode nicht 
vergessen und weil es vom MC gesteuert wird, vielleicht das über 
Optokoppler steuern.

von Thomas (Gast)


Lesenswert?

Hallo,

es geht mir eigentlich darum die Schaltung möglichst klein zu halten und 
deshalb möchte ich nicht erst einen optokoppler Schalten und dieser 
einen kleinen Trans. damit dieser wiederum einen großen Schalten kann. 
Ich will einfach über einen Pin des µC einen Transistor schalten. Habe 
gerade ne Antwort von ner Firma bekommen die die VB029 verteibt dieses 
Ding kann über einen Pin gesteuert werden und schaltet 12A und hat noch 
einen Diagnose-Ausgang allerdings verkaufen die 1000 Stück in Packungen 
'a 50 und wollen 2.400 Euro für haben also Stückpreis von 2,40Euro o. 
knapp 5 DM. Aber das kann ich mir wirklich nicht leisten.

Das mit der Übergabe von Werten an den PC ist erst mal nicht so wichtig 
und läßt sich eigentlich auch ziemlich leicht bewerkstelligen Quellcodes 
hab ich schon im anderem Forum(Codesammlungen) gesehen.

von Michael (Gast)


Lesenswert?

Hallo Thomas, Hallo Marcus
Habe Euren Dialog über Suchmaschine gefunden und festgestellt daß Das 
Projekt von Thomas dem Meinen sehr ähnelt.
Ich baue gerade eine Einspritzung zur Leistungssteigerung für ein 
Motorrad und habe mich für den ATMega103 entschieden. Daher möchte ich 
auch Tabellen in den flash-Speicher ablegen (schon wegen der Größe). Ich 
denke an 32*32 für die Zünverstellung und evtl. das gleiche oder 64*64 
für die Kraftstoffmenge.
Ich dachte die Tabelle so anzulegen daß ich im Prinzip 32 Zeilen (für 
verschiedene Drehzahlen) habe und in jeder stehen 32 bytes (für 
verschiedene Gasstellungen). Um an meinen Wert zu kommen Teile ich die 
Drehzahl durch 32 und addiere die Gasstellung. Dort finde ich dann 
meinen Wert.
Ich würde mich freuen auf diesem Weg mit Gleichgesinnten kontakt zu 
halten. da ich schon seit ca 1 Jahr an dem projekt arbeite mußte ich 
bereits einige Probleme lösen
Gruß
Michael

von Dirk (Gast)


Lesenswert?

Hallo Leute,
ich bin auch zufällig auf dieses Forum gestossen. Ich bin eher ein 
Anwender von Motormanagmentsystemen und beschäftige mich seit über 10 
Jahren mit dem Thema. Im Moment schreib ich mir ein Programm um Eproms 
visuell durchzufahren und so die Kennfelder zu lokalisieren, bei Marelli 
und TTD klappts schon.
Hier mal ein paar Tipps:
In der Regel reicht je ein 16*16 Kennfeld für Einpritzzeit, Zündung und 
evtl. Korrektur zwischen Zylinderreihen bzw. innen/aussen beim 
4-Zylinder-Reihenmotor. Die Breakpoints sollten aber geschickt gewählt 
sein, da z.B. die Drosselklappe schon 50% Flow bei etwa 20° Öffnung 
zulässt. Bei höher drehenden Motoren haben sich 16*32 Kennfelder bewährt 
(32 Drehzahlwerte). Grössere Kennfelder benötigten schon brutale 
Verarbeitunggeschwindigkeit.
Weiter Kennfelder: Warmlauf, Start, Lambda, Ladedruck, Sensordrift (bei 
Induktiv), Leerlaufregelung, etc ...

Respekt vor dem der das durchzieht.

Hier noch ein paar Adressen wer solche Systeme anbietet. Die 
Funktionsbeschreibungen können inspirierend sein:
http://www.trijekt.de>; (sehr flexibel), <http://www.moto-spezial.de>; 
(für Guzzi - kann aber auch auf 4-Zyl. verbaut werden), mbesystems.com 
(England), <http://www.vgsmotorsport.de (von Weber-Marelli gibt es auch 
AfterMarket-Rechner). Solche Rechner liegen im Preis so um di 
1000,-Euro. Trijekt und moto-spezial habe ich schon verbaut. MBE, TDD, 
Marelli nur abgestimmt, bzw. optimiert.

Ciao Dirk

von Rainer Lechner (Gast)


Lesenswert?

Hallo jungs bin gerade auf eure diskussion gestossen und hätte da mal
eine frage. Ich suche schon seit längerem die datenblätter bzw das
datenblatt von bosch einspritzdüsen damit ichdie genaue durchflußmenge
ermitteln kann bzw die richtigen düsen für meinen motor besorgen kann.
Kann mir vielleicht jemand helfen.
gruß rainer

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