www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Impulse zählen


Autor: Andreas H. (heilinger)
Datum:

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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nennt sich Capture-Eingang, soweit ich weiß. Gibt es.

Autor: SebX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
6500 U/min => 109 U/sec

Dein Controller taktet doch bestimmt mit mindestens 2Mhz, was spricht 
dagegen irgendeinen Eingang zu pollen?

Autor: Andreas H. (heilinger)
Datum:

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

Autor: Joachim B. (jojo84)
Datum:

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

Autor: Andreas H. (heilinger)
Datum:

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

Autor: Kai S. (zigzeg)
Datum:

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

Autor: Andreas H. (heilinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo, ich weiss...

Bei 217 U/sec ist jeder Pegel ca. 4,6ms lang, daher sollte das 
hinhauen...

Autor: Helfer (Gast)
Datum:

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

Autor: Andreas H. (heilinger)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Andreas H. (heilinger)
Datum:

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

Autor: Markus B. (up_marki)
Datum:

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

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.