Knowledge
   

Tiny Servo Controller 16


2004/04/04

WideStudio+H8/3664で、サーボ16個、スライドバーでぐりぐりサンプル

20040404P00.JPG - 17,484BYTES昨日はほとんど爆睡で終わってしまったので、今日は気合をいれて行きます〜。

WideStudio、だいぶ理解できてきましたので、ちょっとそのあたりのご披露と、日頃お世話になっている御礼も兼ねて、今日は、スライダーでサーボを動かす超シンプルなサンプルプログラムをどど〜んとアップします。このサンプルプログラムで、H8/3664とWideStudio理解のお力になれればと思います。結構適当に作っている部分もありますので、取り扱い注意でお願いいたします。左の写真は、SIPHA-COREからTSC16に無理やり入れ替えさせられて、嫌々動作するG-Tune2004Fです。

このサンプルプログラム、H8/3664でサーボを制御し、それをパソコン側からスライダーで動作させるだけのプログラムです。あれこれつけ加えず、極力シンプルに仕上げてあります。サーボの制御値は、タイマの値が直接ですし、サーボ角度補正機能もありません。また、サーボ制御信号ON/OFFの機能もありません。いろいろ考えたのですが、そういった機能も全部落として、超シンプルにしておいた方が、基本が理解しやすいのでは?と、自分の経験から思いまして、あえてそうしています。

その辺りの機能は、このプログラムをベースにしたり、アイデア元ネタにして、それぞれでやっていただけたらな〜と思います。ちなみに製作時間は、H8/3664側の改造も合わせて、だいだい12時間ぐらいです。WideStudio、なかなかいいです。

そんなわけで、
  ☆パソコンでどうやってシリアル通信をするか?
  ☆動作中のマイコンと、どんな感じで通信したらいいか?
  ☆スライダーの動きとどう同期させるか?
というあたりに関して、理解が簡単になるように、極力「短くてシンプルなプログラム」で書いています。参考になるのでは?と思います。でも…あくまでも、1つのやり方であって、他にももっといろいろなやり方があります。参考程度に考えておいてくださいね。

また、H8/3664側のプログラムですが、なかぷさん(二足歩行ロボット E-Vis)の「制御の事始め」にて紹介してくださっているプログラムをベースに、シリアル通信などを付け加えたものです。H8/3664側のプログラム詳細については、なかぷさんのホームページの方を参考にしてくださいね。

動作環境及び使い方
TSC16.lzh」ファイルをダウンロードして展開すると、「TSC16TERM」と「TSC16CORE」というディレクトリができます。パソコン側には「TSC16TERM」を、H8/3664の方には「TSC16CORE」を使用します。

■TSC16TERM
20040404P01.JPG - 14,232BYTESWideStudio V3.70-3で開発しています。動作はWindows2000にて確認しています。

TRC16Term.prjをWideStudioで開き、「ビルドオール」してください。これで実行ファイルが作成されます。

実行すると、画面が1枚だけ表示されます。左上の「通信ポート」で、お手元の環境に合わせたポート名を入力し、「通信切断」と書かれたオプションをクリックして「通信接続」を選んでください(今、書いていて思ったんですが、通信接続するために「通信切断」を選ぶなんて、終了するために「スタートメニュー」を選ぶ、不思議なあのオペレーティングシステムみたい…)。うまくいけば、オプションが緑色に変わります。

後は、画面上のサーボスライダを触って動作させてみてください。

接続できない場合は…いろいろ理由は考えられますが、まず、通信ポートを開き、「CR」のみ送信して、CORE側からの「CR」を待ちます。「CR」受信が完了した時点で、通信接続完了としています。そんなわけで、COMポート名が間違っているとか、他のアプリケーションが同じCOMポートを使用している可能性が高いです。

■TSC16CORE
使用しているソフトウェアは、H8/3664側はGDL VERSION 1.5.0.18です。H8/3664はGDLで「H8/3664F(H8Tiny)内臓フラッシュROM」を選択し、「最適化レベル」は「最適化なし」にしておいてください。後は普通に書き込んでください。起動すると、いきなり、1500μSecのサーボパルスを出力しますのでご注意ください。

