3.1 - PWM ohne Pfeifen

 

Wenn man einen 3 Pin Lüfter per PWM mit dem Arduino drosselt, dann kann man oft ein störendes Pfeifen oder Rattern vom Lüfter hören. Das liegt daran, dass die PWM Ausgänge bei Arduino standardmäßig mit 490Hz oder 980Hz laufen.
Diese Frequenz liegt im für Menschen hörbaren Bereich , daher auch die Geräusche (ganz vereinfacht gesagt ;)). Um diesem Problem Herr zu werden, muss man dem Arduino sagen, er soll die PWM Ausgänge mit höherer Frequenz (über 20kHz) betreiben. Das wiederum bringt weitere Stolpersteine mit sich. 
 
Um das Problem mit den pfeifenden/ratternden Lüftern zu lösen, muss man die Voreinstellungen der Timer im Arduino ändern um so die PWM Frequenz zu erhöhen.
Jetzt fragt ihr euch sicherlich, was redet er jetzt von Timern ?(
Als Timer bezeichnet man beim Arduino/ Mikrocontrollern einen auf dem Chip integriertes Funktionsmodul, welcher beim Zählen von Ereignissen, Messen von Zeitabständen und periodischen Ausführen von Programmteilen eine wichtige Hilfe darstellt. Mit einem Timer sind immer mehrere PWM Ausgänge verbunden. Das ganze sieht wie folgt aus.
 
 
Arduino Uno und Andere
 
Der Arduino Uno hat 3 Timer und 6 PWM Ausgänge. Sie hängen wie folgt zusammen
pwm frequenz uno
 
 
Diese Belegung müsste mit den meisten anderen kleinen Arduinos übereinstimmen. Ich kann dafür aber nicht die Hand ins Feuer legen.
 
 
Arduino Mega 2560
 
Der Arduino Mega 2560 hat 6 Timer und 15 PWM Ausgänge. Sie hängen wie folgt zusammen
pwm frequenz mega
 
 
Ergänzend hier noch die Intel Spezifikation für PWM Lüfter.
 
 
Jetzt, da wir wissen welcher Timer welche Pins steuert, kommen wir zu dem Stolperstein von dem ich vorher gesprochen habe. 
Timer0 steuert nicht nur zwei PWM Pins, sondern auch die Funktionen delay(), millis() und micros().
Wenn man jetzt die Frequenz dieses Timers verändert, ändern sich auch die Funktionen, wie oben in der Tabelle zu sehen ist. Zum beispiel, wenn wir die Frequenz auf 62500 Hz stellen, muss man die Funktion delay(1000) in delay(62500) ändern um 1 Sekunde zu warten.

Wenn ihr es etwas genauer nachlesen wollt, Arduino Playground.


Der beste Weg dieses Problem zu umgehen, ist die Pins von Timer0 einfach nicht zu benutzen, da ihr sonst im Code schnell einen Timingfehler machen könnt. Wenn es nicht anders geht, dann achtet bitte sorgfältig darauf, die betroffenen Zeitfunktionen richtig zu programmieren.

Das Umstellen der Frequenz ist ganz einfach. Es bedarf nur einer einzigen Zeile Code die unter void setup() eingefügt werden muss.

TCCRnB = TCCRnB & 0b11111000 | Befehl;

Bei diesem befehl müsst ihr nur das n durch die Nummer des Timers und Befehl durch den Hex Code aus der Tabelle oben ersetzen. Für Timer1 und 31300Hz sähe es dann so aus.

TCCR1B = TCCR1B & 0b11111000 | 0x01;
 
 
 
 

Code

 

void setup()
{
  TCCR1B = TCCR1B & 0b11111000 | 0x01; // Setzt Timer1 (Pin 9 und 10) auf 31300Hz
}


void loop()
{
  // put your main code here, to run repeatedly: 
}

 
 
Wenn ihr diese Zeile in euren Code einbaut, sollte es kein pfeifen oder rattern mehr geben. Ihr könnt jetzt ganz normal mit der analogWrite(0 - 255) Funktion euren Lüfter ansteuern.
 
 
 
 
 
 
Das war es auch schon  fertig
 
 
 
 
 

Seitennavigation
 
                           arrow button up               arrow button next

Einen Kommentar verfassen

Als Gast kommentieren

0
  • Gast - Frank K.

    Hallo Bertram, Deine Webseite scheint mir mit viel Mühe aufgebaut. Einige Tutorials interessieren mich sehr, aber leider gibt es keine Möglichkeit diese zu betrachten. Oder ist das gewollt, dass man keine Möglichkeit hat sich zu Registrieren, um sich die meisten Tutorials anschauen zu können? Der Button "registrieren" führt nur zur Anmeldung. Dort kann kommt aber nur mit bestehenden Daten weiter. Ich drehe mich leider im Kreis. Sehr schade. LG Frank

  • Hallo Frank,
    die Tutorials die nicht zugänglich sind, sind noch nicht ganz fertig. Es fehlen aber eigentlich nur Titelbilder und die Videos. Welche Tutorials interessieren dich denn am meisten?
    Ich gehe mal in mich, ob ich doch schon alle online stellen soll und dann nach und nach die Bilder und Videos dazu einfügen.
    Eine Anmeldung auf meiner Seite ist im Übrigen nicht möglich. Die ist nur für mich, damit ich bequemer Administrieren kann ;)

    Gruß Bert

    Kommentar zuletzt bearbeitet am vor 8 Jahren von Bert