www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Arduino 4-Pin Lüfter PWM


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,
ich möchte mit einem Arduino (ATMEGA 328) einen 4 Pin PC-Lüfter steuern, 
dazu habe ich diesen Thread gefunden: 
Beitrag "Steuerung 4 Pin PC PWM Lüfter"

Aber auf die Frage:
1. Wie funktioniert die Ansteuerung eines PWM-Lüfer eigentlich genau?
Liegen am stromführenden Lüfterkabel z.B. permanent 12 V an und das
PWM-Steuerkabel liefert dem Lüftermotor die entsprechenden
Schaltimpulse. Also ein/aus. Dies aber mit einer gänzlich anderen
Spannung. z.B. 5,25 V?

wird keine Antwort gegeben.

Aus dieser Spec entnehme ich das ich 25khz als pwm Frequenz brauche:
http://www.formfactors.org/developer/specs/REV1_2_Public.pdf

Also hab ich sie wie hier beschrieben auf 32khz angepasst:
http://softsolder.wordpress.com/2009/02/21/changin...

Eine LED habe ich zum Test angeschlossen, die blinkt genau wie erwartet, 
nur der Lüfter verändert nichts an seiner Drehzahl. Osziloskop zum 
Kontrollieren habe ich nicht. Wo kann der Fehler liegen?

Gruß
Marc

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso 32kHz? Der Lüfter benötigt 25kHz!
Die Drehzahl wird über die Pulsweite (Tastverhältnis) eingestellt.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
32 khz weil ich nich weiß ich auf 25khz komme ;)
es sollte aber auch mit 32khz gehen, da die Frequenz nur so hoch sein 
muss, dass sie nicht vom Menschen hörbar ist.

