TOP > ソフトウェア > 近藤科学製無線コントロールユニットの受信機をマイコンと繋げる。
 ■ 近藤科学製無線コントロールユニットの受信機をマイコンと繋げる。

 ROBO-ONEではお馴染みのRCサーボ、ロボットパーツを販売している近藤科学より、KHR-1を無線で操縦できるという無線コントロールユニットが発売されました。今回はこちらの無線コントロールユニットをマイコンに接続し、ロボットを操縦しようと思います。

 ▼ 無線コントロールユニットってどんなもの?

無線コントロールユニット  右側の写真が無線コントロールユニットです。大きい方が送信機、小さい方が受信機です。送信機にはD-SUB9ピンのコネクタが付属しているので、そのまま繋げればOKです。受信機の方は、RCB-1の低速シリアル専用のコネクタに接続するのが本来の使い方です。
 この受信機の部分をRCB-1ではなく、マイコンに接続します。今回使用するマイコンは、慣れた秋月のAKI-H8/3052Fを使用します。

 ▼ 受信機に入力する電源等の配置

皆さんは、付属のRCサーボ用のケーブルを使われると思います。このケーブルの色はそれぞれ「白、赤、黒」となっていると思います。RCサーボでは、白はPWM、赤をVcc(+)、黒をGND(-)として使っていました。受信機もこれと同じで、白をTXD(出力信号)、赤をVcc(+)、黒をGND(-)という構成になっています。
 挿し間違えることは無いと思いますが、「受信機のケースが大きいから分解して使う」場合は、挿し間違える可能性があるので十分気をつけてください。挿し間違えたからと言って壊れることはないと思いますが、油断は禁物です。


 ▼ 受信機の信号は?

 RS232Cは、+12Vを0、-12Vを1として通信を行います。ちょっと変わってますね。下図の信号は、パソコンに接続すれば通信する事が可能に見えます。
 しかし、受信機から出力されるのはTTLレベルの信号です。TTLレベルとは、0V〜0.8Vを「L(Low)」、2V〜5Vを「H(High)」と決められた決まりごとをそう呼びます。要するに5Vと0Vで、0と1を表現するわけですね。
 これでは、パソコンと通信なんてできないのでは?思いますよね・・・私もそう思い込んでいました。ところが、パソコンのシリアルポートはいい加減で、TTLレベルでも受け付けてくれます。レベル変換なんて無用なのです。

 さて、ここで信号についての説明をしておきます。信号は、スタートビットから始まり、データが8ビット、最後にストップビットが1つの計10ビットで構成されています。
 スタートビットは常に1を出力し、します。信号は常に0ですから、1に変わった時が信号の開始であり、ストップビットが0かどうかで、データが正しいのかエラーなのかを判定するのです。データは内容に応じて変化します。
 基本的にはこんな感じです。信号が少ない分、分かりやすいですね。
受信機からの信号


 ▼ パソコン同士で通信してみよう。

 もしも、これを読んでる貴方がパソコンを二台お持ちだったら、通信が可能です。その前に受信機側のD-SUBコネクタを作らないといけません。これがなきゃ、通信は不可能です。コネクタの配線は、コネクタに記載されている番号2と受信機のTXD、5番と受信機のGND、7番と8番をショート(繋ぐ)。D-SUBコネクタは。これだけでOKです。
 次に、5Vが必要なので、電源を用意してください。D-SUBコネクタに行く途中で分岐させ、電源用コネクタへVccとGNDを半田付け。このコネクタを作れば通信準備完了です。
 ハイパーターミナルの設定は、「通信速度:2400bps、データビット:8ビット、ストップビット:1、パリティ:無し、フロー制御:無し」と設定しましょう。これで文字を打てば、文字が別のパソコンに表示されます。

