ロボット用のサーボモータのコントロールには、PWM信号が使われています。このPWMはマイコンなどで発生させることが出来ますが、通常は3〜8ch程度の本数です。一方、ロボットでは16ch以上が使われます。このPWMを効率よく分配することが、ロボットの制御のキモになります。
PWM-SDとは PWM-SiginalDistributor の略称です。このシステムは宮田耕自氏が発表された LBC(Little Burning Core)をベースに開発したものです。
PWM-SDC とは PWM-SD の機能に加えて、Redバージョンなどの位置情報を出力するタイプのサーボモータに対応すべく拡張した機能です。
オリジナルの LBC では PWM出力は24ch、 74HC75, 74HC238 x 3 で構成されていたものを 74HC237 x 4 の構成にしました。デコーダ回路を増やしたことにより、さらに 8ch の PWM 切替が可能になりました。
CPLD を用いて実装しました。試作品では44ピンタイプのチップを用いたために、16ch分のサーボモータのコントロールですが、本基板では 32ch 分の制御が可能になります。
図中の赤の部分が今回開発した、PWM-SDになります。緑色の部分が PWM-SDC の部分です。
ブロック図内の赤色部分の部品は全て、秋葉原で調達可能です。
配線密度が高いので、ショートしないように注意します。サーボ電源部は大電流が流れるので、太い配線を使います(写真の中の赤い配線部)。
配線密度が高いので、ショートしないように注意します。サーボ電源部は大電流が流れるので、太い配線を使います。
写真は実際の PWM-SDC の出力波形です。画面の上から順番に ch0 出力、ch1 出力になっているのがわかると思います。トリガは オシロスコープの ch3 に入力し /LE シグナルを使っています。最下段のパルス状の波形です。サーボの動作周期 2.3msec 毎にトリガがかかり、ch0 から順番に出力されています。
PWM-SDC の機能は大きく分けて、上記の PWM-SD の機能とサーボモータの位置情報を取り込む機能があります。
サーボモータへのPWM出力機能はサーボモータで駆動するロボットにとっては、ごく普通の機能です。
CPU が持つPWM 信号をサーボモータへ出力するための機能です。
PWM の出力をそのまま、サーボモータへ出力します。
Reset 信号 L 設定にしてカウンタをリセットします。
CPU の GPIO から出力される PWM 出力(ソフト PWM)をサーボモータに出力します。
レッドバージョンなどのサーボモータではサーボの角度指定の信号線が入力/出力の双方向に設定できます。角度情報の出力(サーボモータから見て)を CPU に取り込むためにCPUのPWM出力部をハイインピーダンス設定にします。
FB_Dataの信号を CPU のキャプチャ機能により、パルス幅測定を行い。サーボモータの角度情報を得ます。 サーボの角度を設定した後、その角度を読み込んだところ。角度に応じてパルスの幅が変化しているのがわかる。
クロックを入力して次のサーボモータへセレクタを切り替えます。クロックへの出力はキャプチャ入力のパルス幅測定後に行います。
LBCを公開いただいた、宮田耕自氏に感謝します。PWM-SDC を CPLD化するにあたって、IPを提供してくれた NOB_Tech 氏にも感謝します。