Du könntest einen Counter nehmen und diesen Wert mit nem Vorgängerwert nach einer Zeit X vergleichen.
MfG JoeBlack
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
Du könntest einen Counter nehmen und diesen Wert mit nem Vorgängerwert nach einer Zeit X vergleichen.
MfG JoeBlack
Hallo
Eventuell ist ein retriggerbares Monoflop verwendbar.
(in Hard- oder Software)
Mit freundlichen Grüßen
Benno
Wo man nicht mit Vernunft handelt, da ist auch Eifer nichts nütze; und wer hastig läuft, der tritt fehl.
Ein König richtet das Land auf durchs Recht; wer aber viel Steuern erhebt, richtet es zugrunde
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?
Ciao sagt der JoeamBerg
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
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
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.Zitat von dremler
Grüße
Elias
Lesezeichen