超小型DCモータコントローラ
PCとRCサーボコントローラではRCサーボを使ってロボットの関節のようなものを作りましたが、このように多脚型ロボットではなく、車輪で走行するロボットというものもあります。回転するモータとして簡単に入手できるものにDCモータがあります。
DCモータをロボットにつけた場合は、その回転方向と速度を調整したいものです。回転方向を制御するには一般的に「Hブリッジ回路」というものを使います。詳しくはインターネットなどで調べてください。また、速度を調整するには「PWM制御」というものを使います。これはマイコンなどによくある機能で、モータに供給する電圧をON/OFFすることにより、モータの出力を調整するというものです。
これらを自作しても良いのですが、浅草ギ研ではシリアル通信で制御できるDCモータコントローラを販売していますので、これを使ってPCから今まで行ってきたのと同じ方法でDCモータを制御することができます。
浅草ギ研で(現在)販売しているDCモータコントローラは
■超小型DCモータコントローラ:小さい、2ch、出力1Aまで
■モータマインドB:放熱板付き、1ch、エンコーダと接続して一定スピードでの回転が可能、出力3.5Aまで(瞬間)
の2種類があります。ここでは超小型DCモータコントローラを使ってモータ2個のものを動かしてみます。
尚、超小型DCモータコントローラの概要についてはこちらを参照願います。
コントローラのピン配列
商品説明のページにもありますがここでも一応のせておきます。
<ピン配列>

|
ピン番号
|
説明 |
1
|
モータ用電源(1.8〜9V)
|
2
|
グランド(0V) |
3
|
コントローラ用電源(3〜5.5V) |
4
|
シリアル入力 |
5
|
リセット |
6
|
モータ1 + |
7
|
モータ1 − |
8
|
モータ0 − |
9
|
モータ0 + |
|
PCとの接続
超小型DCモータコントローラはTTLレベル(TTL以下でも動きますが)で動き、シリアル入力もTTLレベルで受け付けますのでPCのRS232C電圧レベルでは命令を出すことはできません。しかし、今まで行ってきたようにRS232Cドライバ/レシーバICを経由すると通信することが可能になるので今回もこれを使います。以下はPCとの接続部ですが基本的には送信と受信の方向が違うだけで赤外線センサーを使ったときと同じです。
<回路図>
この回路は実際には赤外線センサーとの接続の時に作った回路を使ってます。
5V電源回路は省略してますがこちらに回路図があります。今回も低ドロップ型の5Vレギュレータを使用してますが7805系でも同じです。GNDは全て接続します。
今回、何を動かそうか考えましたが、イマイチ良いものが思い浮かばなかった(一から作る気力も無かった)ので、近くのおもちゃやに行ってTAMIYAの楽しい工作シリーズの中でモータを2つ使っているものを買ってきました。

いまひとつグッとくるものが無いですが、とりあえず実験ということで。本当はゾウかトリケラトプスが良かったんですがモータが1つでした。
このネズミくんはかべづたいに動くというものですが、この実験ではモータとタイヤしか使いません。上の回路図のように配線します。
注意点ですが、このコントローラのモータへ加える電圧は1.8V〜となっています。このネズミは単二乾電池1本で動かすようになっているので乾電池1本、つまり1.5Vではコントローラが動かせません。ためしに実験してみましたが動きませんでした。よって、上の写真のように単三乾電池2本直列の電池ボックスを使って3Vにしてます。
このコントローラは自動で通信速度を検出するタイプです。通信がコケるとその後の通信ができなくなる場合がありますので、本来はリセットをON/OFFできるようにした方が良いのですが、PCからではどうしようも無いので今回はリセット端子は抵抗を経由してプルアップ(+5Vにつないでいる)してリセット無しにしてます。抵抗値は取り扱い説明では4.7KΩとなってますが、手元に10KΩしか無かったので10Kをつないでますが動いてます。

モータへの接続ですが、モータに書いてある通りに+と−を接続するとこのマウスの進行方向が逆になりました。しかし、別に問題ないのでそのままにしてます。本当は写真左(先がとがっている方)が前なのですが、モータを両方正転にすると右の方向へ走っていきました。
プログラム
シリアル通信でデータをPCから送信する方法はRCサーボの駆動のところでやりましたが、今回も同じ方法で動きます。コントローラが違うので送信するデータを変えるだけです。
超小型DCモータコントローラのコマンドは次のように4バイトのデータで送ります。
[シンクロバイト(0x80)] [デバイス番号(0x00)] [モータ番号と方向] [スピード]
シンクロバイトとデバイス番号は固定です。つまり、命令を送る前にこの2バイトを送る必用があります。
3バイト目ですが、取り説に設定方法がありますが簡単に書くと次の通りになります。
|
番号と方向
|
値
|
0番:正転
|
0x05
|
0番:逆転
|
0x04
|
1番:正転
|
0x07
|
1番:逆転
|
0x06
|
|
スピードは0(停止)〜127(最高速)までの値で指定します。DCモータは電池をつなぐといきなり高速回転するイメージがありますが、これで低速指定するとこのマウスの場合は結構遅い動きをさせることもできました。
PCからマウスをシーケンスに動かすプログラム(といってもデータを送っているだけですが。)を下記のように書いてみました。
※テキストデータはこちら
とくに難しいところは無いと思いますが、通信DLLを参照設定するのを忘れないようにしてください。(DLLの参照設定は「Windowsアプリを作ってみる」のページを参照願います。)
COMポートオープンまでは他とまったく同じです。データ送信する部分はMoveMotor()というメソッドに出しました。 //ダミーデータ送信 のところですが、やってみてわかったのですが、コントローラの電源を入れて一発目の通信は受け付けない場合が多かったので、実際にモータを動かす前にダミーデータを送っています。一発目に上手くいかないのはおそらくモータコントローラ側で通信速度を検知しているためだと思われます。
モータを停止するコマンドを送っても、ピタッとはとまらず、スピードが速い場合は惰性でモータが少し回ってしまいますので加減速制御が必要と思われます。もしくはちょっとだけ逆回転のデータを送るとか。
上のプログラムで動かしてみた映像が下になります。写真をクリックすると映像が見れます。
m2pファイル3.3MB
このコントローラは通常はTTLレベルでの駆動を予定しているので、当然、マイコンなどで作ったロボットで簡単にDCモータを動かすことも可能です。各マイコンからの駆動については別なページで説明します。
ハイパワーの駆動
このモータコントローラは小さいし2つまでのモータを動かせるので非常に使えるのですが、弱点は1モータにつき1Aまでしか出力できないというところで、ハイパワーのモータの駆動はできません。
東京マルイの電動ガンの駆動(またか、と言われそうな...)を試みましたが、このコントローラでは無理でした。
このコントローラは2つのモータを動かせるので、コントローラの0番と1番の出力を合わせれば2倍(最大2A)の出力までいけますので、ダブルでやってみましたが電動ガンはダメでした。
本当はコレがやりたかった。
2005年6月12日 |
|
|