PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Drehzahl abfragen "Dreht", "Dreht nicht"



maker7
28.06.2010, 14:46
Hallo,

ich habe jetzt schon einiges hier gelesen und auch selber probiert. Bin aber zu keiner sauberen Lösung meines Problems gekommen.

Ich habe einen Motor der mit einer Drehzahl von ca. 5400rpm läuft, bei jeder Umdrehung gibt mir ein Sensor ein kurzes Signal an den MC.
Im Programm möchte ich dieses Signal nun abfragen und in einen Merker schreiben. Also MotorOK=1 oder MotorOK=0.
Drehzahlschwankungen treten am Motor so gut wie keine auf es muss also wirklich nur auf "Dreht", "Dreht nicht" abgefragt werden. Und diese Abfrage sollte permanent und mit minimalster Verzögerung laufen.

Bin über jegliche Hilfe und Anhaltspunkte dankbar.

Laufen sollte das ganze auf einen 8515.

Grüße
Elias

JoeBlack
28.06.2010, 15:59
Du könntest einen Counter nehmen und diesen Wert mit nem Vorgängerwert nach einer Zeit X vergleichen.

MfG JoeBlack

Yossarian
28.06.2010, 17:03
Hallo
Eventuell ist ein retriggerbares Monoflop verwendbar.
(in Hard- oder Software)
Mit freundlichen Grüßen
Benno

oberallgeier
28.06.2010, 18:06
EINE der vielen Möglichkeiten:

5400 Upm sind 11 ms pro Umdrehung
1) Timer aufbauen mit 1 ms (evtl. weniger)
2) ISR des Timers zählt eine Variable pro Interrupt um eins hoch. Ist der Wert über 15 (oder 20 oder so), dann Fehlerflag setzen und Variable nullen.
3) Motorsensorsignal an PD2 oder PD3 = INT0 oder ~1
4) ISR des External Interrupts schaut nach dem Zählerstand der Timervariablen. Ist der deutlich über 11, dann dreht der Motor zu langsam - also Fehlerflag setzten. Ansonsten Timerwert nullen und zurück.

Verzögerung der Fehlermeldung also ca. 20 ms.

OK?

guenter1604
28.06.2010, 22:05
Einen Timer mit Interrupt konfigurieren
-den Timer starten
-mit einem externen Interrupt den Timer immer wieder auf Null setzen
-läuft der Timer über, weil Impulse fehlen, kommt der Timeroverflowinterrupt und es kann reagiert werden.

Da hier nur Register gesetzt werden, dürfte der Code sehr schnell sein.
Die gewünschte Zeit bis zum Interrupt kann dadurch verändert werden, indem nicht auf Null zurückgesetzt wird, sondern auf einen höheren Wert.

Günter

maker7
07.07.2010, 21:08
Danke vielmals, habe es jetzt mit dem Timer gemacht, welcher durch die Impulse vom Sensor zurück gesetzt wird.

Klappt super und ich habe eine, ohne Weiteres, nicht messbare Reaktionszeit.

Grüße
Elias

dremler
07.07.2010, 22:35
einfachste lösung: magnet ran spule dahinter un ne diode..spannung messen;) (ev. glätten)

maker7
09.07.2010, 16:05
einfachste lösung: magnet ran spule dahinter un ne diode..spannung messen;) (ev. glätten)

Auch das wäre ein durchaus praktikable Lösung. In meinen Fall leider nicht mehr zu realisieren, da meine "Motor-Sensor-Einheit" konstruktiv nicht mehr verändert werden kann.

Grüße
Elias