PWM Frequenz (TImer) für AVR verändern

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Weil ich aktuell ein Problem mit einem fürchterlich fiependen Lüfter habe, den ich per PWM in der Drehzahl regulieren möchte, habe ich nach einer Lösung gesucht. Dabei bin ich auf diese Lösung gefunden, die mit einer Funktion arbeitet. Um nur "mal eben" die Frequenz zu ändern ist das natürlich etwas "overkill", aber trotzdem vielleicht für den einen oder anderen interessant.

    Wichtig ist zu wissen, dass bei einer Änderung der PWM an D5 oder D6 (Timer 0) gleichzeitig die Funktionen delay(), millis() und micros() verändert werden!

    Timer 0 läuft mit 62500 Hz.

    Timer 1 und Timer 2 laufen mit 31250 Hz.

    Schön erklärt und mit Daten hinterlegt ist das hier.

    Für den Fall, dass der Link irgendwann tot ist und für mich als Gedankenstütze:

    Wer wie ich nur "mal eben" einen Timer ändern möchte, schreibt in die void setup()

    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; // Timer1 entspricht D9 und D10

  • Hi,

    wie Du schon richtig geschrieben hast: das beeinflusst das ganze interne timing ...

    Ich denke, man kann das mal machen, sollte aber dick und fett dokumentieren, was man gemacht hat. Sonst sucht man sich später, bei einer evtl. Fehlfunktion, einen Wolf ;)

    cu,

    -ds-

  • So wie ich es verstanden habe, sollte man die Finger von Timer0 lassen, da damit alles andere verknüpft ist. Timer1 und Timer2 haben hingegen kaum Einfluss auf "normale" Anwendungen. Da ich im aktuellen Projekt (Lötdampfabsaugung) auch millis() nutze, habe ich den PWM Pin zur Ansteuerung des FET von D6 auf D9 gelegt und lediglich Timer1 verändert. Das scheint nun alles noch genau so wie vorher zu laufen, nur dass dieses nervige Fiepen weg ist.

  • Da hast Du allerdings recht ... die beiden Timer 1 und 2 haben, zumindest was ich bisher feststellen konnte, keinen Einfluss und werden gerne auch als Trigger für irgendwelche zyklischen Funktions-Aufrufe verwendet.

    Das sollte man halt berücksichigen, falls man so was einsetzt ... mir fällt da jetzt spontan nur eine Lib zum Handling eines DIG ein.

    Da gab's aber noch mehr ...

    Na dann ... viel Erfolg noch,

    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!