3.1 - PWM ohne Pfeifen
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.
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.
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: }
Einen Kommentar verfassen
Einloggen um Kommentare zu verfassen
Als Gast kommentieren