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

Arduino DueのPWM周波数を変える話

Sat, 02 Apr 2016

ロボットを制御してくると変えたくなるのがPWM周波数.

ただ,Arduinoって変えづらいんですよ.

 

MEGAとDueをよく使うので,この2つを書こうと思うのですが,今回はDueのPWM周波数の変え方を書こうと思います.

(Arduino使っていると他方から”Arduinoはスペック不足”とよく聞きます.僕自身スペック不足というより,使いづらいなーとは感じているので,PWM周波数変えなきゃいけないお年ごろになったらArduinoやめるのも手だと思っています.)

 

そんでもって,MEGAとDueですが,圧倒的にDueのほうが変えやすいです.IDEのファイルを書き換えるだけなので.

(それが一番楽ですが,検索する限り他にも方法はあります)

※MEGAはレジスタを書き換える必要があります.

 

先にに参考にしたリンクを貼っときます.

https://forums.adafruit.com/viewtopic.php?f=25&t=52859

 

※2017/8/8追記

最新のArduinoIDE1.8.xだとBoardManagerによってDUEを追加するようになったのでディレクトリが変更になりました.

まず,BoardManagerを使ってDUEを入れる必要があるので注意してください.

で,新しいディレクトリはこちら.

C:\Users{PC名}\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.11\variants\arduinoduex

(AppDataは隠しフォルダなので注意)

 

では,めちゃくちゃ簡単に説明します.(インストール版IDEを例に説明します。)

1.C:Program Files (x86)Arduinohardwarearduinosamariantsarduino_due_x/variant.hを開く

 

2.以下のコードの”ここ”と書いてあるところが指定できる周波数なので,任意のものに変える.僕の場合,215行目からでした.

/*
 * PWM
 */
#define PWM_INTERFACE		PWM
#define PWM_INTERFACE_ID	ID_PWM
#define PWM_FREQUENCY		1000 //ここ
#define PWM_MAX_DUTY_CYCLE	255
#define PWM_MIN_DUTY_CYCLE	0
#define PWM_RESOLUTION		8

/*
 * TC
 */
#define TC_INTERFACE        TC0
#define TC_INTERFACE_ID     ID_TC0
#define TC_FREQUENCY        1000 //ここ
#define TC_MAX_DUTY_CYCLE   255
#define TC_MIN_DUTY_CYCLE   0
#define TC_RESOLUTION		8

 

3.このファイルは上書き禁止なので,名前をつけて保存を選択し,デスクトップ等に保存する.

 

4.もとのファイルを忘れない場所にバックアップしておく(省略可)

 

5.名前をつけて保存したファイルをvariant.hに上書きコピーする.

 

これで,IDE再起動してコンパイルすると,PWM周波数が変わっています!簡単すぎ!

 

プログラム上で変えられないのが欠点なんですが・・・

常に20kで動かしたいとかの場合なら問題ないでしょう.

 

もうすこし勉強したらMEGAの方も書きたいと思います.

 

4/8追記

2箇所変える必要があるんですけど,”TC”の方を変えない人がいるようです.

こちらも変えないと1kHzのままなので必ず2箇所変えるようにしてください.

© anbalab 2019