PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Steuergerät für Motor die 2te :)



Spartakaktus
13.05.2006, 17:10
Hiho!

Da ich für nen Freund ein Steuergerät für nen Motor entwickeln soll,
zumindest so, dass er mal halbwegs läuft, bräucht ich bitte ein wenig (bis viel ^^)
Hilfe von euch!

Zuerst mal die Funktionsweise bzw. Aufgabe des Boards:

Durch einen Hallsensor bekommt der Controller (Siemens SAB80C51) bei jeder Umdrehung ein Signal, welches einen Interrupt auslöst - ich nens jetzt mal Bleep :)

Jetzt gibts für mich leider nur ein paar Verständnisprobleme bei den Interrupts bzw den Timern...

Einen Timer brauch ich für die Drehzahlmessung, das is schonmal fix...
Die Zeit zwischen den Bleeps gemessen und daraus resultiert die Drehzahl.

Nun hat der Controller nur noch einen Timer, ich brauch aber 2 -
einmal für den Einspritzzeitpunkt und gleich darauf für die Einspritzdauer...

Jetzt mal die erste Frage:
Wenn ich eine bestimmte Zeit warten muss, eben Zeitpunkt und dann Einspritzdauer, sollt ich da nen Timer verwenden oder reicht eine einfache Waitfunktion mit nem passend hohen Wert?

Den mit Timern kann das (nach meinem Verständis) irgendwie ned funktionieren...
Jetzt mal meine Überlegungen zum Ablauf:
-> Initialisierungsphase: Standardwerte werden in Variablen geschrieben, "Drehzahltimer" wird gestartet.
-> Bleep startet Interruptroutine
-> Interruptroutine holt sich aus einer Variable, die im Mainprogramm errechnet wird, den Wert für den Timer aus einer globalen Variable (Einspritzzeitpunkt) und startet ihn
-> Nach Ablauf der Zeit wird der Wert für die Einspritzdauer geholt (wieder aus ner Variable - kann man das überhaupt in ner Interruptroutine?)
-> der vorrige Timer läuft nochmal (startet sich also quasi selbst neu mit nem anderen Wert)
-> nach dem Ablauf wirds Ventil geschlossen
-> Drehzahltimer wird gestoppt und sein Wert ausgelesen und in einer Variable gespeichert
-> Drehzahltimer wird wieder gestartet
-> aus Drehzahlvariable wird die Drahzahl berechnet
-> Gaspedalstellung wird gemessen

-> Gaspedalstellung und Drehzahl ergeben Werte für Einspritzzeitpunkt und Dauer

-> Warten auf den nächsten Bleep

Kann das so funktionieren oder denk ich komplett verkehrt?

Von mir aus zeichne ich auch gern ne Skizze, bin nur leider grad im Stress :)

Schonmal vielen Dank fürs Helfen (... eigentlich schon mal danke fürs Durchlesen .. :P )

LG Alex

Kaiser-F
13.05.2006, 17:15
Jetzt mal die erste Frage:
Wenn ich eine bestimmte Zeit warten muss, eben Zeitpunkt und dann Einspritzdauer, sollt ich da nen Timer verwenden oder reicht eine einfache Waitfunktion mit nem passend hohen Wert?

Dazu kann ich was sagen.

Ich löse solche Sachen immer folgendermaßen:

Ich stelle meinen Timer so ein, dass er jede Millisekunde (ms) einen Interrupt auslöst.
In der Interrupt Routine werden alle zeitabhängigen Variablen verarbeitet.

Willst du zB etwas eine bestimmte Zeit lang machen, dann brauchst ne
Variable dafür: nennen wir sie mal EINSPRITZDAUER.

Dann muss in der Timer Interrupt Routine stehen:
if(EINSPRITZDAUER){ EINSPRITZDAUER--; }


Im Hauptprogramm wird laufen folgendes ausgeführt:
if(EINSPRITZDAUER){ einspritzen }else{ nicht einspritzen }


Will man jetzt einspritzen, dann setzt man EINSPRITZDAUER=10.
Somit spritzt er 10ms ein.

Den Aufruf der Interruptroutine kann man natürlich auch öfter aufrufen lassen....

Vielleicht hilft dir das was ...

Spartakaktus
13.05.2006, 21:19
Hey, das hilft mir schonmal sehr viel weiter :)

Stellt sich nur die Frage ob der das zeittechnisch schafft...

Bei 6000 Umdrehungen kommt son Bleep alle 10 Millisekunden...

Somit sollte alles auch in der Zeit ablaufen, bzw eigentlich noch schneller, da er ned nur Drehzahl und Gas messen und Einspritzung regeln sollt, sondern noch zusätzlich den Einspritzdruck...

Wird wohl per Druckwiderstand gemessen:
Is der Druck unter 1150 wirds Überdruckventil geschlossen,
is er über 1250 wirds aufgemacht.

Danke schonmal!

LG Alex

Kaiser-F
14.05.2006, 11:45
wenn dir das Zeitintervall nicht reicht, musst halt die "frequenz" mit der
die Interrupt routine aufgerufen wird höher setztn.

Sprich: Timer Prescaler herab setzen.