- Found at :
- www.adafruit.com
PCA9685
PCA9685は16の独立したPWMを出力できるチップです。周波数は16全てで共通となります。
サーボモーターの駆動に最適で、16のサーボモーターをそれぞれ別々に動かすことが出来ます。
出力電流はそれほど強くないのでDCモーターを直接つなぐことは出来ません。
各社からサーボモーター用のピンヘッダもついたモジュール販売されています。
上の写真はAdafruitのものです。
https://www.adafruit.com/product/815
wired(obniz, {[gnd, vcc, oe, scl, sda, i2c, enabled, address, drive]})
チップの各ピンをどのobniz Boardのioに接続したか設定します。
サーボモーターに供給する電源(AdafruitのモジュールではV+と表示されています。)はobniz Boardからではなく、別の電源を利用して下さい。
name | type | required | default | description |
---|---|---|---|---|
scl | number(obniz Board io) |
no | つないだobniz Boardのioを指定してください。 | |
sda | number(obniz Board io) |
no | つないだobniz Boardのioを指定してください。 | |
i2c | i2c object |
no | 設定済みのi2cに接続している場合に利用できます。 | |
vcc | number(obniz Board io) |
no | 別の電源につないでいる場合は指定する必要はありません。vcc/gndどちらかでも指定されている場合は、電源投入後にこの関数の中でwaitが入ります。 | |
gnd | number(obniz Board io) |
no | 別の電源につないでいる場合は指定する必要はありません。vcc/gndどちらかでも指定されている場合は、電源投入後にこの関数の中でwaitが入ります。 | |
oe | number(obniz Board io) |
no | 出力ピンすべてをonでもoffでもないハイインピーダンスに切り替えるためのピンです。指定した場合はsetEnable()関数が使えるようになります。enabled=falseを指定しない限りenabledが初期状態となります。 | |
enabled | boolean |
no | true | oeが指定されていた場合、初期状態をどちらにするか指定できます。 |
address | number |
no | 0x40 | モジュールのアドレスです。初期設定(0x40)から変更している場合は指定して下さい。 |
drive | boolean |
no | 'push-pull' | 標準で出力はプッシュプル出力ですが、'open-drain'を指定することでオープンドレイン出力にできます。 |
// Javascript Example
var driver = obniz.wired("PCA9685", {gnd:0, oe:1, scl:2, sda:3, vcc:4});
var pwm0 = driver.getPWM(0);
pwm0.freq(1000);
pwm0.duty(50);
Multiple on single i2c
このモジュールはI2Cのアドレスを比較的自由に設定できます。
そのため同じI2Cバスライン上に複数のモジュールを置くことが出来ます。
// Javascript Example
var i2c = obniz.getFreeI2C();
i2c.start({mode:"master", sda:3, scl:2, clock:400 * 1000, pull:"5v"});
var driver0 = obniz.wired("PCA9685", {gnd:0, oe:1, i2c:i2c, vcc:4, address:0x40});
var driver1 = obniz.wired("PCA9685", {i2c:i2c, address:0x41});
var pwm0 = driver0.getPWM(0);
pwm0.freq(1000);
pwm0.duty(50);
var pwm16 = driver1.getPWM(0);
pwm16.freq(1000);
pwm16.duty(50);
getPWM(num)
16あるpwmモジュールのうちいずれか1つをpwmオブジェクトとして取得できます。0~15が指定できます。
pwmオブジェクトはobniz.pwmXと同じく以下の関数を持っています。
- pwm.freq()
- pwm.duty()
- pwm.pulse()
ただし、周波数だけはモジュール全体で共通なので、他のPWMと違う値を指定すると他のPWMに影響があります。pwm0だけ1khzでほかは500hzといった使い方はできません。
// Javascript Example
var driver = obniz.wired("PCA9685", {gnd:0, oe:1, scl:2, sda:3, vcc:4});
var pwm0 = driver.getPWM(0);
pwm0.freq(1000);
pwm0.duty(50);
また、ServoMotorもこのpwmオブジェクトを受け付けられるようになっています。
// Javascript Example
var driver = obniz.wired("PCA9685", {gnd:0, oe:1, scl:2, sda:3, vcc:4});
var servo0 = obniz.wired("ServoMotor", {pwm: driver.getPWM(0)});
var servo1 = obniz.wired("ServoMotor", {pwm: driver.getPWM(1)});
var servo2 = obniz.wired("ServoMotor", {pwm: driver.getPWM(2)});
servo0.angle(90);
servo1.angle(95);
servo2.angle(100);
freq(frequency)
モジュールの周波数を指定します。
16あるPWMは独立していますが、周波数だけは共通となります。
24~1526Hzが指定できます。
また、このモジュールはパルス出力にDuty比を重要視しますので、出力中のpwmの周波数を変更してもDuty比には影響はありません。
// Javascript Example
var driver = obniz.wired("PCA9685", {gnd:0, oe:1, scl:2, sda:3, vcc:4});
driver.freq(1000);
duty(index, duty)
indexで指定したpwmのDuty比を変更できます。
// Javascript Example
var driver = obniz.wired("PCA9685", {gnd:0, oe:1, scl:2, sda:3, vcc:4});
driver.freq(1000);
driver.duty(0, 50);
driver.duty(1, 60);
pulse(index, pulse_width)
indexで指定したpwmのパルス出力幅をmsecで指定します。
// Javascript Example
var driver = obniz.wired("PCA9685", {gnd:0, oe:1, scl:2, sda:3, vcc:4});
driver.freq(100); // 100hz = 10msec interval
driver.pulse(0, 5);
driver.pulse(1, 6);
setEnable(enabled)
oe端子をobniz Boardにつないでいる場合にのみ使えます。
出力ピンをすべてハイインピーダンスにします。
// Javascript Example
var driver = obniz.wired("PCA9685", {gnd:0, oe:1, scl:2, sda:3, vcc:4, enabled: false});
driver.setEnable(true);
Supported from: obniz.js 3.5.0