Forum: Mikrocontroller und Digitale Elektronik 4-Pin PWM Lüfter + Arduino = Unbrauchbar?


von Pete123 (Gast)


Lesenswert?

Hi Leute,

ich habe da ein Problem das mich verfolgt und an dem ich schon 2 Tage 
bzw. zwei Nächte festhänge. Habe das Web bereits ausgiebig befragt daher 
jetzt dieser Post.

Die Drehzahl meines PWM-Lüfters mit Arduino Leonardo gesteuert ist viel 
zu langsam.

Es geht darum, dass ich zur Kühlung einer 100W LED einen CPU-Kühler 
betreiben will, wie er standardmäßig beim i5 dabei ist. Genau heisst der 
E97378-001. Das gute Stück ist einer der Lüfter mit 4 Anschlüssen, 
namentlich:
|GND|+12V|Hall-Sensor|PWM-Input|

(Datenblatt war leider nicht zu finden, dafür aber dieses allgemeine 
Dokument über PWM-Lüfter: 
http://www.formfactors.org/developer%5Cspecs%5CREV1_2_Public.pdf)

Mein eigentliches Ziel war es bloß den Lüfter einmal auf 100% Laufen zu 
lassen um seine Kühlfähigkeit zu testen. Um danach eventuell eine 
Temperaturregelung und Steuerung der LED mit einem ATTINY85 aufzubauen.

Das Problem dabei: Der Lüfter ist schlauer als er aussieht. Nach dem ich 
die Versorgungsspannung anschliesse dreht der kurz hoch und verharrt 
danach auf einer geringeren Drehzahl (geschätzt so in etwa 40-50% seines 
Könnens.) Zieht man den PWM-Pin auf Masse, dreht er extrem langsam so 
wie es sich gehört. Zieht man den Pin jedoch auf 5V passiert gar nichts 
und er bleibt bei der Leerlauf-Leistung. Das liegt wohl daran, dass der 
Lüfter bei 97% PWM am schnellsten sein soll.

Damit der Lüfter sich ansteuern lässt schreibt der Hersteller eine 
PWM-Frequenz von 25kHz vor. Laut irgendwelcher Foren soll die normale 
Arduino Frequenz von 490Hz wohl auch funktionieren, was bei mir nicht 
geklappt hat.

Da man die PWM-Frequenz nicht so ohne weiteres Benutzerfreundlich 
verändern kann, bleibt nichts anderes übrig als die Timer "manuell" zu 
setzen. Dazu gibt es jede Menge Anleitungen, zumindest für den UNO, für 
den Leonardo eher nicht so. Hab natürlich ein paar Sachen gefunden und 
die mal ausprobiert. Ergebnis: Ja man kann die Drehzahl steuern. Aber 
nur von fast null bis zu den besagten 40-50% bei offenem Eingang.

Versetzte Momentan den Timer4 in Mode 4 um 23.437Hz zu bekommen was in 
der Toleranz der 25kHz liegen sollte. Den Code den ich von 
http://r6500.blogspot.de/2014/12/fast-pwm-on-arduino-leonardo.html 
geklaut habe stelle ich der Vollständigkeit halber mal mit ein.

Gibt es Dinge zu beachten die ich vergessen habe? Oder ist TIMER4 
einfach falsch Konfiguriert? Liesse sich das ganze auch mit TIMER1 
erledigen, ich habe da keine passende Frequenz gefunden. Gäbe es eine 
elegante Möglichkeit genau 25kHz PWM-Frequenz zu erzeugen? Und hat 
jemand Erfahrung im ansteuern dieser Lüfter und irgendeinen brauchbaren 
oder unbrauchbaren Tipp auf Lager? Ich bin für jede Anregung dankbar.


Vielen Dank für eure Hilfe im Voraus.


/**********************************************************
   Fast PWM on pins 6, 13 (High Speed TIMER 4)

   Do not use analogWrite to pins 6 or 13 if using
   this functions as they use the same timer.

   Those functions will conflict with the
   MSTIMER2 library.
   Uses 7 PWM frequencies between 2930Hz and 187.5kHz

   Timer 4 uses a PLL as input so that its clock frequency
   can be up to 96MHz on standard Arduino Leonardo.
   We limit imput frequency to 48MHz to generate 187.5kHz PWM
   If needed, we can double that up to 375kHz
**********************************************************/

// Frequency modes for TIMER4
#define PWM187k 1   // 187500 Hz
#define PWM94k  2   //  93750 Hz
#define PWM47k  3   //  46875 Hz
#define PWM23k  4   //  23437 Hz
#define PWM12k  5   //  11719 Hz
#define PWM6k   6   //   5859 Hz
#define PWM3k   7   //   2930 Hz

// Direct PWM change variables
#define PWM6        OCR4D
#define PWM13       OCR4A

// Terminal count
#define PWM6_13_MAX OCR4C

// Configure the PWM clock
// The argument is one of the 7 previously defined modes
void pwm613configure(int mode)
{
// TCCR4A configuration
TCCR4A=0;

// TCCR4B configuration
TCCR4B=mode;

// TCCR4C configuration
TCCR4C=0;

// TCCR4D configuration
TCCR4D=0;

// TCCR4D configuration
TCCR4D=0;

// PLL Configuration
// Use 96MHz / 2 = 48MHz
PLLFRQ=(PLLFRQ&0xCF)|0x30;
// PLLFRQ=(PLLFRQ&0xCF)|0x10; // Will double all frequencies

// Terminal count for Timer 4 PWM
OCR4C=255;
}

// Set PWM to D6 (Timer4 D)
// Argument is PWM between 0 and 255
void pwmSet6(int value)
{
OCR4D=value;   // Set PWM value
DDRD|=1<<7;    // Set Output Mode D7
TCCR4C|=0x09;  // Activate channel D
}

// Set PWM to D13 (Timer4 A)
// Argument is PWM between 0 and 255
void pwmSet13(int value)
{
OCR4A=value;   // Set PWM value
DDRC|=1<<7;    // Set Output Mode C7
TCCR4A=0x82;  // Activate channel A
}

/*************** ADDITIONAL DEFINITIONS ******************/

// Macro to converts from duty (0..100) to PWM (0..255)
#define DUTY2PWM(x)  ((255*(x))/100)

/**********************************************************/

void setup()
{
pwm613configure(PWM23k);
pwmSet13(0);
}

void loop()
{

PWM13=255;

}

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Wenn du von einer CPU Frequenz von 16Mhz ausgehst, kannst du mit Timer 4 
genau 25kHz erzeugen, wenn du ihn in einem der Waveform Modes bringst, 
in denen TOP durch OCR4C bestimmt wird. Siehe dazu das ausführliche 
Datenblatt des Mega 16U4/32U4 Table 15.18.

Dann setzt du TOP (in OCR4C) auf 160 und den Prescaler auf 4. Ergibt 
16000000Hz / 4 = 4000000Hz. Wenn der Timer dann nur bis 160 zählt, sinds 
genau 25kHz.
Leider ist die PWM Auflösung dann nur noch 0-159, du verlierst also 
etwas, das sollte aber bei einem Lüfter nicht so tragisch sein.
Eigentlich sollte das mit deiner Library schon gehen, wenn du nur den 
Wert in OCR4C änderst:
1
 // Terminal count for Timer 4 PWM
2
 OCR4C=255;
Da die Jungs hier von der PLL ausgehen, sind die Werte etwas anders. Der 
23kHz Mode ist hier schon am nächsten, ein leichtes Verringern des 
Wertes in OCR4C sollte die Frequenz auch leicht erhöhen. Die Rechnerei 
überlasse ich aber dir :-)

: Bearbeitet durch User
von Draco (Gast)


Lesenswert?

Pete123 schrieb:
> Das Problem dabei: Der Lüfter ist schlauer als er aussieht. Nach dem ich
> die Versorgungsspannung anschliesse dreht der kurz hoch und verharrt
> danach auf einer geringeren Drehzahl (geschätzt so in etwa 40-50% seines
> Könnens.) Zieht man den PWM-Pin auf Masse, dreht er extrem langsam so
> wie es sich gehört. Zieht man den Pin jedoch auf 5V passiert gar nichts
> und er bleibt bei der Leerlauf-Leistung. Das liegt wohl daran, dass der
> Lüfter bei 97% PWM am schnellsten sein soll.


Das hat nix mit schlau zu tun... wenn du den PWM Pin auf GND oder VCC 
legst - was hat er dann?! Genau! Keine Frequenz - also kein PWM Signal. 
Also niedrigste Stufe. Wenn er intelligent gewesen wäre, würde er bei 
Frequenzverlust auf 100% hochziehen.

Der Wirkungsgrad ist bei 97% der höchste. Die schnellste Geschwindigkeit 
hat er, logischerweiße, bei 100%.

Im übrigen ist es seehr seeeeeehr mutig eine 100W LED mit einem für 95W 
TDP angegeben Kühler kühlen zu wollen... dann auch noch mit den PWM 
Frequenzen spielen wollen... du kannst froh sein wenn der Kühler bei 
100% läuft und deine LED dennoch kein schaden nimmt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Draco schrieb:
> Im übrigen ist es seehr seeeeeehr mutig eine 100W LED

Die 100 Watt sind die von der LED aufgenommene Leistung. Da LEDs einen 
gewissen Wirkungsgrad (um 20%) haben, werden hier nicht 100 Watt Abwärme 
produziert, sondern ein gewisser Anteil auch in Form von Licht 
abgegeben.

Hier werden also "nur" etwa 80 Watt in Form von Abwärme abzuführen sein.

Ohne eine Temperaturüberwachung und gegebenenfalls Notabschaltung der 
LED halte ich einen für unter optimalen Bedingungen für 95 Watt 
gedachten Kühler allerdings auch für ... etwas wagemutig; irgendwann 
setzt sich der Lüfter mit Staub zu, was den Wärmeumsatz drosselt.

von Peter D. (peda)


Lesenswert?

Draco schrieb:
> Im übrigen ist es seehr seeeeeehr mutig eine 100W LED mit einem für 95W
> TDP angegeben Kühler kühlen zu wollen...

Du vergleichst Äpfel mit Birnen.
1. Eine LED ist kein idealer Heizer, sie gibt auch etwas Leistung als 
Licht ab.
2. Vergleiche mal, welche Gehäusetemperatur die CPU verträgt und welche 
die LED.

von Draco (Gast)


Lesenswert?

Meinst man kann das nicht direkt vergleichen?! Würde mich mal 
interessieren was man hinten an so ner LED abführen muss. Welche LED 
will er denn nutzen, gibt ja nicht so viele Anbieter in dieser 
Größenordnung?!

Eine CPU mit ~100W TDP verbrät ja auch nicht alles in Wärme.

von Jan H. (jan_m_h)


Lesenswert?

Draco schrieb:
> Eine CPU mit ~100W TDP verbrät ja auch nicht alles in Wärme.

Also bei voller Auslastung schon, TDP ist nämlich die freigesetzte Wärme 
unter Volllast, und nicht die Stromaufnahme.

von Robert S. (bimbo385)


Lesenswert?

TDP steht für Thermal Design Power, also die Verlustleistung (Wärme) die 
die Kühlung abführen muss.

Der normale Intel Boxed Kühler für 95 W TDP sollte also 95 W 
Wärmeleistung abführen können.

Da deine 100 W LED ja sicherlich einen Wirkungsgrad > 10 % hat, ist 
deine thermische Verlustleistung kleiner als 90 W, somit sollte das der 
Kühler schaffen.

Was die Ansteuerung des Lüfters betrifft:

Laut Spezifikation 
(http://www.formfactors.org/developer%5Cspecs%5C4_Wire_PWM_Spec.pdf), 
muss der Lüfter ohne angeschlossenes PWM-Signal (Blaues Kabel offen) bei 
12 V 100 % Drehzahl liefern. Wenn er das nicht tut, ist der Lüfter 
defekt.
Das offene Kabel entspricht hierbei einem dauerhaften 1-Signal also 100 
% PWM.

Das PWM Signal muss ein open-collector (oder open-drain) Signal sein. 
Also du ziehst das Signal nur nach Masse, ein Pullup Widerstand sitzt im 
Lüfter. Wenn du da 5 V drauf gibst, ist das kein gültiger Signalzustand, 
genau so wenig ist ein PWM Signal mit 0V/5V ein gültiges Eingangssignal. 
Siehe auch Kapitel 2.3 und 2.4 in der oben verlinkten Spec. Rev. 1.3.

Schalte z.B. an deinen Ausgang vom Timer über einen 1k Ohm Widerstand 
die Basis von einem BC547 und den Emitter nach GND. An den Kollektor 
kommt dann das blaue Kabel vom Lüfter.

Mfg Bimbo385

PS: ich hab schon viele solcher Lüfter angesteuert, das geht eigentlich 
hervorragend mit nem µC.

: Bearbeitet durch User
von Pete123 (Gast)


Lesenswert?

Vielen Dank erstmal für die Hilfe.

Hab mal um zu verdeutlichen was ich meine ein Video gemacht.
http://sendvid.com/qvbroc68
Hier kann man schön sehen bzw. hören wie er bei offenem Eingang voll 
hochdreht und dann wieder runter. Ist das gute stück also defekt so 
ausgelegt oder gibt es einen Trick um auf 100% zu kommen?

@mschoeldgen
Ahh besten Dank dann ist der Groschen auch bei mir gefallen. Also Bei 
einem prescaler von 8 mit 48MHz PLL haben wir dann 6MHz. Dann ist alles 
was es noch zu tun gilt 6.000.000/25.000=240. Also OCR4C=240. Ok das ist 
wirklich nicht so schwer.

@Draco
War ja auch nur als Test gedacht. Hab natürlich auch nicht vor das ganze 
Langfristig ohne Temperaturüberwachung laufen zu lassen. Hab den Lüfter 
gerade umsonst haben können also wollte ich das mal ausprobieren.

@Bimbo385
Dann könnte es tatsächlich sein dass der einen defekt hat. Denn nach dem 
Einschalten dreht der einmal richtig hoch und geht danach auf seine 
"100%" die ungefähr 40% von dem Startvorgang sind. Werde mich heute mal 
an eine Drehzahlmessung setzten. Dann dürfte sich das ja klären. Falls 
das was der Lüfter macht alles ist was er kann, könnte es sich ja evtl. 
auch lohnen die defekte? Steuerung zu überbrücken. Dann mache ich halt 
meine eigene Steuerung es dürfte ja ein Transistor ausreichen.
Btw, warum muss ich den PWM Pin über einen Transistor ansteuern? Ist 
nicht der eigentliche Sinn von dem PWM-Pin, dass er nur einen kleinen 
Steuer-Strom führt? Ich werde es aber trotzdem mal ausprobieren.

von Malte S. (maltest)


Lesenswert?

Pete123 schrieb:
> Btw, warum muss ich den PWM Pin über einen Transistor ansteuern? Ist
> nicht der eigentliche Sinn von dem PWM-Pin, dass er nur einen kleinen
> Steuer-Strom führt? Ich werde es aber trotzdem mal ausprobieren.

Weil der keine 5 V sehen möchte. Du musst ihn abwechselnd mit GND - 
offen - GND - offen ansteuern und das kann dein AVR nicht, selbst wenn 
du den Pin als Eingang konfigurierst, stört die Schutzdiode.

von Robert S. (bimbo385)


Lesenswert?

Genau so wie Malte sagt, es geht nicht um den Strom. Der beträgt wenn 
überhaupt wenige mA, sondern um den 5 V Zustand, der nicht gültig ist. 
Sondern es ist open-collector gefordert, also Kurzschluss nach Ground 
und offen im Wechsel.

Dein Lüfter verhält sich definitiv nicht korrekt. Scheint ne Macke zu 
haben. Ich habe gerade noch mal einen von meinen zahlreichen Intel-Boxed 
Kühlern angetestet. Der geht bei offenen Steuereingang einfach auf 100 % 
und bleibt da.

Das mit den 100 % bei offenen Eingang kommt auch nicht von ungefähr, 
sondern ist die Voraussetzung zur Abwärtskompatibilität. Du kannst so 
ein 4-Pin Lüfter z.B. auch einfach an einen 3-Pin Anschluss vom 
Mainboard stecken. Er gibt dann halt vollgas, bzw. lässt sich über die 
Spannung regeln, wenn das MoBo das kann.

Mfg Bimbo385

PS: Nimm bitte beim nächsten Video einen Hoster der nicht 10 min 
braucht, um mir ein 30 s Video zur Verfügung zu stellen ;-)

von Malte S. (maltest)


Lesenswert?

Bimbo 3. schrieb:
> Dein Lüfter verhält sich definitiv nicht korrekt. Scheint ne Macke zu
> haben.

Oder war dein "offen" Test mit PWM-Eingang an den µC angeschlossen und 
nur dem Pin auf Eingang? Dann siehe oben.

von Pete123 (Gast)


Lesenswert?

@maltest, @bimbo385
Ahh das macht sehr viel Sinn. Hab das ganze nochmal mit nem BC547 
versucht, Logik im Code invertiert und siehe da es funktioniert besser 
als vorher. Die Regelung ist etwas konstanter, aber seinen verlorenen 
Speed hat er natürlich nicht wiederbekommen :'(.

Zumal ich es für unmöglich halte den Lüfter auseinander zu nehmen und 
heile wieder zusammen zu bauen um an die Elektronik zu kommen, werde ich 
mich wohl nach einem neuen Lüfter umschauen müssen und den anderen für 
etwas mit weniger Wärmeabfuhr zurücklegen (hab da noch 5 20W LEDs auf 
Lager). Meint ihr die Dinger sind irgendwo Ausschussware und man kann 
die da umsonst bekommen. Die gibts doch so häufig da kommt es mir fast 
falsch vor 5€ dafür zu bezahlen. Hatte gedacht man könnte vielleicht 
diese Intel Kühler benutzen, den Lüfter abmachen und als passive Kühlung 
für 20 oder 10W LEDs benutzen. Der Lüfter müsste ja nichtmal 
funktionieren.

von IntelBoxed (Gast)


Lesenswert?

Also die Kühler sind bei jedem Selberbastler der sein Rechner baut und 
was auf sich hält übrig weil eh ein besserer Kühler drauf kommt. Da 
sollte sich doch was in deiner Nähe finden.

Ich weiß grad nicht wo, aber ich hab noch welche rumzuliegen. Zumindest 
die Lüfter, die Kühlkörper finden bei mir immer Verwendung.

von Robert S. (bimbo385)


Lesenswert?

Hab bestimmt 6 oder 7 boxed Kühler rum liegen. Die neueren, flachen aus 
Vollaluminium für die i3/5/7 habe ich nie verbaut, viel zu laut.
Die alten, hohen mit Kupferkern für LGA775 waren ganz OK, wenn die 
eigenen Ansprüche nicht zu hoch waren.

Zum wegwerfen waren mir die immer zu schade, aber verkaufen kann man die 
nicht. Wenn du aus der Nähe (PLZ: 31547) kommst, kannst du einen bei mir 
abholen für lau.

Mfg Bimbo385

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.