ちょっとTea Time!? サーボコントローラ(PCA9685)をつかってみる! 2025.2.27

別ページで6本脚ロボットを検討中です。全部で18個のサーボを動かす必要がありますが、
PWMの出力を18本だすためにわざわざロジックICでI/Oを作成し、ソフト制御でパルスを出すことにしました。
ソフトでパルスをだすために、どうしてもCPUのパワーの30%はそちらに割く必要があります。
RP2040の演算能力は高いので、残りの70%でもロボット制御演算には問題ないと思うのですが、ちょっと心配。
で、一般にはこれだけのサーボを動かすためにはどうしているのだろう?
と、気になっていたところに、こんな基板があるのを見つけました。
PCA9685をつかったサーボコントローラで、これ1枚で16個のサーボが動かせます。
秋月でも探したら、同じようなものがありました。


こんなものがあるんだ〜。これで16個のサーボコントロールが可能です。


秋月電子からも同じようなものがでています。

PCA9685ってLEDコントローラ?

PCA9685のデータシートはこちら:PCA9685.pdf

最初にデータシートをみて、なんでLEDコントローラなの?
と思いましたが、中身をみてガッテンです。もともともはLEDの調光用のコントローラなのですが、
PWM出力なので、サーボコントローラとしても流用できるということのようです。

本来の目的はLEDのコントローラのようです。

分解能はどのくらい?

サーボの制御信号は20ms間隔で0.5〜2.5msのパルス幅2msで制御します。そのためPCA9685のPWM分解能が
12bitだとすると、分解能は2/20*4095=409.5になります。ほぼ400として扱えばいいでしょう。時間分解能でいえば
約5usです。ちょっと大きいかもです。サーボ自体の角度分解能が1/400ということは±90度サーボなら0.45度です。
このくらいなら十分なのかな?

早速購入!
とりあえず、面白そうなので基板を2枚と、あと一つは関連するオモチャを購入です。

ブツが届きました。


ついでのオモチャとは
 サーボの動作テストにつかえるコントローラーも購入です。なぜ購入したかといえば、
3品以上購入しないと送料が無料にならなかったので、なにか安そうなものをということで
選んだものです。170円です。


170円で購入したサーボの動作確認用のコントローラです。


制御用のマイコンらしきものが見えます。

機能としては3つのモードの切替ができます。VRでパルス幅を手動で変えるモード、サーボを中点に設定するモード、
そして自動でサーボを動かすモードです。パルス幅は0.9ms〜2.2msで変わりますが、できれば
0.5〜2.5msで変わって欲しかったなあ〜。まあ、一般のラジコンでは1ms〜2msの範囲でつかうみたいなので、
これだけ変われば十分なのでしょう。

こんな形でサーボの動作テストができるので便利です。


パルスの変化j幅は0.9ms〜2.2ms程度。

本題に戻って

さっそく基板をみてみましょう。
これで490円ですから安いものです。デバイスだけでもDIGIKEYで買うと400円以上するものなあ〜。
半田ジャンバー端子がありますが、なにもシルク印刷がありません。
まあ、調べれば簡単にわかります。ということで、すこしパターンをおいかけると
アドレスA0〜A5なっています。シルク印刷でOPEN=0となっているので、
どうやらプルアップではなくてプルダウンになっているようです。


実物はこんな感じです。


OPEN=0なので、プルアップではなく、プルダウンになっています。


そういえば、出力もどれがどれか分からないので調べておきました。


早速動かしてみましょう!

動かす方法は簡単で、
@PWMの周期を設定 
A1周期を4096分割したときのパルスのON/OFFのタイミングを書き込む

ということだけです。

PWM周期は50Hzにしたいので、プリスケールの設定値は次式からもとめます。


25000000/(4096*50)-1 = 121

になります。これをアドレス0xfeに書き込みます。
そして、次はONのタイミングとOFFのタイミングを書き込みます。
12Bit長なので2バイトにわけてLEDn_ONレジスタとLEDn_OFFレジスタに
書き込みです。
 面倒なのでLEDn_ONはゼロでもいいのかな?

 パルスを出すには出力のONとOFFのタイミングを書き込むだけです。


最後に、1度だけおまじないです。もともとの設定がスリープ状態になっているので、
叩き起こす必要があります。そのため、MODE1レジスタ(0x00)に0x00を書き込みます。
SLEEP解除だけなく、複数枚のこの基板をつかうことも考えてALLCALLを無視させます。
でないと、すべての基板が同じ動作をしてしまいますからね〜。

で、早速マイコンに接続して動作確認です。
オシロで出力波形を観測しますが、問題なくパルスがでていることが確認できました。

I2Cラインを接続して動作確認です。


問題なく動きました。周期が52Hzになっているので、内蔵発振器の精度は3%くらいかな。

まとめと懸念

1)まとめ 
 ラジコンサーボを沢山つかう時には、PCA9685は便利につかえるデバイスです。
 分解能は0.5ms〜2.5msのパルス間隔では5us程度と、ソコソコです。

2)懸念

ラジコンのサーボって結構電流が流れます。接続したサーボがすべてが同時に動くというわけでは
ないでしょうが、それでも16個もサーボをつないだら静止時にでも1A以上、動作時には数Aに
なりそうです。


一般的サーボですら動作時500〜900mA、ストールしたら2.5Aも流れます。


必要な電流値に比べると基板のサーボ電源のラインが貧弱なこと!これが最大の懸念。
購入した基板では3つのスルーホールで基板の表裏が接続されているとことがあります。
電源ラインはそこそこ太いのですが、それをVIA3個で接続するのはきつのでは、という感じです。
一般にはΦ0.5mmのVIA3個で1Aという設計ルールがあるようです。
サーボをフルに動かしたら、ここで燃え上がりそうです。


サーボへの電源ラインはこの小さなスルホール(VIA)3つで繋がっているところがあります。
ここで燃えたりしないだろうか?

秋月さんの基板は大丈夫かな?と思ってみてみましたが、こちらはパターンが細いです。
一般にパターン1mmで1Aというルールがあるようですが、どうみて0.3mm程度です。
これも、サーボをフルに動かしたら、ここが燃え上がりそうですです。


秋月基板もサーボ電源のラインが極細です。


取説にはこのように書いてありますが、ターミナルブロックからの配線はもっと太くする必要ありですね。


ということで、実際に使う場合にはサーボの電源ラインは追加配線で強化しておいたほうが良さそうです。


追記 2025.2.28

なぜ商品写真と実物とのシルクが違うのだろう?
ひょっとしてオリジナルのコピー商品かな?


商品写真。ピンにはちゃんとシルク印刷があります。


実物は重要なシルク印刷がありません。

(おしまい)