setPWMの動作(PCA9685)

サーボ用ioエキスパンダーのPCA9685を使おうとして出力で詰まったのでメモ

 

Arduinoでスケッチを書く際、PCA9685の出力はsetPWMを使う

setPWM(channel, on, off)

 channel:PCA9685の出力端子番号(0~15)
 on:Low→Highへ変化するタイミング
 off:High→Lowへ変化するタイミング

 

参考

learn.adafruit.com

 

ArduinoでPWM出力する場合はanalogWriteを使ってデューティー比を指定する(実質HIGHの幅を指定する)のに対し、setPWMは幅をより細かく指定する(HIGHだけでなくLOWも明示的に与えている)。

f:id:eraeraera:20210711145710p:plain

f:id:eraeraera:20210711150005p:plain

 

なので以下のLチカスケッチを実行すると、LEDの輝度変化が両者で逆になる。

※LEDはPCA9685の0と8に接続し、抵抗220Ωを挟んだ。

 ライブラリは秋月電子のサイトからダウンロードしたものを使用。

 

#include <PCA9685.h>

PCA9685 pwm = PCA9685(0x40);


void setup() {

  pwm.begin();
  pwm.setPWMFreq(1600);


  for(int i=0;i<16;i++){
    pwm.setPWM(i,0,0);
  }
}

 

void loop() {
  for(int i=0;i<256;i++){
    int j=map(i,0,255,0,4096);
    pwm.setPWM(8,j,0);
    pwm.setPWM(0,0,j);
    delay(10);
  }
}