Forum: Mikrocontroller und Digitale Elektronik PWM Frequenz Arduino auf 25KHz, warum klappts nicht mit dem Gehäuselüfter?


von Bester Mann (Gast)


Lesenswert?

Guten Tag,

wie schon viele andere versuche ich meinen 4Pin PWM Lüfter mit der PWM 
vom Arduino zu steuern.
Das benötigte PWM Signal für den Lüfter hat eine Frequenz zwischen 21 
und 28 Khz. Da per prescaling das Signal nur auf 31Khz gebracht werden 
kann, hat das schonmal nicht funktioniert.
Jetzt habe ich das Register, in dem gesetzt wird, wie hoch gezählt wird, 
mittels der PWM.h Lib auf 25Khz eingestellt, was auch super 
funktioniert.
Voller Motivation hab ich meinen Lüfter (Arctic Cooling F8 PWM) 
angeschlossen - und er läuft immer noch auf maximaler Drehzahl.

Ich hab ganz naiv einfach das PWM Signal vom Arduino Uno (Pin 9) 
angeschlossen und den Rest des Lüfters an einen 3Pol Lüfterstecker vom 
PC.

Was mache ich falsch ? Wäre super, wenn mir jemand einen Tipp geben 
könnte. Liegts an der Verkabelung oder dem Signal selbst?

Hier mein Code

1
#include <PWM.h>
2
3
int led = 9;               
4
int brightness = 85;         
5
int fadeAmount = 5;         
6
int32_t frequency = 25000; // 25Khz 
7
8
void setup()
9
{
10
  
11
  InitTimersSafe(); 
12
13
Serial.begin(9600);
14
 
15
  bool success = SetPinFrequencySafe(led, frequency);
16
  
17
18
  if(success) {
19
  //  pinMode(13, OUTPUT);
20
  //  digitalWrite(13, HIGH);    
21
   Serial.println("hat geklappt");
22
  }
23
24
}
25
26
void loop()
27
{
28
29
  pwmWrite(led, brightness);
30
31
  brightness = brightness + fadeAmount;
32
33
  if (brightness <= 0 || brightness >= 255) {
34
    fadeAmount = -fadeAmount ; 
35
  }     
36
  Serial.println(brightness);
37
  delay(100);      
38
}

Die PWM Library findet ihr hier

http://code.google.com/p/arduino-pwm-frequency-library/downloads/list

Der ordner PWM muss in den Libraries Ordner eurer Arduino-Installation.

von Route_66 (Gast)


Lesenswert?

Hallo!

Bester Mann schrieb:
> Ich hab ganz naiv einfach das PWM Signal vom Arduino Uno (Pin 9)
> angeschlossen und den Rest des Lüfters an einen 3Pol Lüfterstecker vom
> PC.

Ist GND vom Arduino auch am lüfter angeschlossen?

von Udo S. (urschmitt)


Lesenswert?

Richtige Pins benutzt? Der 4 Pin Lüfter hat auch einen Tacho Ausgang.
Bild vom Aufbau und Anschluss.
Bildformate beachten!!!

von aa (Gast)


Lesenswert?

Passen die Ein-/Ausgangspegel von Arduino <--> Lüfter?

Gibt es eine externe Beschaltung die als Tiefpass wirkt und zu langsam 
ist?

Kommt überhaupt ein PWM Signal aus dem Pin raus?

von Bester Mann (Gast)


Lesenswert?

Ich glaub der Fehler liegt darin, dass ich GND vom Arduino gar nirgends 
angeschlossen habe. Kann ich das einfach an den GND vom Lüfter mit dran 
packen? Nicht, dass das schief geht?
Könnten ja rein theoretisch Spannungsdifferenzen dazwischen sein.
Also das 25KHz signal passt und ich glaub logic level liegt bei 1V , 
oder ? Jedenfalls leuchtet eine grüne led , die ich zwischen pin9 und 
gnd schaltet, leicht, dass die Spannung auf jedenfalls irgendwo zwischen 
1 und 2 v liegt tippe ich. Das werde ich als nächstes mal messen,sobald 
ich irgendwo an ein oszi kann.

Also wohin soll ich den gnd vom arduino schalten?

Die Bilddatei kann ich leider gerade nicht öffnen, bin unterwegs.

Viele grüße

von Karl H. (kbuchegg)


Lesenswert?

Bester Mann schrieb:
> Ich glaub der Fehler liegt darin, dass ich GND vom Arduino gar nirgends
> angeschlossen habe. Kann ich das einfach an den GND vom Lüfter mit dran
> packen? Nicht, dass das schief geht?
> Könnten ja rein theoretisch Spannungsdifferenzen dazwischen sein.

Nein, da können keine Spannungsdifferenzen sein.
Ganz im Gegenteil: erst dadurch, dass du mittels GND eine Verbindung 
herstellst, sind sich alle 'Partner' überhaupt erst darüber einig, was 
denn eigentlich 0V (also GND) sein soll. Vorher hat jede Schaltung ihre 
eigene 'Vorstellung' davon, was das sein soll, und zu allem Überdruss 
kann sich das auch laufend ändern.

