Forum: Mikrocontroller und Digitale Elektronik Auslesen des Tachosignals bei PWM-Lüfter mit STM32


von Mirco S (Gast)


Lesenswert?

Hallo,

im Rahmen eines Schulprojekts programmieren wir eine Temperaturregelung 
mittels des STM32VLDiscovery-Board. Auf diesem ist ein 
STM32F100RB-Controller verbaut.
Zur Kühlung nutzen wir einen PWM-Lüfter, welcher ein Tachosignal an dem 
einen Anschluss liefert. Dieses Signal wird mittels Pull-Up-Widerstand 
gegen Versorgungsspannung gezogen und es entsteht eine schöne 
Rechteckfolge (funktioniert auch, haben es uns auf dem Oszi angesehen).
Verbunden ist dieses Pin mit einem Quadratur-Encoder-Pin des STM32.
Unsere Idee war es also zum Beispiel die steigenden Flanken über einen 
bestimmten Zeitraum zu zählen und dann auf eine Minute hochzurechnen. 
Damit hätte man ja in etwa die Drehzahl des Lüfters ermittelt. Wir 
wissen auch, dass der Lüfter zwei Flanken pro Umdrehung liefert.
Jetzt zu unserem eigentlichen Problem. Wir erhalten keine sinnvollen 
Werte beim Auslesen des Encoders. Entweder enthält der Counter eine 0, 
oder den Wert der definierbaren Obergrenze oder aber er zählt 
hintereinander weg, auch wenn kein Lüfter angeschlossen ist.
Hat jemand schon mal ein ähnliches Problem gehabt oder ist gar unser 
Lösungsansatz so nicht machbar?
Wie kann man denn solch ein Tachosignal sinnvoll zählen/messen?
Bin euch sehr dankbar für eure Hilfe.

Grüße Mirco

von Gerd E. (robberknight)


Lesenswert?

Mirco S schrieb:
> Verbunden ist dieses Pin mit einem Quadratur-Encoder-Pin des STM32.

Die sind eigentlich für richtige Quadratur-Encoder mit 2 Leitungen 
gedacht. Damit kann man genauere Daten und vor allem noch die 
Richtungsinformation bekommen. Nen PC-Lüfter hat aber nur nen simples 
Tachosignal, kein Quadratur-Ausgang. Vermutlich bekommt Ihr daher keine 
Daten.

Außerdem ist der PC-Lüfter für so einen STM32 sowas von langsam daß Du 
das am einfachsten wohl an jedem beliebigen Pin mit nem 
Pinchange-Interrupt machen kannst. Oder auch stumpf pollen wenn der 
STM32 nicht viel anderes zu tun hat.

Du brauchst also nicht die Quadratur-Auswertungshardware von dem STM32, 
sondern kannst es quasi "von Hand" machen.

> Unsere Idee war es also zum Beispiel die steigenden Flanken über einen
> bestimmten Zeitraum zu zählen und dann auf eine Minute hochzurechnen.

Die Lüfter sind langsam (im Vergleich zum STM32) und das Tachosignal 
meist etwas ungenau. Dagegen hilft ein einfacher Filter (z.B. gleitender 
Durchschnitt). Ich würde daher so viele Daten nehmen wie ich bekommen 
kann. Also nicht nur steigende oder fallende Flanken, sondern beide 
Flanken zählen. Dann hast Du 4 Signale pro Umdrehung als Input für 
Deinen Filter, das ist besser als 2.

von Gregor B. (Gast)


Lesenswert?

Nimm den Timer, benutze aber nicht den Encoder-Modus, sondern den Input 
Capture Modus.
Damit kannst Du die Zeit zwischen zwei Impulsen messen und dann auf 
Umdrehungen pro Minut umrechnen.

von Mirco S. (mirco_s)


Lesenswert?

Danke für die schnelle Antwort.

Wir haben es jetzt nach deinem Vorschlag gelöst.
Also die Flanken (steigend und fallend) des Tachosignals mittels 
externem Pin-Change-Interrupt zählen und diese Variable nach einer 
definierten Zeitspanne auslesen.
Diesen Wert dann durch viel Teilen (da pro Umdrehung bei zwei Sensoren 4 
Flanken existieren) und auf eine Minute hochrechnen.

Klappt super, vielen Dank.

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
Noch kein Account? Hier anmelden.