ちょっと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
なぜ商品写真と実物とのシルクが違うのだろう?
ひょっとしてオリジナルのコピー商品かな?
商品写真。ピンにはちゃんとシルク印刷があります。
実物は重要なシルク印刷がありません。
(おしまい)