Hallo, ich möchte einen Lüfter überwachen, der einen "Tacho" eingebaut hat. Der Lüfter dreht sich mit ca. 6500 U/Min und liefert pro Umdrehung 2 Impulse. Ich benutze einen ATmega1284P. Habe ich denn die Möglichkeit bei jedem Impuls einen Zähler aufzuaddieren und nach einer bestimmten Zeitspanne diesen Zähler auszulesen und zurückzusetzen? Oder muss ich da jedes mal nen Interrupt ausführen?
6500 U/min => 109 U/sec Dein Controller taktet doch bestimmt mit mindestens 2Mhz, was spricht dagegen irgendeinen Eingang zu pollen?
ja, mein Controller läuft mit 20MHz. Bei 6500 U/Min und 2 Impulsen pro Umdrehung sind das 13000 Impuls pro Minute = 217 U/sec. Das bedeutet jede 4-5 ms einen Impuls. Da könnte ich natürlich jede Milliskeunde einfach nen Eingang abfragen, stimmt. Auf diese Idee bin ich noch nicht gekommen. Mit dem Zähler halte ich es trotzdem für eleganter. Diese "Input Capture Unit" steht im Zusammenhang mit den 16-bit Timern. Davon besitzt der ATmega1284P 2, jedoch verwende ich beide 16-bit-Timer, weswegen diese Lösung wohl ausfallen muss.
Du kannst doch auch jeden anderen Timer nehmen. Über eine bestimmte Zeit die Impulse zu zählen ist nicht sooo sinnvoll, weil du dann ja diese Zeit immer abwarten mußt. Besser ist eigentlich die Zeit zwischen zwei Impulsen zu stoppen und daraus dann die Impulse/Zeiteinheit zu errechnen. Das wäre dann so: 1. Impuls kommt, TimerX starten 2a. nächster Impuls kommt, TimerX auslesen und 2b. resetten 3. Impulse/Zeiteinheit ausrechnen Klar soweit? Gruß
Naja, ich werde es so machen: Da ich eh schon einen 1kHz-Interrupt ausführe, werde ich jede ms den Eingang abfragen und bei Pegelwechsel am Eingang ne Variable eins hochzählen. Und dann nach 1 Sekunde einfach schauen wie hoch der Zähler gelaufen ist, dann habe ich genau die Umdrehungen pro Sekunde. Es ist ja keine zeitkritische Aufgabe, es geht nur darum zu erkennen, ob der Lüfter sich dreht oder nicht, und das kann auch ruhig eine Sekunde später ausgewertet werden. Danke für die Antworten!
Andreas Heil schrieb: > Naja, ich werde es so machen: > > Da ich eh schon einen 1kHz-Interrupt ausführe, werde ich jede ms den > Eingang abfragen und bei Pegelwechsel am Eingang ne Variable eins > hochzählen. Sind den die Impulse des Luefters denn mindestens 1ms lang ? Sonst wird das wohl eher nicht funktionieren.
jo, ich weiss... Bei 217 U/sec ist jeder Pegel ca. 4,6ms lang, daher sollte das hinhauen...
> Bei 217 U/sec ist jeder Pegel ca. 4,6ms lang, daher sollte das > hinhauen... Nicht unbedingt, Kai hat da schon Recht. Theoretisch könnte ja pro Umdrehung ein superkurzes Pling vom signalgeber kommen und das könntest du beim Pollen ganz leicht verpassen.
ne, also die low- und die high-Phasen sind gleich lang... Also für ne halbe umdrehung gibts nen high-Pegel, für die andere halbe Umdrehung nen low-Pegel und dann wieder von vorne...
Andreas Heil schrieb: > Es ist ja keine zeitkritische Aufgabe, es geht nur darum zu erkennen, ob > der Lüfter sich dreht oder nicht, und das kann auch ruhig eine Sekunde > später ausgewertet werden. Wozu dann überhaupt die Drehzahl explizit bestimmen? Du hast einen Eingangspin, Du willst wissen ob an diesem Pin Pulse vorhanden sind oder nicht. Als Pin einen Interrupt Eingang wählen, der bei einer Flanke auslöst. In der zugehötrigen ISR wird ein Zähler auf (Hausnummer) 255 gesetzt. In deiner bereits vorhandenen Timer ISR wird dieser Zähler immer um 1 erniedrigt (wenn er nicht schon 0 war). Erreicht der Zähler irgendwann tatsächlich 0, dann hat es für 255 * 1Millisekunden offenbar keinen Pin-Interrupt gegeben -> der Lüfter steht -> Warnlampe einschalten/Sirene heulen lassen/SMS an Obama schicken.
naja, ich will die Frequenz ja auch wissen, da der Lüfter einen gewissen Volumenaustausch garantieren soll. Und dies kann er eben nur, wenn er sich schnell genug dreht.
Karl Heinz schrieb: > Als Pin einen Interrupt Eingang wählen, der bei einer Flanke auslöst. In > der zugehötrigen ISR wird ein Zähler auf (Hausnummer) 255 gesetzt. In > deiner bereits vorhandenen Timer ISR wird dieser Zähler immer um 1 > erniedrigt (wenn er nicht schon 0 war). Erreicht der Zähler irgendwann > tatsächlich 0, dann hat es für 255 * 1Millisekunden offenbar keinen > Pin-Interrupt gegeben -> der Lüfter steht -> Warnlampe > einschalten/Sirene heulen lassen/SMS an Obama schicken. Hallo Karl Heinz Nach fast 6 Jahren mal frischer Wind in das Ventilator-Thema :-) Den Lösungsansatz finde ich toll. Möchte ich auch so machen. Die Frage, die sich mir jetzt stellt ist: Muss ich die SMS an Obama oder neu an Trump schicken? Hast Du auch noch die Nummer? P.S. Ist das Projekt zum Laufen gekommen? Und läuft es nach 6 Jahren noch? Gruss up_marki
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.