仕様
■TINY SERVO CONTROLLER 16 CORE/TERM
それっぽい名前を付けていますが、16個のサーボをH8/3664から制御し、それをパソコンから「スライダー」で制御するサンプルプログラムです。

■サーボ接続先
H8/3664からのサーボ接続ピンですが、P14〜P17、P50〜P53、P80〜P83、P84〜P87を使用しています。詳しくは、なかぷさんのホームページ、E-Visの「制御事始め」を見てくださいね。あちらで解説されているプログラムを基本として、シリアル通信プログラム及び制御プログラムを追加してあります。

■通信プロトコル
シリアル通信にて、以下のようなフォーマットでデータの授受を行っています。すべてテキストデータを使っています。実は無駄です。でも、デバッグとかで動作確認する時、TeraTerm等の一般端末ソフトを使ってもできるという利点があり、バイナリデータではなくテキストデータを使用しています。

  • 必ずTERM側からの問いかけに対してCOREが応答します。
  • TERM側より1バイト送信、データが有効だった場合、同じデータを返信します。
  • 通信データに問題があった場合、COREは返事をしません。TERM側では、50msec以内にデータを受信しなかった場合、異常とみなします。
  • やりとりするデータは、6バイトで構成されています。
      1バイト目 a〜p サーボ0〜サーボ16
      2バイト目 0〜9 サーボ位置(千の位)
      3バイト目 0〜9 サーボ位置(百の位)
      4バイト目 0〜9 サーボ位置(十の位)
      5バイト目 0〜9 サーボ位置(一の位)
      6バイト目 0x0D
  • 通信確認等のための特例として、0x0Dのみを受信した場合でも、0x0Dを返信します。

技術的ポイント
■スライダーなどの部品生成について
このサンプルでは、プログラムによる動的生成を採用しました。理由は、2つありまして、1つづつ作っていく方法は、アプリケーションビルダからやるだけなので、あえてサンプルにする必要はないだろうという判断です。もう1つは、この先、このプログラムを改造していって、ロボット側から情報を受けてスライドバーを更新するような動作をさせたい場合に、ペタペタと作っていく方法では、うまい手が見つからなかったからです。たぶん、WideStudioのオブジェクト管理体系ならば、いい方法がありそうなのですが、今のところ見つけていません。

■タイマにてデータ送信
実は、「スライダーを動かしたらデータ送信」ではなく、タイマで定期的にスライダーの変化をチェックして、変化があったときに送信するようにしています。各スライダーは、スライドさせることによって1000〜4800の変化をします。ちょっと変化する毎にデータを送っていると、データ量が多くなって反応が鈍くなってしまいます。そのため、これの制限も含めて、タイマで定期的にチェックして送信という形をとっています。

■サンプルについているロボットの画像
同じファイル名にすることで、異なる画像に入れ替えることが可能です。サイズは640x640です。スミの2ドットは表示されませんのでご注意ください。デザインについては特に意味はありません。今回はパワーポイントで書いたものを、BMPにしています。差し替え可能です。WideStudioは、JPGも表示できますから、写真と入れ替えていただいても構いません。このロボット、股間を開くサーボを1つにしてリンクで開くような構成にすると、16サーボで腰の回転もつけれそうですね。意外にまともなデザインかもしれません。でも、次期G-Tuneとか、そういう意図はまったくありません。極めて、平凡な構成です。

■シリアル通信について
SIserialComm.h/cppというソースファイルにクラスで記述してあります。もし、他のアプリに使われるのでしたら、このソースファイルをコピって、WideStudioの「プロジェクト」−「プロジェクト設定」にて、「コンパイル」タブを開き、「追加オブジェクト」に「SIserialComm.o」と追記するだけで使えるようになります。

 

後は…皆さんご自身で料理してみてくださいね!ではでは〜。

 


SISO-LAB Knowledge