> Also das 25KHz signal passt und ich glaub logic level liegt bei 1V ,
> oder ?

Nö. Der Level ist der Level, mit dem dein Arduino versorgt wird. 
Meistens also 5V.

> Jedenfalls leuchtet eine grüne led , die ich zwischen pin9 und
> gnd schaltet

ok.
Und verändert sie auch ihre Helligkeit, so wie das Programm das 
eigentlich tun sollte?

von Bester Mann (Gast)


Lesenswert?

Hallo Karl,

Ja das passt alles ganz genau, die LED fadet sehr sauber von null auf 
max und zurück (nichtlinearer Verlauf berücksichtigt) 5V da würde meine 
LED durchbrennen, hab ich schon probiert ;-)
Also sind es dann bestimmt 3.3V. Werde ich jetzt mal messen und mit den 
Spezifikationen des lüfters abgleichen.

Aber gnd vom arduino muss angeschlossen werden ?



MFG

von MaWin (Gast)


Lesenswert?

Karl Heinz schrieb:
> Nein, da können keine Spannungsdifferenzen sein.

Na ja, doch, schon, wenn er den Arduino aus dem PC Netzteil versorgt und 
nicht zwischen +5V/0V sondern z.B. zwischen 0V und -5V angeschlossen 
hat.

Was aber eher unwahrscheinlich ist.

von radioMuffin (Gast)


Lesenswert?

Hallo Bester Mann,

sieh Dir mal die Spec von Intel dazu an:

http://www.formfactors.org/developer%5Cspecs%5C4_Wire_PWM_Spec.pdf

Das PWM-Signal muss nach Spec per Open Collector bzw. Open Drain vom uC 
zum Fan übertragen werden. D.h. Du musst noch einen separaten Transistor 
spendieren, um konform nach Spec Deinen Lüfter anzusteuern.

Das Tacho-Signal wird ebenfalls per OC/OC übertragen (Fan -> uC). Den 
Pull-Up für das Tacho Signal musst Du selbst "anbringen"

Viel Spaß und Erfolg beim Basteln

von Udo S. (urschmitt)


Lesenswert?

Bester Mann schrieb:
> Ja das passt alles ganz genau, die LED fadet sehr sauber von null auf
> max und zurück (nichtlinearer Verlauf berücksichtigt) 5V da würde meine
> LED durchbrennen, hab ich schon probiert ;-)

Du gibst also während der Impulsdauer volle 5V an die Led?
Dann schalte verdammt noch mal einen Vorwiderstand davor.

Grundlagen der Elektrotechnik gelten auch für Arduino Nutzer.

: Bearbeitet durch User
von Bester Mann (Gast)


Lesenswert?

Hallo Udo,

nein, so wie ich geschrieben habe: meine LED leuchtet schwach bis normal 
und bei 5V würde sie durchbrennen, daher hab ich auf 1-2V getippt.
Da sie selbst bei 100% Duty Cycle nicht durchbrennt, ist wohl klar, dass 
keine 5V anliegen.
Ich werds gleich mal genau messen.

Hm ich dachte ich hab das Antiphysik-Paket mitgekauft als Arduinonutzer 
;-)

Ich verbind jetzt einfach das GND vom Arduino mit dem GND vom PC. Wenns 
durchbrennt seid ihr Schuld :-D


MFG

von Bester Mann (Gast)


Lesenswert?

@ radiomuffin

Da fummel ich mich jetzt durch, danke sehr :)

von Karl H. (kbuchegg)


Lesenswert?

Bester Mann schrieb:
> Hallo Udo,
>
> nein, so wie ich geschrieben habe: meine LED leuchtet schwach bis normal
> und bei 5V würde sie durchbrennen,

mal halblang bei den Pferden.
Eine LED, die direkt an einen µC Ausgang gehängt wird, brennt nicht 
gleich durch. So ein Arduino Ausgang ist ja kein Kraftwerk, der 10A 
durch die LED jagen könnte.

> daher hab ich auf 1-2V getippt.

Es ist letzten Endes auch völlig wurscht, denn an einem PWM-Ausgang 
liegen keine 1-2V an. Da liegt die volle Versorgungsspannung, nur eben 
nicht die ganze Zeit, sondern mehr so wie ein Blinker. An-Aus, mit 
wechselndem Verhältnis von An- zu Aus-zeit.

von Bester Mann (Gast)


Lesenswert?

[QUOTE]The following requirements are measured at the PW
M (control) pin of the fan cable connector see
Figure 7 and Table 1:
PWM Frequency: Target frequency 25 kHz,
acceptable operational range 21 kHz to 28 kHz
Maximum voltage for logic low: VIL = 0.8 V
Absolute maximum current sourced: Imax = 5 mA (short circuit current)
Absolute maximum voltage level: VMax = 5.25 V (open circuit voltage)
This signal must be pulled up to a maximum of 5.25V within the 
fan[/QUOTE]

Hallo noch einmal,


