Forum: Mikrocontroller und Digitale Elektronik Umdrehungszeitmesser


von Stefan Peter (Gast)


Lesenswert?

Hallo!

Ich möchte mittels einer Lichtschranke die Umdrehungsgeschw. eines
Rades herausfinden. Nun zwei Fragen:
1. Ich habe einmal ein Bauteil gesehen mit welchem man eine modulierte
IR-Lichtschranke mit minimaler externer Beschaltung realisieren kann.
Kennt jemand einen Solchen Baustein und evtl noch einen Schaltplan?
2. Hat das schon mal einer Softwaremässig realisiert? Ich denke, dass
ich die Lichtschranke an einen externen Interrupt anschliesse und die
Zeit zwischen zwei Interrupts messe (mittels 16-bit Timer). Nun die
Frage: Wie muss ich das mit dem Timer genau anstellen, bzw. einstellen?

Ich benutze den ATmega8

Grüsse und danke
Stefan

von Chris (Gast)


Lesenswert?

Wieso Interrupt? Du kannst doch auch den Impuls der Lichschranke auf
einen Freuqenz-Voltage decoder leiten, dieser gibt dir dann
proportional zur frequnz eine Spannung aus, die du wiederum mit deinem
AD-Wandler auswerten kannst.

Gruß
Chris

von crazy horse (Gast)


Lesenswert?

naja, das ist wohl nicht der Hit...
Digitales Signal mit einem teuren Baustein in ein analoges Signal
verwandeln und das dann wieder digitalisieren??
Abgesehen vom Aufwand entstehen bei jeder Wandlung Fehler.
Zur Lösung: das Signal an den ICP-Eingang, Timer durchlaufen lassen mit
höchster Frequenz (oder auch Vorteiler bei langsamen Signalen).
In der ICP-ISR bildest du einfach die Differenz des alten ICP zum
aktuellen, anschliessend noch den neuen Stand Variable alter_ICP
speichern. Nur mit 16bit-unsigned-Variablen arbeiten, dann brauchst du
dich nicht mal um den Timer-Überlauf kümmern, das Ergebnis stimmt auch
bei zwischenzeitlichem Überlauf. Falsch wirds erst, wenn der Timer
zwischen 2 ICP-Ereignissen 2 oder mehrmals überläuft. Ist das möglich,
kann man das auch per Software lösen.

von Matthias (Gast)


Lesenswert?

Hi

oder man setzt im ICP-INT den Timer wieder auf 0 zurück. Dann kann man
mit dem OV-INT auch feststellen ob die Frequenz ein Minimum
unterschritten hat. So mach ich das zumindest immer und hab gute
Erfahrungen damit gemacht. Bei deiner Methode muß man das Auftreten
eines Stillstandes irgendwie anders erkennen.

Zur Lichtschranke:
Eine Senddiode mit 36kHz modulieren (Einfach mit 36kHz ein/ausschalten)
Als Empfänger dann einen TSOP1736.

Matthias

von crazy horse (Gast)


Lesenswert?

ist im Prinzip richtig, aber es können sich Fehlerquellen einschleichen,
wenn auch andere Ints laufen. Rücksetzen auf 0 kommt verspätet, den
systematischen Fehler kann man ausgleichen, nicht jedoch, wenn der MC
gerade andere Ints bearbeitet. Diese Fehlerquellen entfallen bei meiner
Methode, ausserdem kann der Timer1-OV als fester Zeitgeber für andere
Programmteile genutzt werden.
Aber: es führen wie immer mehrere Wege nach Rom :-)

von Matthias (Gast)


Lesenswert?

Hi

Stmmt. Ich erfasse mit dieser Methode hauptsächlich langsame Frequenzen
(Timer läuft im /8 Modus) Bei der schnellsten zu erwartenden Frequenz
von etwa 500Hz hab ich bei 1MHz Abtastung immer noch einen ICR-Wert von
2000. Wenn da mal 30 oder 40 Takte verlorengehen macht das so in etwa
garnichts. Man muß eben abwägen was wichtiger ist: Genaue Erfassung der
Frequenz oder schnelle Erfassung wenn kein Signal mehr anliegt. Bei mir
ist zweiteres wichtiger.

Matthias

von Stefan Peter (Gast)


Lesenswert?

OK, da ich alle anderen Interrupts ausschalten kann nehme ich wohl die
Methode dass ich bei jedem Interrupt den Timer auf 0 zurücksetze und
dann beim nächsten interrupt den Zählerstand abspeichern und wieder auf
null zurücksetzen, so sollte es dann laufen. Was passiert wenn der
Timer überläuft? Gibt es da einen Interrupt oder kann man das sonst
irgendwie schön abfangen?

Danke für eure Hilfe

von Matthias (Gast)


Lesenswert?

Hi

ja. Dazu verwendest du den OV-INT des Timers.

Matthias

von Stefan Peter (Gast)


Lesenswert?

OK danke!!
Ich meld mich dann nochmals, wenn ich Probleme mit dem Programm habe!

von crazy horse (Gast)


Lesenswert?

@matthias:
gerade noch mal in alten Programmen nachgeschaut, in der ICP-ISR wird
ein Register gelöscht, in der T1_ov-ISR wird es incrementiert und auf
>1 getestet. Wenn ja -> Signalausfall.
Ausserdem wurde eine OCR-PWM benutzt, Pin_set on T1_OV, Pin_clr on
T1_OCR.

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.