Ja und nein.Gut, das habe ich schon erwartet. Ich habe mir auch schon ein paar Gedanken über das Auswertungsverfahren gemacht. Es gibt ja prinzipiell zwei Möglichkeiten die Geschwindigkeit zu bestimmen:
I) Man misst die Anzahl der Flanken in einem bestimmten Zeitraum
II) Man misst den zeitlichen Abstand zweier Flanken
Tendenziell würde ich letztere verwenden, da man wohl nicht so lange "warten" muss, bis die "Geschwindigkeit" ermittelt ist: Nur einen Puls statt mehrerer - was speziell bei wenigen Umdrehungen/Minute vorteilhaft sein kann (liege ich da richtig?).
Das Verfahren II geht gut, wenn die Abstände zweier Peaks auch recht genau einem bestimmten Drehwinkel entsprechen. Bei Bastleraufbauten ist das mit der Präzision immer so eine Sache, die selbstgebaute Dekoderscheibe ist vielleicht nicht ganz zentrisch zur Achse oder hat einen leichten Schlag.
In so einem Fall kommen die Peaks jedesmal mit einer etwas anderen Zeitdifferenz, obwohl die Geschwindigkeit konstant ist.
Verfahren I ist da robuster, weil es solche Fehler über mehrere Impulse mittelt. Man kann diese Mittelung bei Verfahren II über Software machen, verliert dabei aber den Vorteil der kürzeren Totzeit.
Das klingt so, als ob Du über den Analogeingang einlesen willst. Scheint mir eher aufwendig zu sein.Ich würde also alle X Millisekunden einen Sensorwert nehmen (Timer-Interrupt) und in einem Array speichern. Sobald ich zwei Peaks rauslesen kann rechne ich aus, wieviele Sensorwerte dazwischen liegen.
Mein Vorschlag:
Lege das Signal an einen Digitaleingang an. Das hat den Vorteil, daß man einen flankengetriggerten Interrupt auslösen kann. Bei jedem Interrupt liest man ein Zählerregister aus und bildet die Differenz zum Zählerregisterwert des letzten Interrupts. Die Differenz ist dann proportional zur Zeit zwischen 2 Impulsen. Nur für sehr lange Zeitdifferenzen (Robo steht) muß man sich etwas einfallen lassen, weil es dann zum Timerüberlauf kommt. (entspricht Verfahren II)
Falls Du nach Verfahren I auswerten willst, wird pro Interrupt nur ein Register inkrementiert. Bei Zählerüberlauf wird der Registerinhalt in eine Variable "Geschwindigkeit" geschrieben. Hier stellt sich das Problem der Mindestgeschwindigkeit nicht.
Lesezeichen