ArduinoのPWM周波数を変える Due編
Arduino DueのPWM周波数を変える話
ロボットを制御してくると変えたくなるのが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箇所変えるようにしてください.