setPWMの動作(PCA9685)
サーボ用ioエキスパンダーのPCA9685を使おうとして出力で詰まったのでメモ
Arduinoでスケッチを書く際、PCA9685の出力はsetPWMを使う
setPWM(channel, on, off)
channel:PCA9685の出力端子番号(0~15)
on:Low→Highへ変化するタイミング
off:High→Lowへ変化するタイミング
参考
ArduinoでPWM出力する場合はanalogWriteを使ってデューティー比を指定する(実質HIGHの幅を指定する)のに対し、setPWMは幅をより細かく指定する(HIGHだけでなくLOWも明示的に与えている)。
なので以下の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);
}
}