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