サーボコントローラの製作。
ロボットのアクチュエータとして、値段、入手性を考えるとラジコンサーボが一番簡単だと思われますが
どうやって動かすのでしょうか? ロボット作りの初心者はまずここでつまずきます。
ここは、ラジコンサーボをロボットに使うためどうしたらいいのか?のんさやが半年かかって出した結果です。
基本的なロジック回路は理解されている、H8はある程度わかる、C言語も適当に知っている、ことが前提の話です。
尚、このようなサーボの使用方法はサーボの標準使用方法とは言えないので
手を入れた瞬間からメーカの保証はないと思ってください。
1.サーボの動作信号は? いろいろなサイト、雑誌などで紹介されていますがもう一度おさらいしてみましょう。
☆図のように周期20msの間にDUTY0.8msから2.4msでサーボホーンの動作角度を設定します。
☆例えばH8−3048で動かす場合はPWMモード、GRAに周期、GRBをDUTYとし、GRBを0.8msから2.4msまで動かします。
☆しかし、ロボットを作る場合片足6自由度欲しくなると、両足で12自由度、上部も考えると20自由度ぐらい欲しくなってきます。
PICだったら出せるPWMは1〜2、H8-3048だと5本、SH2−7045でも12本しかPWMを出力出来ません・・・・どうしよう?
そこで去年の夏(2001)製作したのがPIC使用の21CHコントローラです
一番左側が16F873で上位から8BITデータをパラレルで受け取り7個の16F84に振り分けます。
各16F84は3個のサーボをコントロールするので計21CHとなります。
ROBO−ONEはこれで出場しようと思っていたのですが、結局これは使用しませんでした。
2、信号を時分割する。
サーボの制御信号をよく見ると周期20ms(20000us)のうち信号として使っているのは最高でも2.4ms(2400us)です
例えば信号が2.4msだった時は残りの17.6ms(17600us)はまるっきり遊んでいます。
ならば、信号を2.5ms(2500us)ずつ切り替えていけば(最高で2.4msなので)8種類のPWMを1本のタイマで実現できます。
3,どうやって信号を切り替えるのか?
しかし2.5msずつ違うDUTYのPWMを出力したところで切り替えてあげなければ意味がありません
これは、H8だけでは実現できそうもないので、外部回路としてAND回路を8個使用します。
タイマ1本に対し8個のサーボをコントロールできる計算なので、1本のタイマをPWM時分割出力用として使用し
割り込み用として他のタイマを1つ2.5msのインターバルタイマとして使用します。
汎用のポートを1つ(8ビット)使用しサーボセレクタとして2.5msの割り込みごとに順番にビットをシフトしANDをセレクトしていきます。
もちろんこの割り込み時に次のサーボ用のGRBも更新していきます。
重要なのはこの時の各タイマは全て同期モードで使用することです。
H8の場合タイマが5本ありますので、セレクタ用に1本使用するとPWM用として4本
計32個分のサーボをコントロールできる計算です(私の場合こんなたくさんサーボを買うお金がありません^^;)
☆H8の場合GRAのコンペアマッチでも割り込みができますので上記のようなタイマを1本セレクタ用に使用しなくとも
できそうなんですが、私の場合スキルが足りず実現できませんでした
いつか時間があった時にでもチャレンジしてみたいです^^;
☆とりあえず24個のサーボをコントロールする回路図
3、もっと簡単に!
まず考えられるのは、セレクタ信号を3BITにして3TO8デコーダ(74138など)をかますことです。
しかしこの場合不倫理ですのでANDは使えません、7402などのNORを使用し、PWMもGRAとGRBを逆転して実現します。
4、さらにもっと簡単に!
上記の回路の場合、4回路入りのANDなりNORのICを6個+デコーダIC1個の計7個のICを基盤にのせなければ
なりません。これでは以前作ったPICの基盤ぐらいの大きさになり配線も大変です
事実私は上記の回路を74ロジックで製作はしていません^^;
ROBO−ONE使用した24CHコントローラ、上の大きいのは赤外線用のPICでサーボとは無関係です。
そこで、CPLDの登場です、CPLDについては別ページで解説いたします。