16チャンネルPWMサーボコントローラー PCA9685【電子工作始めますか?】

タイトル
16個のサーボモータをコントロールできるPCA9685を使ったモジュールを動かしてみます。
I2C接続なので簡単に動かせます。

PCA9685はLEDを制御するICのようです。バックライトとか多くのLEDの明るさをコントロールする事を想定しているようです。
The PCA9685 is an I²C-bus controlled 16-channel LED controller optimized for Red/Green/Blue/Amber (RGBA) color backlighting applications. 
I2Cでコントロールします。異なるアドレスを62個設定できるので、同じI2Cバスに62個、最大992個のLEDやサーボモータをコントロールする事も可能です。
今回使ったモジュールはこれ

I2Cのコネクタ端子が左右にあり、数珠つなぎすることができます。
数珠つなぎするときにはI2Cのプルアップ抵抗を取り外すのを忘れないようにしましょう。今回はRaspberry Piに接続するのでプルアップ抵抗はいりません。できれば外したほうが良いですがめんどくさいので外しませんでした。

複数のPCA9685を同じI2Cバスに接続するのでI2Cの通信速度が遅いと同時コントロールに支障がでてきます。そのためPCA9685は高速なクロックに対応したFast mode plus(Fm+)に対応しています。最大1Mbpsで通信できます。数個のサーボを動かすくらいなら気にしなく良いでしょう。

サーボモータのコントロールに特化したモジュール基板です。16個のサーボモータをつなぐコネクタがあります。
サーボモータ用の電源とPCA9685の電源は分離しています。PCA9685は2.3V~5.5Vです。Raspberry PiでもArduinoでもそのままつなげます。サーボモータの電源は別に用意します。サーボモータはたくさんの電流が流れるのでRaspberry Piの5Vを使ってはだめです。乾電池4本でいいでしょう。

接続図
Raspberry Piとの接続は上図のようにします。PCA9685モジュールのV+端子はサーボ用電源なのでつなぎません。ピンの並びがRaspberry Piの端子の並びと同じです。ストレートのケーブルを作ればいいでしょう。
PCA9685のOE端子をGPIO7とつなぎます。OE端子をハイにするとすべてのチャンネルのPWMの出力が止まります。使う時はOE端子をローにします。

PCA9685
サーボモータの端子は16個あります。上写真の左から0チャンネル~15チャンネルです。
黄色はPWM端子、赤色はV+端子、黒色はGNDです。
上真ん中のV+端子にサーボモータの電源を接続します。


このV+の電圧は5~6Vです。
RGB LEDテーブを接続してみようと思ったのですが、写真左上のコンデンサーの耐圧が10Vでした。LEDテープの電圧は12Vなのでこのままでは使えません。コンデンサーを耐圧の高いものへ交換すれば使えるでしょう。この耐圧はPCA9685モジュールのメーカーによって異なるでしょう。お手元のものの耐圧確認をおすすめします。

I2Cアドレスはデフォルトで0x40です。
i2cdetect -y 1
で接続できているか確認します。0x40と0x70が見えていれば接続は成功しています。
0x70のアドレスは使いません。これはすべてのPWMを一斉に同じ設定にするアドレスのようです。使うドライバソフトによっては実装されていません。

ArduinoやPythonで動かす例はいくらでも見つかるでしょうから、本ブログではいつものようにNode-REDで動かします。
Node-REDでPCA9685を動かすノードが公開されています。
A Node-RED node to control an NXP PCA9685 such as the Adafruit Servo Driver using the I2C interface. Based on Sergey Krasnov's bmp085 node. Uses the pca9685 library.
パレットの管理からノードをインストールします。

周波数を50Hzにすればサーボモータのコントロールができます。サーボモータのパルス幅は1ms~2msです。サーボによって若干範囲が異なるのでサーボに合わせて微調整します。

ビデオ




コメント

最近のコメント

Threaded Recent Comments will be here.