Forum: Mikrocontroller und Digitale Elektronik Zündungsimpuls zuverlässig erfassen


von F. P. (pl504)


Angehängte Dateien:

Lesenswert?

Hallo!

Für eine elektronische Zündung möchte ich gerne das Gebersignal 
auswerten (mit ATmega), allerdings bereitet mir die Signalform etwas 
Kopfzerbrechen, siehe Bild.

Das Problem ist, daß zwei Impulse kurz hintereinander kommen und den 
Timer für die Periodendauermessung doppelt auslösen werden.
Hat einer ne Idee, wie man am besten damit umgeht?

Ich dachte schon an ein vorgeschaltetes Monoflop, nur wird das für den 
Drehzahlbereich (ca. 300 bis 12000 min^-1) nix werden, da entweder der 
Impuls für hohe Drehzahlen zu lang oder für niedrige Drehzahlen zu kurz 
wäre.

Oder ich spekuliere darauf, daß eben zweimal pro Drehung gemessen und 
diese zwei Werte dann addiert werden. Dann muß aber gesichert sein, daß 
wirklich sicher zweimal die Messung ausgelöst wird.

Oder man macht's mit einem Komparator, der als Referenz die 
Geberspannung von einem Spitzenwertgleichrichter erhält und beim zweiten 
Impuls gar nicht erst auslösen würde (die zweite Amplitude ist ja 
geringer)?

: Bearbeitet durch User
von Gandalf (Gast)


Lesenswert?

Eine Idee wäre ein Schmitt-Trigger ([1]), der nur bei dem höheren oder 
tieferen Spitzen auslöst.

[1] http://de.wikipedia.org/wiki/Schmitt-Trigger

von Schlumpf (Gast)


Lesenswert?

Wenn ich das Bild richtig interpretiere, dann stellt ein "Paket" dieser 
Zacken ein Ereignis dar, das du erfassen möchtest.
Und die Periode zwischen diesen Pakten kann so kurz werden (maximale 
Drehzahl), dass diese Pakete dann quasi überlappen?
Oder warum scheidet die Lösung mit dem Monoflop aus?
Von welchen Zeiten reden wir hier überhaupt?
Kannst du die Zeitachse mal skalieren?

von H.Joachim S. (crazyhorse)


Lesenswert?

Geh an die Primärseite der Zündspule.

von F. P. (pl504)


Lesenswert?

@Schlumpf:
Bei dem Drehzahlbereich kann man sich das leicht ausrechnen, d.h. 2 
Impulse pro Drehung. Das Bild stellt etwas mehr als eine Umdrehung dar. 
Das Problem mit dem Monoflop hast Du richtig erfaßt.

@Gandalf:
Problem ist, daß die Spannung auch etwas drehzahlabhängig ist. Also doch 
eher Richtung Komparator gehen?

: Bearbeitet durch User
von Schlumpf (Gast)


Lesenswert?

..und noch ne Frage:
Ist die Dauer, wie lange das Signal so rumzickt (oder zackt) immer 
gleich lang, oder ist das abhängig von der Drehzal?

Falls es abhängig von der Drehzahl ist, wird es hart ;-)
Aber das könnte man dann eventuell durch Komparatoren und einen kleinen 
Zustandsautomaten lösen.

Die erste Nadel löst einen Interrupt aus.
Im Interrupt wird eine Variable gesetzt.
Die zweite löst ebenfalls einen Interrupt aus und setzt eine weitere 
Variable
die negative Nadel löst wieder einen Interrupt aus.
im Interrupt wird dann geprüft, ob die beiden Variablen für die positive 
Nadel gesetzt sind und dann wird der Timer gestartet und die beiden 
Variablen zurückgesetzt.

Falls der Controller dafür zu langsam ist, liese sich sowas auch mit ein 
paar FF und Gatter extern aufbauen

von Schlumpf (Gast)


Lesenswert?

F. P. schrieb:
> Bei dem Drehzahlbereich kann man sich das leicht ausrechnen,

richtig.. aber deswegen weiss man immer noch nicht, wie lange diese 
Bursts jetzt tatsächlich sind.. Sprich: Welche Drehzahl ist abgebildet?

von F. P. (pl504)


Lesenswert?