Autor: Tobias Plaputta (plaputta)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich lese im Datenblatt
> PWM Frequency: Target frequency 25 kHz
> acceptable operational range 21 kHz to 28 kHz
Also muss 32kHz meiner Meinung nach nicht zwingend funktionieren...

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, das Problem ist, das ist kein Datenblatt sondern eine 
Spezifikation (ich glaube von Intel) wie es die Mainboard Hersteller zu 
implimentieren haben. Ein echtes Datenblatt zu dem Lüfter finde ich 
nicht (es handelt sich um diesen hier: 
http://www.arctic-cooling.com/catalog/images/spec_...)

Das es mit 32khz auch Funktionieren soll, hab ich in irgendeinem Forum 
gelesen, mit der Begründung das der Lüfter die PWM Frequenz in hörbare 
Töne umsetzt, und daher 25khz+ verwendet werden, das sie vom Menschen 
nicht wahrnehmbar sind.

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
12V liegen immer an, die PWM geht von 20-100% über einen Transistor, der 
einen PullUp-Widerstand von den 5V schaltet. Am Kollektor/Drain kommt 
der PWM Anschluss des Lüfters. Das ganze mit ca. 25 KHz.

Autor: ext4 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das was du da gelesen hast wird für lüfter gewesen sein die keinen pwm 
integriert haben ...

Autor: Tugrul Ö. (doenerman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ext4 schrieb:
> das was du da gelesen hast wird für lüfter gewesen sein die keinen pwm
> integriert haben ...

Würd ich auf den ersten Blick auch so sehen.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm, und nu?
irgendwie komm ich nich weiter.

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht die PWM ist integriert, nur der PWM-Amplifer.

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>irgendwie komm ich nich weiter.


Habe ich doch weiter oben geschrieben, wie der Lüfter angesteuert werden 
muss.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber wie komm ich auf die 25khz, laut 
http://softsolder.wordpress.com/2009/02/21/changin... 
gehen nur 32khz. geht das überhaupt irgendwie?

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier es doch einfach aus.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber wenn der prescaler eine 2er Potenz ist kann ich doch nicht auf 
25khz kommen?

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>aber wenn der prescaler eine 2er Potenz ist kann ich doch nicht auf
>25khz kommen?

CTC-Modus?

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du sollst es mit 32 kHz ausprobieren. Der Lüfter überprüft nicht die 
PWM-Frequenz. Wenn es geht - gut ist, wenn nicht - Lösung überlegen.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chris schrieb:
> aber wie komm ich auf die 25khz, laut
> http://softsolder.wordpress.com/2009/02/21/changin...
> gehen nur 32khz. geht das überhaupt irgendwie?

Türlich geht das. Ein Register stellt den TOP Wert der PWM dar und eins 
den Dutycycle. Datenblatt lesen!

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Chris,

ich kann's dir anhand meines ATmega88 beschreiben.
Dies gilt auch für die anderen µC mit kleinen Änderungen.

Du brauchst 25kHz zum regeln, duty-cycle sollte zwischen 20 und 100% 
sein.
Habe ne kleine Rechnung, zu den folgenden Angaben:

CPU=10MHz
CKDIV8 ist ausgeschaltet
Fast-PWM Mode mit TCCR1A und TCCR1B einstellen
Non-inverting Mode mit COM1A1 und COM1A0 einstellen
16-bit Timer/Counter
Prescaler N = 1 mit TCCR1B einstellen


 = 399

Also ist der ICR1 = 399 als dein TOP definiert, ist Modus 14.

Den duty-cycle stellst du mit OCR1A ein:  für 100% ist der Wert 399
                                          für 20% ist der Wert 79,8 also 
79

Und nimm dir nen N-FET selbstsperrend mit Logic-level BUZ11 wird passen.
Kannst direkt an µC Pin anschliessen.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so ein update: also es scheint zu Funktionieren, ich kann die 
Geschwindigkeit des Lüfters verändern, allerdings nicht im gesamten 
Rahmen, sondern nur Geschätzt von 40-50%. Woran kann das liegen?

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Chris,

wie ist dein Quellcode.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich Programmiere mit der Arduino IDE.
Ausgehend von 
http://softsolder.wordpress.com/2009/02/21/changin... 
diesem Tip hab ich in der Wiring.c TCCR1B = 0x01; gesetzt.
Ansonsten ist mein code
    analogWrite(pwmPin, 40);  
    Serial.write(" LOW \n");
    delay(3000);
    analogWrite(pwmPin, 254);  
    Serial.write(" HIGH \n");
    delay(3000);
Ich setze die PWM also erst auf 40 dann auf 254, bei 40 dreht er auch 
leiser wie bei 254 aber der Lüfter geht lange nicht an seine max. 
Drezahl ran.
Für Tips bin ich dankbar.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist, wenn du den Duty Cycle mal nicht sprunghaft von fast aus auf 
ganz schnell setzt, sondern über ein paar Zwischenstufen hochfährst.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt stell ich den duty in einer for-schleife um 10 nach oben mit 300ms 
delay, bringt leider auch nix. er regelt von ganz langsam nach langsam.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal die Frequenz überprüft?

Wie is dein Code zur Zeit? Häng mal an.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
die Frequenz kann ich nich überprüfen da ich kein Oszi hab. Code steht 
weiter oben. Könnte sich eventuell mal jemand Opfern der einen PWM 
PC-Lüfter hat und es ausprobieren. Ansonsten bin ich weiterhin für 
Vorschläge offen.

Autor: Sir Sydom (sirsydom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich mach das gleiche, dass du gerad machen willst.
Ich regle mit nem Mega32 3 PWM-Lüfter.

Die PWM Signale erzeuge ich über den 16Bit-Timer im Fast-PWM-Modus und 
ich meine CTC (OC1A/B PINS kontaktiert..).

Über ein Reg stellt man dann die Obergrenze für den Timer ein 
(entspricht f des PWM) und über ein anderes das Tastverhältnis (liegt 
natürlich zwischen 0 und dem erstgenannten Register).

Bei mir funktioniert das wunderbar, ich hab die PWM-Leitung des Lüfters 
direkt an den Portpin gehängt - an einen anderen sogar 2.

In Ermangelung eines Oszi hab ich mir den PWM aber nie angesehen. Da die 
Lüfter aber brav langsamer und schneller werden, ist das für mich i.O.

Einzige Nebenwirkung:
Tachosignal ist dann irgendwie verkrüppelt.. Drehzahlberechnung haut 
nimmer hin.

Ich kann heute Nachmittag mal den Code für das Einstellen des PWM 
posten..

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bei mir funktioniert das wunderbar, ich hab die PWM-Leitung des Lüfters
>direkt an den Portpin gehängt - an einen anderen sogar 2.
Gut dann werde ich das nochmals so probieren.
>Einzige Nebenwirkung:
>Tachosignal ist dann irgendwie verkrüppelt.. Drehzahlberechnung haut
>nimmer hin.
Das hab ich auch schon gelesen, scheint das man damit leben muss.

Autor: Sir Sydom (sirsydom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void SetFans(uint16_t _level1, uint16_t _level2)
{
  level1 = _level1;
  level2 = _level2;

  DDRD |= (1<<DDD5);  // Set Pin19 (PortD5, OC1A) as output
  DDRD |= (1<<DDD4);  // Set Pin18 (PortD4, OC1B) as output

  TCCR1B = 0x00; // Stop the Timer

  ICR1H  = 640 / 0x0100;
  ICR1L  = 640 % 0x0100;  // 640 * 25.000 = 16.000.000
  

  OCR1AH = level1 / 0x0100;
  OCR1AL = level1 % 0x0100;
  OCR1BH = level2 / 0x0100;
  OCR1BL = level2 % 0x0100;
  

  // Set OC1A/B on compare match
  // Timer Mode: Fast PWM, TOP ICR1
  // No prescaling (use full IO-Clock)

  TCCR1A = (1<<COM1A1) | (1<<COM1A0) | (1<<COM1B1) | (1<<COM1B0) | (1<<WGM11);
  TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10);
}

Autor: Jörg G. (joergderxte)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lass doch den Compiler die Registerzugriffe machen:
ICR1  = 640;
  
  OCR1A = level1;
  OCR1B = level2;

rtfm, Jörg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.