はじめに
浅草ギ研より新型の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マイコンとの接続を考えてみます。
※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできませんのでご了承下さい。このページと同じ内容についてのご質問についてはロボット掲示板にてお願いいたします。
H8マイコンと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つまでつなぐことができます。
<H8マイコンについて>
日本では、書籍や解説ページが沢山あるH8マイコンボードがホビー用によくつかわれており、電子部品店などでH8マイコンを搭載したCPUボードが売られています。国産のマイコンなのでデータシートが日本語というのも魅力です。
マイコンの開発で一番はじめにカベとなるのが開発環境ではないかと思います。H8のマイコンボードは多数販売されていますが、開発環境を自分で構築する必要が多いです。ここでは、開発環境が比較的ビギナー向けであるベストテクノロジー社のBTC064を使ってみます。CPUはH8/3694Fで、以前トランジスタ技術の付録についていたものと同じですので3694Fを持っている方も多いかと思います。
以降で使っているマイコンボードはこのBTC064に5V電源をつけたものです。5V電源の作り方とベストテクノロジー社の開発環境「GDL」のインストールについてはこちらを参照ねがいます。
H8マイコンボードを使って見る のページ
H8/3694Fマイコンボードのピン配列 + 自作基板の電源出力 の図
<RCサーボについて>
RCサーボは RCサーボの紹介 のページで詳しく説明しています。
接続
RSCはTTLレベル(0V/5V)でシリアル通信を行いますので、5V系のマイコンと直結できます。ということでH8マイコンとも直結できます。
※H8マイコンはチップによって電圧が違うものもあります。(3.3Vとかの場合は通信ラインの間に電圧変換回路が必要です。)
<通信ケーブル>
H8マイコンボード(以降、マスタ、とも言う)とRSCの接続にはRSCに付属の通信ケーブルを使います。これはRSC同士を接続するように両側にコネクタが付いています。RSCを増設するときは、RSC同士を接続しますのでこのまま使いますが、マスタとの接続はこのケーブルの加工が必要です。
今回は、マイコンボードからヘッダピンが出ているので、一方に2550コネクタを取り付けしました。皆様は、このマイコンボード+5V電源回路とまったく同じということは無いと思いますので、実際にはマイコンボードに合ったコネクタを自分で取り付けたり、直接マスタ側の基板にハンダ付けすることになると思います。
TXEラインはRSC同士をつなぐときにだけ使いますので接続しないでOKです。写真では黄色の線ですが、線の色は決まってませんので注意して下さい(フラットケーブルを切って作っているため。別な色もある。)。
実際に接続した写真が下記のようになります。ロボットに搭載されるので基本的にはバッテリ駆動を想定していますが、実験や開発中の場合には写真のようにACアダプタから電源を取ると電池切れの心配がありません。RSCの大きさはできるだけ小さく作りましたので34x34mmというかなり小さいサイズです。上面はほとんどコネクタだけです。
<サーボ電源>
サーボを駆動するにはサーボ用のバッテリが必要です。一番多いトラブルが、RCサーボ用のバッテリを使わないためにサーボが正常に動かないというものです。コンビニなどで売っているアルカリ乾電池ではたとえ電圧が同じでも動きませんので注意してください。RSCは近藤科学の「ロボパワーセル」というニッカドバッテリと接続できるコネクタがついています。RSC側のコネクタは
日本圧着端子製B2P-VHコネクタ
ですので、他のバッテリと接続する場合はコネクタを作成する必要があります。(RSCにはコネクタ作成用のケーブルも添付されていますのでそれを切って、別のバッテリにつなぎます。バッテリをショートさせると非常に危険ですので十分注意して作業を行ってください。)
<RSC用の電源>
RSCは内部5Vで動作しています。普通のサーボのバッテリは4.8〜6Vなので、そこから安定した5Vを作るのは難しいので、7.5V以上の電源が別に必要になります。RSC用の電源はサーボとは違い、電流をあまり流さないでも動作しますので、コンビニで買った電池でもOKです。また、RSCには9V乾電池用の電源ケーブルが添付されています。
電源は7.5V以上(25V以下)であればなんでも良いのですが、近藤科学製ロボット専用サーボにHVシリーズというのがあり、これは12Vぐらいで駆動するというロボット向きのサーボで、これを使用している場合は、サーボ用電源をRSC上のジャンパ設定によりバイパスすることができ、サーボ用バッテリ一個でサーボとRSCの両方を駆動できます。
<プログラミング中に外部電源を使う>
ロボットに実際に搭載する場合はバッテリで駆動しますが、プログラムを作っている最中は電池切れの心配がありますので、サーボ用電源を家庭用AC100Vから電源を取ってもよいでしょう。実際に多くのロボットビルダーは家で開発するときにこのような外部電源を使っています。
この場合には当然、コネクタの改造が必要になります。AC電源が通電したまま線を切ったりするとショートして爆発したりしますので十分注意して作業してください。(私も何回かバッテリを破裂させた経験があります。AC電源はもっと危険です。)
下の写真は、無線機用の30Aまで出力できる電源に、RSCや、他のRCサーボコントローラのサーボ電源用コネクタをつけたところです。電圧はつまみで調整できて5〜13Vぐらいまで調整できます。
(ALINCOのDM−330MVというもので、ツクモロボット王国で売ってます。)
私もプログラム中はこれをつかって動きを確認しながらプログラミングしてます。ニッカド電池は小さくてもサーボを動かすのに十分な電流(10A以上とか)が取り出せますが、数十A出力できるAC電源はけっこうでかくなります。
9V電池の代わりは、1Aぐらいの出力のACアダプタを使ってます。ACジャックは秋葉の電子部品店などでも売ってます(私は千石電商で買いました。)。ACジャックと、RSCに添付されている9V乾電池用のケーブルを切ってハンダ付けしたのが下の右の写真です。
その他細かい接続や注意点はRSCのページを参照願います。
プログラミング〜簡単にサーボを動かしてみる
まずは簡単に、RSCのIDと、サーボ番号と、スピードを指定してサーボを動かす、というプログラムを考えてみます。
RSCのページを見ると、サーボ1つを動かす場合のフォーマットは
[255] [ID] [長(4)] [命令(2)] [サーボ番号] [サーボ位置] [Speed]
です。
H8からシリアル通信でデータを送るには、通常はH8のデータシート(メーカーのホームぺージより、使っている型名のH8の「ハードウェアマニュアル」をダウンロードしてくる)をよく読んで、シリアル通信機能の使い方をハード/ソフト両面でよく理解しないとプログラムは組めませんが、今回使用するベストテクノロジーの開発環境「GDL」ではシリアル通信関数がありますのでこれを利用すれば、ハードをあまり理解していなくてもシリアル通信を行うことができます。
では、簡単に、シリアル通信で上のフォーマットのデータを送るプログラムを作ってみましょう。
テキストデータはこちら H8_RSC_1.c (右クリックで対象を保存)
シリアル通信機能の関数の使い方については、ベストテクノロジーのサンプルプログラムを参照すると使い方がわかるかと思います。
SCI3_OUT_DATA( )関数で、1バイトのデータを送信しますので、forループで必要なバイト数を送信しています。他の環境の場合はこのような関数が無いかもしれませんので、シリアル通信関係の特殊レジスタを設定して、フラグを見ながらH8の送信レジスタにデータを書きこむ、という処理になるでしょう。
ウェイトは今回、for文でてきとうなウェイトを作り、サーボが回転し終えるまで待っています。タイマを使って、正確なウェイトを作る関数は、以前やった SC−01とH8を接続する のページにありますので参照してください。
ポイントですが、26,27行目に、起動時にウェイトをかけています。これは、RSCが起動し終えるのをまっているところです。RSCが起動する前にデータを送り始めると、どこがデータのはじめかわからなくなるので通信ができなくなります(非同期通信なので)。よって、このように起動時にウェイトをかける必要があります。RSCは起動時にLEDが3回光りますが、この前はまだ受信準備が終わっていません。
実際にロボットに組み込む時には、例えば電源が別でサーボ系(RSCを含む)とマイコン系の電源を別々に入り切りできるような場合には、電源を入れる順番などに注意して下さい。
データをH8に書き込むところや、実行するところは、 H8マイコンボードを使って見る のページでやっていますのでそちらを参照願います。
KHR-1(※頭部は純正部品ではありません。)
が近くにありましたので、RSCの0番に左手の1つのサーボをつないで実行したところが下の写真です。
[255,3,4,2,0,127,20]
[255,3,4,2,0,200,20]
RSCは、12個のサーボを一括で動かす命令もありますので、お試し下さい。
このような感じで、簡単にRCサーボをH8マイコンから動かすことができます。データ送信後はRSC側で自動的に目的位置まで指定したスピードで回転しますので、H8側ではデータを送信後すぐに別な作業を行うことができます。
プログラミング〜教示機能に挑戦
KHRに使われているサーボもそうですが、近藤科学のロボット専用サーボには「教示機能」と言って、サーボの位置をフィードバックする機能もあります。
サーボを動かすときには、サーボの信号線にパルスを加えますが、この教示機能はモードに入るとサーボの方からパルスを出します。
RSCではこの「モードに入る」−>「位置の値を取得」を自動で行い、結果を数値で返す機能がついています。以下ではその機能を使ってみます。
教示機能では、読み取り時はサーボが脱力になりますので、この命令を出すと 「脱力」−>「読み取り」という動きになります。よって読み取った後になにも命令を出さないと、そのサーボは脱力したままです。
RSCのページを見ると、指定したサーボのパルスを読み取る命令フォーマットは次のようになっています。
※全サーボ一括読み取りもできますが、ここではとりあえず一個だけ読みます。
<命令フォーマット>
[255] [ID] [長(2)] [命令(22)] [サーボ番号]
<結果のフォーマット>
[255] [ID] [長(3)] [命令(22)] [サーボ番号] [サーボ位置]
今度は命令を送って、データを受信するので双方向の通信になります。命令を送信したあと、6バイト受信するというのが基本の動きになります。
とりあえず作ったプログラムが下のようになります。
テキストデータはこちら AGB65_RSC.c (右クリックで対象を保存)
今度は、プログラムが長くなるので、各命令を関数化してます。
■行6〜13
シリアル通信で送受信する命令の配列を宣言しています。mov_data[]のスピード設定値が 5 になってますが、ここはいろいろ試してみた結果の値です。数値を変えると、少ない=反応が早いが動きかカクカクする 多い=反応が遅いが動きがスムーズ となります。これは、RSC側でスピードを0以外にしたときには指定した時間の間をスムーズに回転させるようなパルスを生成するためです。
■行15〜26
引数で受け取ったサーボ番号あてにポジションキャプチャ命令を発行(H8からRSCへ送信)します。
■行28〜40
サーボ番号と位置を指定するとRSCへ命令を送信する関数です。
■行56,57
すいません、ここ不要です。このプログラムに落ち着く前に、割り込みとかいろいろ試してたもので...
■行64〜75
ここで#0ポジションキャプチャ−>#1駆動 を行ってます。
行70〜72で、rcv_data[]に帰ってきた結果を格納していますが、最後に格納されるrcv_data[5]に0番の位置が格納されますので、その位置をそのまま行73で#1サーボに送ってます。
ということで、動かしてみた映像が下のようになります。
aviファイル3.6MB
このようにしてH8側にあまり負担をかけずに、ポジションキャプチャを行うことができます。
おわりに
このような感じで簡単にH8からサーボを動かしたり、位置を読み取ったりすることができます。
ここまででとりあえず1個のサーボを動かすことができるようになったかと思います。複数の場合でも上記のプログラムを若干変更するだけで作れますので、是非トライしてみてください。
また、浅草ギ研では、同じようにコントロールできるセンサやコントローラを順次リリースする予定があります。サーボコントロールだけでなく、センサーを使った高度なロボットも同様にして作れますのでこちらも是非お試しください。
2006年4月15日
|
|
|