Das Signal ist drehzahlabhängig im Zeitbereich gestreckt oder gestaucht, 
Spannung ist nur untenrum etwas mau. Das Bild kann sowohl bei 1000 als 
auch bei 10000 Umdrehungen aufgenommen worden sein, da siehste praktisch 
keinen Unterschied.

Negative Impulse werden schwierig, da müßte ein PNP genommen werden, der 
dann bei einem negativen Impuls durchschaltet.

: Bearbeitet durch User
von Sascha (Gast)


Lesenswert?

Versuch mal nen Hochpassfilter.

von Schlumpf (Gast)


Lesenswert?

F. P. schrieb:
> da siehste praktisch
> keinen Unterschied.

Alles klar.
Nun, wenn das Bild immer das Gleiche ist, dann hilft jegliche Art der 
Filterung mit einer festen Zeit nichts.

Dann könnte man entweder über einen adaptiven Filter nachdenken (wie 
auch immer der aussehen mag) oder darüber, das Muster als solches zu 
erkennen (wie z.B. in meinem Vorschlag)

Du schreibst, dass du bei der Methode, zwei Messungen zu machen und die 
Zeiten zu addieren, Bedenken hast, dass immer beide Impulse erkannt 
werden.
Wenn du das anzweifelst, dann wird es aber langsam echt haarig.
Denn eine Filterung ist ja nicht ohne weiteres möglich und wenn du dir 
nicht sicher bist, ob du immer zuverlässig beide Impulse des Burst 
erkennen kannst, dann wird auch eine "Mustererkennung" nicht zuverlässig 
funktionieren.

Dann fällt mir leider auf die Schnelle auch nichts Vernünftiges mehr ein

von Schlumpf (Gast)


Lesenswert?

Ist sichergestellt, dass der zweite Impuls immer etwas niedriger ist, 
als der erste?
Und wenn ja, von welchem Unterschied (V) reden wir da?

Wenn da ein gewisser Unterschied sichergestellt ist, dann tut´s doch ein 
ganz simpler Komparator.

von F. P. (pl504)


Lesenswert?

Mir ist gerade eine Idee gekommen. Ich kann das Signal mit Dioden mit 
der Hochspannungs-Ladespule UND-verknüpfen. Der Sinus dieser Spule ist 
stets phasenrichtig und liegt genau so, daß der zweite Geberimpuls 
ausgelöscht (nach negativen Spannungswerten hin runtergezogen) wird.

Ich würde sagen: Problem gelöst. :)
Danke an alle für die rege Beteiligung!

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

F. P. schrieb:
> Mir ist gerade eine Idee gekommen. Ich kann das Signal mit Dioden mit
> der Hochspannungs-Ladespule UND-verknüpfen. Der Sinus dieser Spule ist
> stets phasenrichtig und liegt genau so, daß der zweite Geberimpuls
> ausgelöscht (nach negativen Spannungswerten hin runtergezogen) wird.

 Ja.
 Es könnte auch einfacher gehen:

     Variable xyz in main() auf Null setzen, Interrupts erlauben.

     Bei der ersten steigenden Flanke in der ISR Variable erhöhen,
     Wert prüfen, wenn kleiner 2, Timer starten.
     .
     Bei der zweiten Flanke Variable erhöhen, Wert prüfen, wenn
     kleiner 3, nur Guten Tag sagen und wieder raus.

     Bei der dritten Flanke Variable erhöhen, Wert prüfen, wenn
     gleich 3, Timerwert übernehmen, Timer wieder auf Null
     setzen, Variable xyz auf 1 setzen.

 Und wieder von vorne...

 P.S.
 Und das der erste Impuls erkannt wird, aber der zweite nicht, ist
 sowas von unwahrscheinlich...

von F. P. (pl504)


Lesenswert?

Deine Idee klingt nicht schlecht. Ich bin generell dafür, sowas eher in 
Soft- als in Hardware zu realisieren. :)
Werde mich die Woche mal dransetzen und mich für eine Lösung 
entscheiden.

Edit:
Die Gefahr könnte sein, daß nicht bei der ersten Flanke, sondern bei der 
zweiten begonnen wird. Dann mißt man nicht die lange Zeit zwischen den 
zwei beieinanderliegenden Impulsen, sondern die kurze. Oder man müßte 
wirklich 2x messen und dann einfach addieren. So kann man die richtige 
Flanke auch durch Vergleich der beiden erhaltenen Timerwerte 
identifizieren.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

