Hallo,
ich will das Speed-Signal eines Lüfters mit einem uC auswerten.
Der Speedsensor hat lt. Datenblatt einen Open Collector Ausgang.
Der uC hat am Eingangspin den internen Pullup aktiviert (5V).
Wenn der Speedsensor direkt an den uC-Pin angeschlossen wird, wird das
LOW nicht erkannt, weil der Speedsensor-Ausgang den Pin nur auf ca. 2,5V
herunterzieht.
Was wäre nun die beste Vorgehensweise?
Noch einen BiPo als Emitterfolger dazwischen?
Oder den internen Pullup (ca. 40k) deaktivieren und einen externen
Pullup-Widerstand (ca. 120k) ausprobieren?
> Wenn der Speedsensor direkt an den uC-Pin angeschlossen wird, wird das> LOW nicht erkannt, weil der Speedsensor-Ausgang den Pin nur auf ca. 2,5V> herunterzieht.
Das wäre eher ungewöhnlich,
üblicherweise schafft der das sogar bei 10k pull up.
Ist auch Masse vom Lüfter mit Masse vom uC verbunden ?
Michael H. schrieb:>> Speedsensor-Ausgang den Pin nur auf ca. 2,5V>> herunterzieht.> Wie hast du das gemessen?
Zum einen habe ich geguckt, ob das LOW erkannt wird (wurde nicht, s.o.)
und dann habe ich mit einem Multimeter geguckt, was die niedrigste
Spannung ist, die am Pin anliegt (mit Min/Max-Funktion des Multimeters).
Ist etwas grob, zugegeben.
MaWin schrieb:>> Wenn der Speedsensor direkt an den uC-Pin angeschlossen wird, wird das>> LOW nicht erkannt, weil der Speedsensor-Ausgang den Pin nur auf ca. 2,5V>> herunterzieht.>> Das wäre eher ungewöhnlich,> üblicherweise schafft der das sogar bei 10k pull up.>> Ist auch Masse vom Lüfter mit Masse vom uC verbunden ?
Ist aber leider so. Die Massen sind richtig verbunden. uC und Lüfter
werden vom selben NT versorgt (der uC über einen zwischengeschalteten
7805).
Im Datebblatt steht noch, dass der R so gewählt sein soll, dass weniger
als 10mA durch ihn fließen.
rob_gold schrieb:> Spannung ist, die am Pin anliegt (mit Min/Max-Funktion des Multimeters).> Ist etwas grob, zugegeben.
das multimeter ist viel zu langsam, um sowas zuverlässig zu erkennen.
die messung hat keine aussagekraft.
dreh den lüfter mal per hand auf den sensor und miss dann.
> Im Datebblatt steht noch, dass der R so gewählt sein soll, dass weniger> als 10mA durch ihn fließen.
eben... und welcher strom stellt sich bei 5V über 40k ein?
Michael H. schrieb:> dreh den lüfter mal per hand auf den sensor und miss dann.
Gute Idee!
Michael H. schrieb:>> Im Datebblatt steht noch, dass der R so gewählt sein soll, dass weniger>> als 10mA durch ihn fließen.> eben... und welcher strom stellt sich bei 5V über 40k ein?
Nach U = R * I dürften es etwa 0,125mA sein.
Das heißt dann ... ???
rob_gold schrieb:> Michael H. schrieb:>> dreh den lüfter mal per hand auf den sensor und miss dann.>> Gute Idee!
nachgemessen?
>>> Im Datebblatt steht noch, dass der R so gewählt sein soll, dass weniger>>> als 10mA durch ihn fließen.>> eben... und welcher strom stellt sich bei 5V über 40k ein?>> Nach U = R * I dürften es etwa 0,125mA sein.> Das heißt dann ... ???
denk mal n paar minuten konzentriert darüber nach...
MAXIMAL 10mA dürfen fließen. dein strom ist viel kleiner.
> Mit 1k oder 120k als Pullup (in dem Falle extern) funktioniert es> übrigens auch nicht.
natürlich nicht.
Danke Schlumpf, der Pin ist richtig konfiguriert und reagiert auf
angelegte Spannungen entsprechend.
Michael H. schrieb:>>> dreh den lüfter mal per hand auf den sensor und miss dann.>>>> Gute Idee!> nachgemessen?
Noch nicht, zum Handdrehen muss der Lüfter erst wieder ausgebaut werden
>>>> Im Datebblatt steht noch, dass der R so gewählt sein soll, dass weniger>>>> als 10mA durch ihn fließen.>>> eben... und welcher strom stellt sich bei 5V über 40k ein?>>>> Nach U = R * I dürften es etwa 0,125mA sein.>> Das heißt dann ... ???> denk mal n paar minuten konzentriert darüber nach...
0,125mA sind weniger als 10mA, aber etwas wenig. Bei 1k ist man mit 5mA
schon wesentlich näher dran. 510 Ohm geht aber auch nicht (das wären
9,8mA).
>> Mit 1k oder 120k als Pullup (in dem Falle extern) funktioniert es>> übrigens auch nicht.> natürlich nicht.
Was wäre denn Deiner Meinung nach der beste Wert für den Pullup-R (oder
die Lösung des Problems)?
rob_gold schrieb:> Danke Schlumpf, der Pin ist richtig konfiguriert und reagiert auf> angelegte Spannungen entsprechend.
Ach so, ich hatte das vorhin so verstanden, dass du ein LOW nicht
erkennen kannst...
rob_gold schrieb:> Zum einen habe ich geguckt, ob das LOW erkannt wird (wurde nicht, s.o.)
rob_gold schrieb:> 0,125mA sind weniger als 10mA, aber etwas wenig. Bei 1k ist man mit 5mA> schon wesentlich näher dran. 510 Ohm geht aber auch nicht (das wären> 9,8mA).
Was gefällt dir an deinen 0,125mA nicht? Ist das weniger als 10mA oder
nicht? Da steht nix von "möglichst genau". Wie soll das Ding bei höheren
Strömen den Pegel nach 0V ziehen, wenn es schon bei 0,1mA nicht
funktioniert?
Hast du die 2,5V bei drehendem Lüfter gemessen oder woher kommt der
Wert?
Schlumpf schrieb:> Kann es vielleicht sein, dass dein uC-Pin nicht auf Input, sondern auf> Output konfiguriert ist?rob_gold schrieb:> Danke Schlumpf, der Pin ist richtig konfiguriert und reagiert auf> angelegte Spannungen entsprechend.
Was meinst du mit "angelegte Spannungen"? Wenn du den Pin als Ausgang
definiert und auf "1" gesetzt hast, und du den Pin dann z.B. durch
Kurzschließen des Selben gegen Masse auf "0" ziehst, so wirst du durch
Auslesen von PINx den Pin auch als "0" auslesen. Sogar externe
Interrupts würden so noch funktionieren.
--> Poste mal deinen Code.
Danke für die vielen Antworten!!!
Magnus M. schrieb:> Was meinst du mit "angelegte Spannungen"?
Also, eine Kontroll-LED an einem anderen Port zeigt an, ob der Pin (PC3)
auf LOW gezogen wurde.
Wird an den Pin 5V angelegt, passiert nichts. Legt man 1V an oder den
Pin auf GND, wird die Kontroll-LED getriggert und leuchtet.
Der besagte Pin wurde wie folgt konfiguriert:
DDRC = ~( 1 << DDC3 ) ; // Pin C3 auf Eingang
PORTC |= (1 << PC3 ) ; // interner Pullup aktiv
Später die Abfrage:
if (PINC & ( 1 << PC3 )) {-die besagte LED wird dauerhaft
eingeschaltet-}
Vielleicht ist auch mit der Speed-Ausgabe des Lüfters irgendwas nicht in
Ordnung, kann man das irgendwie testen???
rob_gold schrieb:> Vielleicht ist auch mit der Speed-Ausgabe des Lüfters irgendwas nicht in> Ordnung, kann man das irgendwie testen???
mit dem Oszi schauen was auf dem Pin passiert?
Mit dem Multimeter kommst Du nicht weiter, das ist zu langsam.
Bekommt der Lüfter keine Versorgungsspannung, ist bei sehr vielen
Modellen auch der Speed-Ausgang unbrauchbar. Damit hilft auch von Hand
drehen nicht. Das Problem mit dem unbrauchbaren Speed-Signal hast Du
übrigens bei vielen Lüftern auch wenn Du direkt PWM an den Lüfter
anlegst um die Geschwindigkeit zu reduzieren.
Was für eine Signalform soll denn dieser Speedsensor ausgeben?
Einen Rechteck, vermute ich mal.
Und wenn der pro Umdrehung einen Impuls ausgibt, dann ist das Signal so
schnell, dass du es mit einem Multimeter nicht erfassen kannst (auch
nicht mit MinHold)... Das Multimeter zeigt dir irgendwas an..
Vermutlich misst du einfach nur Mist und dein Problem ist nicht der
Sensor, sondern deine Software, die den auswerten soll.
Wie liest du den Sensor in deiner SW ein? Pollen? Interrupt?
Capture-Unit?,...
> Bekommt der Lüfter keine Versorgungsspannung, ist bei sehr vielen> Modellen auch der Speed-Ausgang unbrauchbar.
Eigentlich bei allen, weil der Open-Drain/C-Ausgang vom Motor-IC aus
angesteuert wird. Einen zweiten Hallsensor baut da keiner ein, und
selbst wenn, bräuchte der auch eine Stromversorgung...
> Das Problem mit dem unbrauchbaren Speed-Signal hast Du> übrigens bei vielen Lüftern auch wenn Du direkt PWM an den Lüfter> anlegst um die Geschwindigkeit zu reduzieren.
Das macht man auch nicht, weil der Lüfter dann deutliche PWM-Geräusche
produziert. Entweder lautes "Rappeln" bei langsamer PWM oder Gepfeife
bei schneller. Bei ganz schneller PWM geht gar nix mehr vernünftig. Wenn
der Lüfter keinen extra PWM-Eingang hat (also diese "neuen" 4poligen
Stecker), dann ist Gleichspannungssteuerung das einzige, was wirklich
taugt. Die Gleichspannung kann man aber über eine PWM mit
nachgeschaltetem Filter (Diode, Spule, C, halt wie beim Buckregler) sehr
einfach und verlustfrei erzeugen.
BTW: Bei niedriger Versorgungsspannung (<3V) wird der Drehzahlsensor
übrigens auch nutzlos, weil es zu starke Rückwirkungen mit der
Ansteuerung gibt. Da kann es passieren, dass der Motor nicht dreht, man
aber trotzdem eine scheinbar vernünftige (hohe) Drehzahl misst.
rob_gold schrieb:> if (PINC & ( 1 << PC3 )) {-die besagte LED wird dauerhaft> eingeschaltet-}
DAS passt aber ganz und gar nicht zu:
rob_gold schrieb:> Wird an den Pin 5V angelegt, passiert nichts. Legt man 1V an oder den> Pin auf GND, wird die Kontroll-LED getriggert und leuchtet.
...
Hallo!
> ich will das Speed-Signal eines Lüfters mit einem uC auswerten.
Handelt es sich dabei um einen PC Lüfter? Wenn ja, dann kannst Du das
Tachosignal direkt auf den Mµ Pin legen und den internen Pull-Up
Widerstand verwenden – fertig.
> Vielleicht ist auch mit der Speed-Ausgabe des Lüfters irgendwas nicht> in Ordnung, kann man das irgendwie testen???
Ja, ganz einfach mit einer LED. Einfach eine LED (mit Vorwiderstand)
zwischen Vdd vom Lüfter und dem Tachosignal anschließen. Wenn der Lüfter
dreht blinkt die LED. Wenn Dir das blinken zu schnell ist, dann kannst
Du den Lüfter auch von Hand abbremsen, dann wird das blinken auch
langsamer...
Hallo,
Danke für die vielen, vielen Antworten!!!
Noch mal zur Erklärung:
Der uC soll nur feststellen, ob ein Speed Signal vorliegt.
Die Frequenz des Speed Signals muss nicht weiter ausgewertet werden.
Stromausfall am Lüfter wird auf eine andere Weise detektiert.
Der Lüfter wird übrigens nicht mit PWM sondern mit konstanten 12V
betrieben.
Das Speed Signal selber soll durch diese Abfrage per Pollen detektiert
werden.
Michael meint weiter oben, dass hier ein Fehler liegen könnte, werde das
gleich mal checken.
Schlumpf schrieb:> Was für eine Signalform soll denn dieser Speedsensor ausgeben?> Einen Rechteck, vermute ich mal.
Ja, genau.
Jens schrieb:> Ja, ganz einfach mit einer LED. Einfach eine LED (mit Vorwiderstand)> zwischen Vdd vom Lüfter und dem Tachosignal anschließen. Wenn der Lüfter> dreht blinkt die LED.
Danke, habe es eben so getestet:
+12V
|
10k
|
LED
|
Speed-Sign.-Anschluss (open C)
Die LED blinkt im Takt der Lüfterdrehung, der Lüfter +
Speed-Sensorausgang ist wohl hardwaremäßig ok.
Hallo!
> Stromausfall am Lüfter wird auf eine andere Weise detektiert..............> Die LED blinkt im Takt der Lüfterdrehung, der Lüfter + Speed-Sensorausgang> ist wohl hardwaremäßig ok.
Mal eine ganz andere Frage, hängt am Tachosignal vielleicht noch
irgendetwas anderes dran z.B. das MoBo (und die Test LED muss da dann
auch wieder weck)? Also versuchst Du das Signal nur „an zu zapfen“? Wenn
ja, damit hatte ich auch schon mal Probleme. Da hilft nur das
Tachosignal direkt auf den Mµ zu legen und dann einen Mµ Port opfern und
da das Signal wieder ausgeben (z.B. weiter zum MoBo).
Ich vermute einen Software-Fehler.
Wenn du pollst, bleibst du dann an der Stelle im Programm stehen, bis du
ein Low gesehen hast, oder schaust du an der Stelle nur ab und zu mal
vorbei und ziehst eine "Probe" aus dem Signal.
Als du den Test mit der LED gemacht hast, wie war das da bei einer
Umdrehung?
Halbe Umdrehung "an", halbe Umdrehung "aus"?
Oder fast die komplette umdrehung "aus" und nur ganz kurz "an"?
Oder Pro Umdrehung mehrfach "an" und "aus"?
Michael H. schrieb:> rob_gold schrieb:>> if (PINC & ( 1 << PC3 )) {-die besagte LED wird dauerhaft>> eingeschaltet-}>> DAS passt aber ganz und gar nicht zu:>> rob_gold schrieb:>> Wird an den Pin 5V angelegt, passiert nichts. Legt man 1V an oder den>> Pin auf GND, wird die Kontroll-LED getriggert und leuchtet.>> ...
...
Michael H. schrieb:>>> if (PINC & ( 1 << PC3 )) {-die besagte LED wird dauerhaft>>> eingeschaltet-}>>>> DAS passt aber ganz und gar nicht zu:>>>> rob_gold schrieb:>>> Wird an den Pin 5V angelegt, passiert nichts.
Das stimmt, da muss mir ein Übertragungsfehler unterlaufen sein
(Programmierrechner hat leider kein Internet).
Schlumpf schrieb:> Als du den Test mit der LED gemacht hast, wie war das da bei einer> Umdrehung?> Halbe Umdrehung "an", halbe Umdrehung "aus"?> Oder fast die komplette umdrehung "aus" und nur ganz kurz "an"?> Oder Pro Umdrehung mehrfach "an" und "aus"?
Der Lüfter hat eine Art Abschaltautomatik, wenn er zu stark gebremst
wird, bleibt er stehen (die LED ist dann aus). Dann wartet er ein paar
Sekunden und dreht dann wieder an.
Pro *zig geschätzter Umdrehungen gibt er einen Puls (ca.40Hz bei +12V,
max. Drehzahl). Das Tastverhältnis beträgt optisch geschätzt 50% (das
Multimeter zeigt einen Duty Cycle von 50,8% an).
Ich schreibe jetzt mal ein kleines Test-Unterprogramm nur zur
Speed-Signalerkennung und poste es dann hier.