AVR Impulse zählen

OP #2067621
Lesenswert?

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?
OP #2067659
Lesenswert?

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.
#2067665
Lesenswert?

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ß
OP #2067685
Lesenswert?

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!
Gast #2067748
Lesenswert?

> 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.
#2068014
Lesenswert?

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.
#4853101
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren