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;
}
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 :-)
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.
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.
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.
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.
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.
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.
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.
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.
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 ;-)
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.
@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.
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.
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