デフォルトで利用可能なものよりも高い解像度と周波数で Arduino Due PWM を使用できるようにしたいと考えています。私は IDE 1.6.8 を使用しています。これは、数週間前にインストールした最新のものです (1.6.9 は現在進行中かもしれません)。インターネットで検索し、ボードとオシロスコープで実験した後、次の結論に達しました。
- より高い PWM 周波数を取得するには、variant.hの対応する行を変更する必要があります。PWM はピン 6 ~ 9 に影響を与えるようで、TC は他の PWM 対応ピンに影響を与えます。どのピンがどのタイマーにあるからだと思いますか?micros()、millis ()などは変更の影響を受けないようです:
#define PWM_FREQUENCY 20000 // changed from 1000
#define TC_FREQUENCY 20000 // changed from 1000
- 複数の場所で述べたように、analogWriteResolution() Arduino 関数が壊れているか、少なくともそれ自体では、Due PWM 解像度を上げるのに十分ではありません。analogWriteResolution()が期待どおりに動作するためには、 variant.hで以下を変更する必要もあります:
#define PWM_MAX_DUTY_CYCLE 4095 // changed from 255
#define PWM_MIN_DUTY_CYCLE 0
#define PWM_RESOLUTION 12 // changed from 8
- 私がボードを購入したときの標準である Arduino Due R3-E の物理的なラベルは誤解を招くようです: ボード上にDIGITAL (PWM~)と書かれており、そのような~はピン 3、5、6 にのみ存在します。 、9、10、11 に含まれているピン 2 から 13 までのすべてのピンで PWM を取得できます。
すべてを把握し、オシロスコープなどで確認するのに時間がかかり、スタックオーバーフローでそれらの回答が見つからなかったため、このコンテンツをここに投稿します。また、2 つの質問があります。
PWM と TC の周波数を変更しても (私が行ったテストのように) OK ですか? 他のコア機能/ライブラリとやり取りできますか?
下位互換性以外に、PWM の最大デューティ サイクルと分解能のデフォルト値に理由はありますか?