読者です 読者をやめる 読者になる 読者になる

ArduinoのPWM周波数を変える MEGA編

一年越しのMEGA編となりました.

 

 1年前には無かった気がするんですが,公式でPWM周波数を変える方法が公開されているのでこちらを参考にしながら紹介しようと思います.

Arduino Playground - TimerPWMCheatsheet

 

まず,ArduinoMEGAにはタイマが5つあって,それぞれのタイマに対応しているピンがあります.

タイマ : PWMピン

timer 0 : 13, 4
timer 1 : 12, 11
timer 2 : 10, 9
timer 3 : 5, 3, 2
timer 4 : 8, 7, 6

たとえば,timer0だけ周波数を変えたら13,4ピンから出るPWM周波数のみが変わります.

 

先に重要なことを言っておくと,timer0はシステムに使われているので変更するのはおすすめしません.Delayとかの時間関数がずれます.

 

周波数の設定ですが,Dueのように任意の周波数にすることができません.

数段階の周波数の中から選べるって感じです.

timer0 (13, 4ピンのみ)

①62.5 [kHz]

②7.8125 [kHz]

③976.5625 [Hz]

④244.140625 [Hz]

⑤61.03515625 [Hz]

 

timer1 (12, 11ピンのみ)

①31.37255 [kHz]

②3.92116 [kHz]

③490.20 [Hz]

④122.55 [Hz]

⑤30.64 [Hz]

 

timer2 (10, 9ピンのみ)

①31.37255 [kHz]

②3.92116 [kHz]

③980.39 [Hz]

④490.20 [Hz]

⑤245.10 [Hz]

⑥122.55 [Hz]

⑦30.64 [Hz]

 

timer3 (5, 3, 2ピンのみ)

①31.37255 [kHz]

②3.92116 [kHz]

③490.20 [Hz]

④122.55 [Hz]

⑤30.64 [Hz]

 

timer4 (8, 7, 6ピンのみ)

①31.37255 [kHz]

②3.92116 [kHz]

③490.20 [Hz]

④122.55 [Hz]

⑤30.64 [Hz]

 

概念がわかったところで,void setup内で以下のように宣言すればPWM周波数を変えることができます.

 TCCRnB = (TCCRnB & 0b11111000) | 0x0m;

 n:タイマ番号 (0~4)

m:設定したい周波数の番号 (1~7)

 

コピペ用にGistを用意しましたのでご活用ください.