PR

Raspberry Pi PicoでPWM出力(analogWrite)

記事内に広告が含まれています。

 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 のままですね。

コメント

タイトルとURLをコピーしました