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
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
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?
@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
..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
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?
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
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
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.
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
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...
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
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
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.
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?
>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...
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!
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...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.