こちらを参考にmacでやろうとして戸惑ったので.
http://anbalab.com/summary/duepwm
環境
- Arduino Due 互換品
HiLetgo® DUE R3 ARM 32Bit AT91SAM3X8EA Arduino DUEと互換 ケーブル付き [並行輸入品]
- 出版社/メーカー: HiLetgo
- メディア:
- この商品を含むブログを見る
- Arduino IDE 1.8.5
- MacBook Pro Mid 2017
- macOS Mojave beta
variant.hのディレクトリ
ここにありました!
~/Library/Arduino15/packages/arduino/hardware/sam/1.6.12/variants/arduino_due_x/
※~は/Users/<ログインユーザ名>/を指す省略表記です ※Arduino15,1.6.12の数字はバージョンにより異なります.自分のパッケージのバージョンを確認してください
1.6.12の場合は上のディレクトリをファインダーでShift+Command+Gで出てくる「フォルダの場所を入力」機能でジャンプできます.
PWMの周波数を変える手順
variant.hを開きます. 220行目あたりをみますと,
//以下はvariant.hの220行目から /* * PWM */ #define PWM_INTERFACE PWM #define PWM_INTERFACE_ID ID_PWM //#define PWM_FREQUENCY 1000 #define PWM_FREQUENCY 4000 #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_FREQUENCY 4000 #define TC_MAX_DUTY_CYCLE 255 #define TC_MIN_DUTY_CYCLE 0 #define TC_RESOLUTION 8
のようにdefine定義が連なっています.
このうち,PWM_FREQUENCY
とTC_FREQUENCY
を変えたいPWM周波数[Hz]に書き換えます.
私の場合は226行目と236行目でした.
念の為,書き換える前のコードをコメントアウトして残しました.
あとはこれを保存さえすれば,再起動などをしなくても,書き込みなおすだけで,周波数が変更されます.
ちなみに,PWMのデューティもより細かく変更できます
どこまで周波数を高くできるか
このクソみたいなプログラムで実験してみました.
//このプログラムは Arduino DUE 用です void setup() { analogWrite(11,100); } void loop() { }
今回,PWMを変更する目的は,モータを動かすときの雑音が気になったからです. 可聴域の上限である20kHzまで上げれたら御の字でしょう.
というわけで実験開始
まずは5kHz,
難なくクリア,続けて大台10kHz,
そして目標の20kHz,
ぜんぜんいけますね! 限界を見たくなったので一応続けます.一気に飛んで100kHz,
divを広げましたがまったく問題ないですね.うっすら縦線が見え始めています. 1桁増やして1MHz,
傾斜が見えてきました.続けて5MHz,
かなり形が崩れてますね.この辺が限界でしょう.最後に10MHz,
ピークは一瞬ですね.もはやPWMとは呼べないでしょう.
用途にもよりますが,5MHzくらいまでいけるんじゃないでしょうか.こんなに必要な用途思いつきませんがね...