ArduinoVariablePWMFrequenz

Aus Hackerspace Ffm
Wechseln zu: Navigation, Suche

Die standard Frequenz ist 490 Hz, an manchen Pins 980 Hz. Für die meisten Anwendungen ist das ausreichend. Braucht man mehr Auswahl, kann man über den Prescaler sehr einfach weitere Frequenzen zur Verfügung stellen.

Für die 490 Hz Pins gibt es folgende Möglichkeiten:

Teiler Frequenz
1 31.372,55
8 3.921,16
64 490,2
256 122,55
1024 30,64

Für 980 Hz Pins diese:

Teiler Frequenz
1 62.500
8 7.812,5
64 976,56
256 244,14
1024 61,035

Eingestellt werden können diese über das Register TCCRnB. Das n steht für den Timer. Also gehört das Register TCCR1B zum Timer 1.

TCCR1B.PNG

Die wichtigen bits sind CS12, CS11 und CS10 die mit dem Ausdruck CSn2:0 zusammengefasst werden.

CSn2-0 ClockSelect.PNG

Im Code schreibt man dann für eine Frequenz von 31372 Hz:

 TCCR1B = TCCR1B & 0b11111000 | 0x01; 


Möchte man jede x-beliebige Frequenz zu der ein Arduino fähig ist erzeugen, wird es schnell kompliziert. Man muss sich ausgiebig mit dem Datenblatt und dem inneren Aufbau der Timer/Counter auseinander setzen.

Timer unterscheiden sich grundlegend in ihrer Bit-Tiefe bzw. Auflösung. Es gibt 8 bit (256) und 16 bit (65.536) Timer. Zum Verständnis nochmal die PWM als Diagramm mit Periode und Duty Cycle.

Period DutyCycle Flank.PNG Periods 1Second.PNG