はじめに
浅草ギ研より新型のRCサーボコントローラであるAGB65-RSC(RC Servo Controler)が発売されました。旧タイプのSC-01と違う点は
|
RSC |
SC-01 |
駆動サーボ数 |
12サーボ |
12サーボ |
1ライン最大 |
48サーボ |
192サーボ |
通信速度 |
9600,115200 |
9600,19200,57600,115200 |
主接続 |
マイコン
(オプションボードでPCと接続)
|
PC
(マイコン接続はインバータIC必要) |
近藤サーボ |
教示機能とキャラクタリスティックチェンジ機能に対応 |
なし |
といった感じです。一長一短がありますのでSC-01も今後は継続して販売しますが、ここではよりマイコン向けとなったRSCとH8マイコンとの接続を考えてみます。
※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできませんのでご了承下さい。このページと同じ内容についてのご質問についてはロボット掲示板にてお願いいたします。
PICマイコンとAGB65−RSC
<RCサーボコントローラ AGB65−RSC>
ロボット神経システムAGB65シリーズはPCやマイコンのシリアル通信機能を使えるスキルがあれば簡単に動かすことのできるモータコントローラ、センサー群です。1つのシリアルラインを複数のAGB65シリーズで共有でき、取り外しや追加も簡単に行えますのでマイコンをホストコンピュータとしたロボットの作成が容易にできます。
AGB65シリーズについてはこちらにも情報があります。
今回使用するAGB65−RSCは1つで12個のRCサーボの位置とスピードをコントロールするもので、シリアル通信でデータを送るとRSC側でサーボを動かすパルス生成などを行ってくれます。RSC上のDIPスイッチでIDを切り替えることにより、1つのシリアルポートに4つまでのRSCを接続でき、最大48個のRCサーボをコントロールすることができます。
RCサーボについてはこちらにも情報があります。
RCサーボコントローラ AGB65-RSCの詳細はこちらを参照願います。<−このページは必ず参照してください。
(以後、このページをRSCのページといいます)
マイコンとの接続の概略は次のようになります。1ラインに4つまでのRSCを配置できます。マイコンによっては複数のシリアル通信機能(非同期シリアル通信。UARTという名前が多い。)があるものもありますのでその場合はそれぞれに4つまでつなぐことができます。
<PICマイコンについて>
電子工作を行っている皆様にはもうおなじみのマイコンであるPICですが、書籍やインターネット上での情報が豊富で、開発環境がアセンブラならメーカーのホームページより無償で入手できるというものです。最近では高機能のタイプが出てきましたが、もともとは小さくて単機能なシステムを作るために作られた経緯があり、機能やパッケージのバージョンも豊富です。
ここでは、8ピンでありながらADCまで付いている 12F675 を使ってみます。開発環境はMPLABをメーカーのホームページよりダウンロードします。言語は多くの方が使っていると思われる CCSC を使います。CCSCはサードパーティ製のC言語コンパイラですが、PICのCコンパイラの中では安いと思います。またインストールするとMBLABに組み込まれてMPLABでコンパイル指示すると自動で動いてくれるので使いやすいと思います。
以降で使っているマイコンボードは以前作ったもので、12F675に電源ジャックをつけたものです。このボードの作成と、開発環境のセットアップについてはこちらのページを参照願います。
PICマイコンボードを使って見る のページ
<−前に作ったボード。ACジャックが付いてる
PICへのプログラムミングは、純正のライタ PICSTART Plus を使って書き込んだ後に、上のボードのICソケットに挿すというやり方でやってます。PICの場合にはいろいろな書き込み方があるので、ご自分に合った環境でよろしいかと。安い自作ライタなどのキットも売っているようです。
<RCサーボについて>
RCサーボは RCサーボの紹介 のページで詳しく説明しています。
接続
RSCはTTLレベル(0V/5V)でシリアル通信を行いますので、5V系のマイコンと直結できます。ということでPICマイコンとも直結できます。
※PICマイコンはチップによって電圧が違うものもあります。(3.3Vとかの場合は通信ラインの間に電圧変換回路が必要です。)
<通信ケーブル>
H8マイコンボード(以降、マスタ、とも言う)とRSCの接続にはRSCに付属の通信ケーブルを使います。これはRSC同士を接続するように両側にコネクタが付いています。RSCを増設するときは、RSC同士を接続しますのでこのまま使いますが、マスタとの接続はこのケーブルの加工が必要です。
今回は、マイコンボードからヘッダピンが出ているので、一方に2550コネクタを取り付けしました。皆様は、このマイコンボード+5V電源回路とまったく同じということは無いと思いますので、実際にはマイコンボードに合ったコネクタを自分で取り付けたり、直接マスタ側の基板にハンダ付けすることになると思います。
TXEラインはAGB65シリーズ同士をつなぐときにだけ使いますので接続しないでOKです。写真では黄色の線ですが、線の色は決まってませんので注意して下さい(フラットケーブルを切って作っているため。別な色もある。)。
実際に接続した写真が下記のようになります。ロボットに搭載されるので基本的にはバッテリ駆動を想定していますが、実験や開発中の場合には写真のようにACアダプタから電源を取ると電池切れの心配がありません。RSCの大きさはできるだけ小さく作りましたので34x34mmというかなり小さいサイズです。上面はほとんどコネクタだけです。
※写真ではICD2が写ってますが、これは別な実験で使ってるもので、今回は使ってません。右の方の見えないところにPICSTART-Plusがある。
<サーボ電源>
サーボを駆動するにはサーボ用のバッテリが必要です。一番多いトラブルが、RCサーボ用のバッテリを使わないためにサーボが正常に動かないというものです。コンビニなどで売っているアルカリ乾電池ではたとえ電圧が同じでも動きませんので注意してください。RSCは近藤科学の「ロボパワーセル」というニッカドバッテリと接続できるコネクタがついています。RSC側のコネクタは
日本圧着端子製B2P-VHコネクタ
ですので、他のバッテリと接続する場合はコネクタを作成する必要があります。(RSCにはコネクタ作成用のケーブルも添付されていますのでそれを切って、別のバッテリにつなぎます。バッテリをショートさせると非常に危険ですので十分注意して作業を行ってください。)
下の写真は、無線機用の30Aまで出力できる電源に、RSCや、他のRCサーボコントローラのサーボ電源用コネクタをつけたところです。電圧はつまみで調整できて5〜13Vぐらいまで調整できます。
(ALINCOのDM−330MVというもので、ツクモロボット王国で売ってます。)
私もプログラム中はこれをつかって動きを確認しながらプログラミングしてます。ニッカド電池は小さくてもサーボを動かすのに十分な電流(10A以上とか)が取り出せますが、数十A出力できるAC電源はけっこうでかくなります。
ロボットに実際に搭載する場合はバッテリで駆動しますが、プログラムを作っている最中は電池切れの心配がありますので、このようにサーボ用電源を家庭用AC100Vから電源を取ってもよいでしょう。実際に多くのロボットビルダーは家で開発するときにこのような外部電源を使っています。
この場合には当然、コネクタの改造が必要になります。AC電源が通電したまま線を切ったりするとショートして爆発したりしますので十分注意して作業してください。(私も何回かバッテリを破裂させた経験があります。AC電源はもっと危険です。)
<RSC用の電源>
RSCは内部5Vで動作しています。普通のサーボのバッテリは4.8〜6Vなので、そこから安定した5Vを作るのは難しいので、7.5V以上の電源が別に必要になります。RSC用の電源はサーボとは違い、電流をあまり流さないでも動作しますので、コンビニで買った電池でもOKです。また、RSCには9V乾電池用の電源ケーブルが添付されています。
電源は7.5V以上(25V以下)であればなんでも良いのですが、近藤科学製ロボット専用サーボにHVシリーズというのがあり、これは12Vぐらいで駆動するというロボット向きのサーボで、これを使用している場合は、サーボ用電源をRSC上のジャンパ設定によりバイパスすることができ、サーボ用バッテリ一個でサーボとRSCの両方を駆動できます。
私は実験中は、9V電池の代わりに1Aぐらいの出力のACアダプタを使ってます。ACジャックは秋葉の電子部品店などでも売ってます(私は千石電商で買いました。)。ACジャックと、RSCに添付されている9V乾電池用のケーブルを切ってハンダ付けしたのが下の右の写真です。
その他細かい接続や注意点はRSCのページを参照願います。
プログラミング〜簡単にサーボを動かしてみる
CCSCによるC言語でのPICのプログラミングは書籍「C言語によるPICプログラミング入門:後閑哲也氏著:技術評論社」に詳しくかいてあります。後閑氏の本とホームページはPIC使いの方には必見です。
まずは簡単に、RSCのIDと、サーボ番号と、スピードを指定してサーボを動かす、というプログラムを考えてみます。
RSCのページを見ると、サーボ1つを動かす場合のフォーマットは
[255] [ID] [長(4)] [命令(2)] [サーボ番号] [サーボ位置] [Speed]
です。
今回使用しているCCSCコンパイラには、普通の汎用IOポートを使ってシリアル通信ができる関数がついていますので簡単にデータを送信するプログラムが作れます。
では、簡単に、シリアル通信で上のフォーマットのデータを送るプログラムを作ってみましょう。
テキストデータはこちら PIC_RSC_1.c (右クリックで対象を保存)
■行1〜4
PICのヒューズ設定(ハード的な設定)と、シリアル通信のピン設定です。GP3は入力としてしか使えませんのでこれを受信にあてています。
■行8
RSCに送るデータのフォーマットを配列変数に入れてます。サーボ番号、位置、スピードは可変ですが、一応値を入れてます。IDが3なのですが、RSCは出荷時設定がID=3になってます。尚、以降のコメントですが、日本語で入れたら、コメント部以外も文字が緑色になってしまったので、英語で書いてます。(見づらい)
■行10
for文用のカウンタ変数
■行13〜20
サーボ番号とサーボ位置を引数に、指定したサーボを動かすためのデータを送信する関数。CCSCの場合は putc( ) 関数で簡単に1バイトデータを送ることができます。
■行25
GPIOの入出力方向を設定してます。GP3は入力に設定しようとしても出力しかできませんので、0を書き込んでも問題ないので全部0にしてます。0x08でも同じ。
■行26
立ち上げ後、RSCが起動し終えるまで待ってます。ここ重要です。RSCが立ち上がる前に通信を開始すると、どこが通信はじめかわからなくなるので通信できなくなります(非同期通信なので)。
■行28〜33
1秒おきに、0番サーボを127と200の位置に回転させてます。回転スピードは行8で設定したように20になってますが、ココを変えるとスピードも変わります。
このような感じで、簡単にRCサーボをPICマイコンから動かすことができます。データ送信後はRSC側で自動的に目的位置まで指定したスピードで回転しますので、PIC側ではデータを送信後すぐに別な作業を行うことができます。
RSCは、12個のサーボを一括で動かす命令もありますので、お試し下さい。
プログラミング〜教示機能に挑戦
近藤科学のロボット専用サーボには「教示機能」と言って、サーボの位置をフィードバックする機能もあります。
サーボを動かすときには、サーボの信号線にパルスを加えますが、この教示機能はモードに入るとサーボの方からパルスを出します。
RSCではこの「モードに入る」−>「位置の値を取得」を自動で行い、結果を数値で返す機能がついています。以下ではその機能を使ってみます。
教示機能では、読み取り時はサーボが脱力になりますので、この命令を出すと 「脱力」−>「読み取り」という動きになります。よって読み取った後になにも命令を出さないと、そのサーボは脱力したままです。
RSCのページを見ると、指定したサーボのパルスを読み取る命令フォーマットは次のようになっています。
※全サーボ一括読み取りもできますが、ここではとりあえず一個だけ読みます。
<命令フォーマット>
[255] [ID] [長(2)] [命令(22)] [サーボ番号]
<結果のフォーマット>
[255] [ID] [長(3)] [命令(22)] [サーボ番号] [サーボ位置]
今度は命令を送って、データを受信するので双方向の通信になります。命令を送信したあと、6バイト受信するというのが基本の動きになります。
とりあえず作ったプログラムが下のようになります。
テキストデータはこちら PIC_RSC2.c (右クリックで対象を保存)
プログラムは基本的には先のプログラムと同じです。
■行21〜28と33〜39
引数によって指定されたサーボに対しての命令を送る関数です。はじめに作ったのとほぼ同じです。
■行49
0番サーボに対してポジションキャプチャ命令を発行します。
■行50〜52
forループで6バイト受信します。getc( )関数は1バイト取得する関数ですが、どこかで通信がコケるとずっと受信終了を待ってしまい、ハングアップ可能性があります。このような場合を回避するには
kbhit( )関数(CCSCの関数)を使って受信状態をモニタすれば回避(タイムアウトとか)できます。このあたり、 は書籍「C言語によるPICプログラミング入門:後閑哲也氏著:技術評論社」に詳しくかいてあります。CCSCでないコンパイラを使っている場合は、PICのデータシートを読んで、特殊レジスタのフラグを駆使して解決することになると思います。
ということで、動かしてみた映像が下のようになります。
aviファイル2.7MB
このようにして非力な8ピンのPICでも、簡単にポジションキャプチャを行うことができます。前に抵抗型センサーの情報をPICに取り込む方法をやりましたが、ポテンショメータ(もしくはボリューム)や、曲げセンサー、スライド抵抗などを使って、安価なPICでマスタースレイブシステムを構築することもできるでしょう(RSCが安価でない、という話もありますが。)
おわりに
このような感じで簡単にPICマイコンからサーボを動かしたり、位置を読み取ったりすることができます。
ここまででとりあえず1個のサーボを動かすことができるようになったかと思います。複数の場合でも上記のプログラムを若干変更するだけで作れますので、是非トライしてみてください。
また、浅草ギ研では、同じようにコントロールできるセンサやコントローラを順次リリースする予定があります。サーボコントロールだけでなく、センサーを使った高度なロボットも同様にして作れますのでこちらも是非お試しください。
2006年4月17日
|
|
|