F. P. schrieb:
> Die Gefahr könnte sein, daß nicht bei der ersten Flanke, sondern bei der
> zweiten begonnen wird. Dann mißt man nicht die lange Zeit zwischen den
> zwei beieinanderliegenden Impulsen, sondern die kurze. Oder man müßte
> wirklich 2x messen und dann einfach addieren. So kann man die richtige

 Ist egal bei welcher Flanke du anfängst, zeitlicher Abstand zwischen
 ersten und dritten Flanke wird gemessen. Es steht dir natürlich frei,
 die neuaufgenommene Zeit mit der vorhergehenden zu vergleichen, wenn
 der Unterschied zu gross ist, aktuelle Messung einfach vergessen...

: Bearbeitet durch User
von Gad Z. (gad)


Lesenswert?

Ich würde das ganz einfach mit einer Totzeit machen.
Deine Drehzahl geht bis maximal 12000U/min.
Dann ist die minimale Zeit zwischen 2 "wirklichen" Impulsen 5ms.
Wenn deine 2 positiven Spitzen einen geringeren Zeitabstand haben als 5 
ms, dann nimmst du als Totzeit einfach einen Mittelwert zwischen dem 
Zeitabstand der Spitzen und 5ms.
Wenn die Spitzen auch mehr als 5 ms haben konnen (bei niedrigen 
Drehzahlen), dann wird es schwieriger.
Du müsstest dann die Totzeit anhand der letzten gemessenen Drehzahl 
ermitteln.

Wenn du dann die erste positive Spitze erfasst hast im Interrupt, 
startest du die Totzeit.
Bei jedem weiteren Interrupt wird alles ignoriert solange die Totzeit 
noch läuft.
Damit würde immer der erste Impuls die Drehzahlerfassung machen.

von spontan (Gast)


Lesenswert?

Zu allererst würd ich mal klären, wie das Signal wo abgenommen ist.
Probleme werden an der Wurzel gepackt, nicht wo anders.

Alles andere ist rumdoktern an einen Kurvenform, die sich mit der 
Drehzahl und vielleicht auch noch durch andere Umstände verändert.

So wird das nix.

Also: Wo wird das Signal wie abgenommen?

von Gad Z. (gad)


Lesenswert?

>spontaner gast:
Ganz oben im ersten beitrag steht:
"Für eine elektronische Zündung möchte ich gerne das Gebersignal
auswerten".

Der damit ist schon gesagt woher das Signal kommt und wenn der Geber 
keine Wurzel ist, dann weiss ich auch nicht mehr...

von m.n. (Gast)


Lesenswert?

F. P. schrieb:
> Hat einer ne Idee, wie man am besten damit umgeht?

Per ADC bipolar einlesen, quadrieren (gleichrichten) und filtern 
(Tiefpass bzw. gleitender Mittelwert).
Sofern die Amplitude zu sehr schwankt, die Vergleichsschwelle und 
Hysterese anhand des Maximums anpassen.

F. P. schrieb:
> Ich bin generell dafür, sowas eher in
> Soft- als in Hardware zu realisieren. :)

Nur zu!

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

m.n. schrieb:
> Per ADC bipolar einlesen, quadrieren (gleichrichten) und filtern
> (Tiefpass bzw. gleitender Mittelwert).
> Sofern die Amplitude zu sehr schwankt, die Vergleichsschwelle und
> Hysterese anhand des Maximums anpassen.

 Danach das Ganze mit einem Oszi aufnehmen, mit Bildauswertung-Software
 die aufgenommene Kurve am Oszi-Bildschirm auswerten, mithilfe der
 Polynome bisschen glätten und dann im Programm weiterverarbeiten...

von m.n. (Gast)


Lesenswert?

Marc Vesely schrieb:
> Danach das Ganze mit einem Oszi aufnehmen, mit Bildauswertung-Software
>  die aufgenommene Kurve am Oszi-Bildschirm auswerten, mithilfe der
>  Polynome bisschen glätten und dann im Programm weiterverarbeiten...

Die Frage war, wie man am besten mit solchen Signalen umgeht und nicht 
wie am aufwendigsten.

Marc Vesely schrieb:
> Es könnte auch einfacher gehen:

Sag ich doch.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

m.n. schrieb:
> Marc Vesely schrieb:
>> Es könnte auch einfacher gehen:
>
> Sag ich doch.

 Ich auch.

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.