下記の商品は全て秋月電子通商にて購入可能です。 ⇒秋月電子通商
*2005年2月25日現在販売中の商品
商品名値段個数
Dサブ コネクタ用シェル 9P50円1個
Dサブ コネクタ 9P・メス(半田付けタイプ)50円1個
超小型スイッチングACアダプタ 5V 1A(AC100〜AC240V動作)600円1個
標準DCジャック(パネル取り付け型)30円1個


 ▼ マイコン側のシリアル通信

 パソコンの通信はできました。同じ要領で、H8のRXDに受信機の信号線を繋げば動くんじゃない?私もそう思いました。しかし、せっかくTTLなのだからレベル変換など行わず、直接マイコンに繋いでしまえば良いのです。幸い、AKI-H8/3052Fには
 ポート9の2番目(P9-2【RXD0】)と3番目(P9-3【RXD1】)がTTLレベルで通信を行えるポートです。ここに繋げば動くはずなのですが・・・この状態では正常に受信でききません。なぜなのか!?
 答えは、受信機が発する信号にあります。確かにパソコンでは、スタートビットが1の時から始まり、ストップビットが0で終わる、あの信号で問題ありませんでした。
 ところがマイコン側では、スタートビットは0で始まり、ストップビットが1の時に終了します。つまり、あの信号を入れると、ストップビットが1になることはありえないわけです。例え運良くストップビットが1になったとしても、データは当然、めちゃくちゃです。
 正しい通信を行うには下図のような信号にしなければなりません。つまりP9と受信機の間に信号を反転させる物があれば良い訳です。「反転」という文字を見て、思い浮かばれた方もいると思います。そうです、ロジックICの74HC04(もしくは74HC14)です。このICは、電圧を反転させることができます。具体的には、ICに入力されたのが0ならば1と出力、1が入力されれば0と出力という具合です。
 たかが一個の線に14ピンのICを使いたくはありませんが、残りはうまいこと使ってあげてください。私は手持ちに74HC14しかなかったので、このICで反転を行いました。さて、これらのICで反転させた信号でようやく通信可能となります。
 最後に注意しなければならないことが一つあります。それは2バイトのデータを転送後は17msecのリセットが必要だということ。つまり、ということになります。マイコン側でプログラムを組む時はこの辺りも気をつけましょう。
受信機からの信号を反転させた信号


 ▼ SCIの初期化についての注意

 通信速度が2400bpsと極端に遅いので、SCIの初期化について触れておきます。SCIを良く知らないとつまづきます。それは、SCI0.SMR.BYTE(SCI1.SMR.BYTE)の部分です。大半の方が0を代入していると思います。また、通信速度を入力する、SCI0.BRR(SCI1.BRR)は通信速度が変化するたびに変えているから問題ないとしましょう。
 今回は、これら二箇所に関する問題です。先にも述べたとおり、今回の例は2400bpsと極端に遅いで、普段は設定しないSMRの方に少々修正を加えます。  ハードウェアマニュアルの13シリアルコミュニケーションインターフェースの18ページ目、表13.3ビットレートに対するBRRの設定例(調歩同期式モード)に通信速度などの設定例が載っています。そのしてください。NはBRR(ビットレートレジスタ)に代入する値、nはSMR(シリアルモードレジスタ)のCKS0,CKS1に代入する値なのです。
 幸いにもこれらは最下位ビットにあるので、SCI0.SMR.BYTE(SCI1.SMR.BYTE)に1と代入すればOKです。SCI0.SMR.BYTE(SCI1.SMR.BYTE)には、3052ならば80を代入。3048ならば、207を代入してください。
 ちなみにこれは25MHzのAKI-H8/3052Fを使っている場合のみ必要な設定です。AKI-H8/3048Fは16MHzと若干遅いため設定する必要はありません。ハードウェアマニュアルのNに記述された数値をBRRに代入すれば問題ありません。

通信速度H8/3048F(16MHz)H8/3052F(25MHz)
nNnN
24000207180
9600051080
19200025040
38400012019

 ▼ おわりに

 以上で、今回は終わりです。KHR-1搭載のRCB-1に繋げばそれでお終いということもあり、インターネット上では全く情報がありませんでした。近藤科学さんのWEBページにて公開されているマニュアル、RCB-1コマンドリファレンスやを頼りに実験を繰り返しましたが、SCIやTTL、RS232Cなど分かっていない物もたくさんあり、作業は大分難航しました。
 なんとかここまでこられて良かったです。最後に、いろいろとサポートしてくださった吉村隊長、近藤科学のサービス部の皆様に、この場を借りてお礼申し上げます。どうもありがとうございました。


履歴 2005年2月25日 公開

[TOP] [ソフトウェア]
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送