Raspberry Pi Pico(ラズパイPico)を Arduino環境で使ってみます。
PicoのPWM出力(アナログ出力)は、ピンアサイン割と自由であったり、周波数設定ができる関数が準備されていたりとArduino UNOと比べるとちょっと便利です。
▼PicoをArduino環境で使う方法はこちら▼
ライブラリは earlephilhower/arduino pico のほうを使う前提です。
基本的な使い方は、Arduino のanalogWrite()
と同様なので、ここでは設定関係の関数を中心にみてみます。
▼PWMの周波数設定▼
extern "C" void analogWriteFreq(uint32_t freq) { if (freq == analogFreq) { return; } if (freq < 100) { DEBUGCORE("ERROR: analogWriteFreq too low (%d)\n", freq); analogFreq = 100; } else if (freq > 60000) { DEBUGCORE("ERROR: analogWriteFreq too high (%d)\n", freq); analogFreq = 60000; } else { analogFreq = freq; } pwmInitted = false; }
▲まずはPWM周波数を設定する関数です。Picoは100Hz~60KHzの間で設定できるようですね。デフォルトは1000Hzのよう。(2023/05 ⊿1:現在では1MHzまでサポートしているようです。たまにボードの更新見ないとだめですね。)
Arduino UNOの場合はTIMER毎(ピン毎)で決め打ちとなっていておよそ 490Hz/980Hz くらいです。
Unoの場合、(レジスタ弄って)周波数を変更するとTIMERの関係で少し背反があったのですが、Picoの場合はどうなんですかね。そこまで読み込んでないのでよくわかってません。
▼Rangeの設定▼
extern "C" void analogWriteRange(uint32_t range) { if (range == analogScale) { return; } if ((range >= 15) && (range <= 65535)) { analogScale = range; pwmInitted = false; } else { DEBUGCORE("ERROR: analogWriteRange out of range (%d)\n", range); } }
▲ここでデューティ比(パルス幅)のスケールを決めてます。15~65535の間で設定できるよう。デフォルトのスケールレンジは255。指定したスケールMax値でデューティ比100%の出力となります。
他に解像度でも指定できる関数があるようですがここでは割愛。設定関係は以上です。PicoにはArduinoと違って、周波数と解像度を設定できる関数が準備されていて少し便利です。
あと使い方ですが、Arduinoと同じで、
extern "C" void analogWrite(pin_size_t pin, int val)
▲analogWrite関数で、PWM出力するピンとデューティ比(パルス幅)指定するだけです。指定できるGPIOピンに制限はなさそう。
ArduinoIDE使用すればPicoのPWM出力(analogWrite)はほぼ Arduino のままですね。
コメント