www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Umdrehungszeitmesser


Autor: Stefan Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Matthias

Autor: Stefan Peter (Gast)
Datum:

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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.