Verstehe ich es richtig, dass Logic Low maximal 0.8 und Logic High 
maximal 5.25V betragen darf? Wie hoch muss Logic High denn mindestens 
sein?
Wenn ihr sagt, dass der Arduino 5V am PWM Ausgang liegen hat (was ich 
nicht glaube) dann bräuchte ich ja keinen Open Collector an meinem 
Ausgang, da die Specs doch eigentlich genau passen würden?
Wenn allerdings nur 1V an meinem PWM Ausgang anliegt als Logic High, 
aber mindestens 4 oder 5V benötigt werden, dann müsste ich einen 
Transistor hinter schalten, sehe ich das richtig

MFG

von Bester Mann (Gast)


Lesenswert?

Ich nehm alles zurück und Behaupte das Gegenteil : Es liegen exakt 5.00V 
zwischen PWM und GND an. Warum meine LED auch bei 100% Duty Cycle nicht 
durchbrannte, weiß ich nicht. Normal müsste sie es tun. Ist wohl hart im 
Nehmen.

Wenn jetzt aber genau 5.00V als High und 0V als low anliegen - wieso 
geht der Lüfter dann nicht und wozu soll noch die Open Collector 
Schaltung dahinter?

von Teo D. (teoderix)


Lesenswert?

Hart am nehmen war da der Port Deines Prozessors!

von Karl H. (kbuchegg)


Lesenswert?

Bester Mann schrieb:
> Ich nehm alles zurück und Behaupte das Gegenteil : Es liegen exakt 5.00V
> zwischen PWM und GND an. Warum meine LED auch bei 100% Duty Cycle nicht
> durchbrannte, weiß ich nicht. Normal müsste sie es tun. Ist wohl hart im
> Nehmen.

Die Led nicht.
Aber dem Arduino geht die Puste aus.
Ich sagte doch, so ein Ardunio ist kein Kraftwerk! Wenn die LED da 
direkt drann hängt, dann steigt der Strom weil es in der LED keine 
Begrenzung gibt.
Aber: das ist nur die eine Seite der Medaille. Wenn es einen Verbraucher 
gibt (die LED), die Strom haben will, dann muss es auch einen 
Lieferanten geben (der Arduino), der den Strom liefern können muss.
Nur kann dein Arduino nicht. Nach 40mA geht dem die Puste aus und die 
Ausgangsspannung bricht ein.

von Bester Mann (Gast)


Lesenswert?

Karl Heinz schrieb:
> Bester Mann schrieb:
>> Ich nehm alles zurück und Behaupte das Gegenteil : Es liegen exakt 5.00V
>> zwischen PWM und GND an. Warum meine LED auch bei 100% Duty Cycle nicht
>> durchbrannte, weiß ich nicht. Normal müsste sie es tun. Ist wohl hart im
>> Nehmen.
>
> Die Led nicht.
> Aber dem Arduino geht die Puste aus.
> Ich sagte doch, so ein Ardunio ist kein Kraftwerk! Wenn die LED da
> direkt drann hängt, dann steigt der Strom weil es in der LED keine
> Begrenzung gibt.
> Aber: das ist nur die eine Seite der Medaille. Wenn es einen Verbraucher
> gibt (die LED), die Strom haben will, dann muss es auch einen
> Lieferanten geben (der Arduino), der den Strom liefern können muss.
> Nur kann dein Arduino nicht. Nach 40mA geht dem die Puste aus und die
> Ausgangsspannung bricht ein.

Ah, jetzt verstehe ich. Dann war das nicht gerade gut, was ich gemacht 
hab und die LED ist nur nicht durchgebrannt, weil der Arduino am Ende 
war. Verstehe! Hab ich wohl nicht nachgedacht. Danke für die Info. Ich 
noch halbwegs Einsteiger im Mikrokontroller Bereich.

Also in den Specs steht, dass eine Open Collector Schaltung nur nötig 
ist, wenn mehrere Lüfter an einem PWM Signal hängen.
Um sicher zu gehen, werde ich jedenfalls mein Signal erstmal mit einem 
Oszilloskop ausmessen. Wenn das Signal wirklich perfekt passt, dann muss 
es wohl an der fehlenden Beschaltung liegen.

Komisch nur, dass das Beispielsignal auf Seite 11 in der PDF genau so 
aussieht wie ich es von meinem erwarte.
Spannung meines Signals passt auf jeden Fall schonmal sehr gut.
Fraglich nur, warum die Spannnung auf 3.3V zusammenbricht, sobald ich 
den Lüfter anschließe. Vielleicht ein Messfehler ?

MFG

von Bester Mann (Gast)


Lesenswert?

Ist zwar jetzt ein bisschen peinlich, aber vielleicht passiert jemand 
anderem der selbe Fehler mal.

Die Steuerug funktioniert schon die ganze Zeit - ich habe nur die ganze 
zeit das Tachosignal mit dem PWM Signal verbunden gehabt.

Das blaue Kabel ist das PWM Kabel.
Keine zusätzlichen Bauteile, nichts. Genau so, wie ich es mir gedacht 
habe.
Jetzt läuft alles super :-)

Danke trotzdem an alle für eure Tips und eure Zeit !

MFG

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.