■ホビーロボット部品の製造・販売 
  モータコントローラ、センサ、音声、画像、無線モジュールなど、
■ホビーロボット制作記事のページ (各種マイコン、PCとの接続事例)
■特殊メイク、特殊材料の販売 ※特殊メイクのコーナーはこちらに移りました。
Top(お知らせ) 製品紹介 使い方とサンプルプログラム 通信販売 リンク ロボット掲示板 会社案内
 Easy Robotics for all enthusiastic people!!!  ---HOBBY ROBOT PARTS SHOP ASAKUSAGIKEN---   Since 2003...

PCからAGB65-SACを使って
マブチモータ
電磁石サーボAA−PT01
ステッピングモータ
バイオメタル
を動かしてみる

はじめに

 
浅草ギ研では、マイクロソフトのWindowsアプリ開発環境を使って浅草ギ研製品を動かす方法をいろいろと紹介していますが、ここでは「AGB65−SAC(Small Actuator Controller)」を使ってモータなどのアクチュエータをいろいろと駆動してみます。Windowsの開発環境は.Net Fream Works 2005からは特定の言語だけなら無償で入手できるようになりました。また、PC−ロボット間の通信でよく使われるシリアルポートを駆動する、SerialPortコンポーネントも標準装備になっており、比較的簡単にAGB65シリーズを動かすことができます。

 ここでは VisualC#2005(以下VC#)を使って、サンプルプログラムを作ってみますが、
C#以外の言語でも基本的な考え方は同じですのでこのページを参考にしてください。

 VC#2005のインストールについてはこちらを参照願います。

 VC#2005でシリアル通信をする方法、シリアル通信、RS232Cについてはこちらを参照願います。


 ※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできませんのでご了承下さい。このページと同じ内容についてのご質問についてはロボット掲示板にてお願いいたします。

 ※ここではビギナー向けに解説していますが、このページは、プログラミング技術の向上を狙っておりません。VC#に関する質問はご遠慮下さい。(他所で良いページがたくさんありますのでインターネットで調べてください。もしくは本を買って勉強してください。プログラム本は高いですが、図書館に申請すると無料で読めます。ついでにギ研の本も申請してもらえたら幸いです。)


AGB65シリーズとAGB65−SAC

 ロボット神経システムAGB65シリーズはPCやマイコンのシリアル通信機能を使えるスキルがあれば簡単に動かすことのできるモータコントローラ、センサー群です。1つのシリアルラインを複数のAGB65シリーズで共有でき、取り外しや追加も簡単に行えますのでPCをホストコンピュータとしたロボットの作成が容易にできます。

 AGB65シリーズについてはこちらにも情報があります。

 今回使用するAGB65−SACは1つのボードに正転/逆転用のモータポートが4チャンネルあり、4つまでのDCモータ(及び、電流を流して駆動するアクチュエータ)又は2つまでのステッピングモータを駆動することができます。

 小型アクチュエータ AGB65-SACの詳細はこちらを参照願います。<−このページは必ず参照してください。
  (以後、このページをSACのページといいます)

 PCとマイコンのシリアル通信の電圧は違いますが、AGB65シリーズは標準ではマイコンと接続するようになっておりますのでこれを変換する必要があります。変換にはAGB65−232Cというオプションボードが用意されております。

 

 COMポートが無いノートPCなどは、USBシリアルアダプタを使用することになります。市販の簡易的なUSBシリアルアダプタの場合は正常に通信できないものがありますのでご注意ください。浅草ギ研で販売しているものは動作確認済みです。


PCとの接続

 まずはAGB65-232Cを経由してPCのCOMポートへつなぎます。詳しい接続についてはSACのページを参照してください。COMポートが無いノートPCなどを使う場合は、市販のUSB-シリアルアダプタを使用してください。
  
 後で実験しやすいように1L,1H,2L,2H,3L,3H,4L,4H,G1-4端子にはピンヘッダを付けています。
 この基板ですが、裏面にモータドライバICが2個付いています。この部分を机などに接触したまま、アクチュエータ用の電源コネクタを抜き差ししたりすると、大きな力が加わってICが壊れますので、使用するにあたってはスペーサなどを取り付けた上で行ってください。基板の取り付けはM2ネジを想定しています。例えば1.5mm厚のアルミ板にネジ止めする場合は、2mm系5mm長スペーサとM2L8ネジが最適です。WILCOあたりで購入できます。
 ここではまだモータなどは付けていません。それぞれのアクチュエータの接続実験はこのページ下で行います。
 
モジュールは内部5Vで動いており、6V以上(15Vまで)の電源が必要です。添付されている電源ケーブルは9V乾電池用のスナップがついてます。供給する電源はできるだけ6Vに近い電圧の方がロスが少ないのでできるだけ低くしましょう。あまり高い電圧を入れると、電圧差が熱となり、裏面の電源ICが非常に熱くなるので注意して下さい。

プログラミング中はずっと通電することもあるかと思いますので乾電池を使いたくない場合はケーブルを加工して外部電源化するのもよいでしょう。今回は1Aまで出力できる9VのACアダプタが手元にありましたのでそれを使いました。ACジャックと、ADCに添付されている9V乾電池用のケーブルを切ってハンダ付けしたのが下の右の写真です。
  

その他細かい接続や注意点はSACのページを参照願います。


プログラミング〜セルフチェックを実行してみる

以下、C系のプログラミング経験がある方を想定して進めます。C#や.NET環境をまったく使ったことが無い方は前のページ(ココココ)を見てください。VC#2005(エクスプレスエディションというもの)はマイクロソフトより無償で入手できます。VBもC++もJ#も無償ですが、以下C#ですすめます。

C#は大文字と小文字を判断しますので、打ち間違いに注意してください。 textBox と TextBox は別ものと判断されます。

,NET FreamWorks Ver2.0の環境では、SerialPort(シリアルポート)コンポーネントが標準でサポートされています。データを送信するには、SerialPortコンポーネントでCOMポートをオープンし、通信速度などの設定をしてWriteメソッドであらかじめデータを格納していた配列を指定すると、配列のデータが送信されます。

受信は _DataReceived というイベントがありますのでこの中で受信の記述をします。

注意点としては、Serialportコンポーネントは、ユーザーが作ったFormとは別スレッドで動きますので、プログラムをスレッドセーフで書かないと、デバックモードでデバック実行できません。これらの詳細と回避方法はソースにコメントを入れましたのでそちらを参照願います。

SACのページを見ると、命令は11種類あります。よって、ボタンを11個配置して11種類の送信イベントを作り、受信は1つの受信イベントで、来た値を表示してみます。
ということで作ったプログラムが次になります。尚、exeではなく、全ソースもありますので詳細はそちらを参照してください。各、右クリックして「対象を保存」で保存してください。(圧縮してますので解凍してください)。
コンポーネントの配置などのプログラム作成の基本についてはこちらのページでも解説しています(あくまでもサンプルですのでご質問はご遠慮願います。)。


<実行ファイルのみ>

■Release.lzh
(右クリックで対象を保存)

*解凍して、フォルダの中の SacTest1.exe を実行してください。


<全ファイル>

■SacTest1.lzh
(右クリックで対象を保存)

*解凍して、C#からプロジェクトファイル SacTest1.sln を開いてください。


とりあえず、実行してみた結果が下のようになります。命令の送信プログラムはほぼ全部同じですので、全命令分を一気に作ってしまいました。



モータなどのアクチュエータも、アクチュエータ用電源もまだつながっていませんが、セルフチェックぐらいは動きます。上はセルフチェック命令ボタンを押して、返信結果がリッチテキストボックスに表示されたところです。(画面右上の方)

ついでに、STM状態ボタンを押したところ、

このようになりました。ステッピングモータはつながっていませんし、駆動命令も実行していないので、状態=0、つまり停止状態が帰ってきました。

ということで動作チェックは終了です。



マブチモータ(DCモータ)の接続

ホビーで一番使われていると思われるDCモータ、マブチモータを動かしてみます。マブチモータは浅草ギ研では販売していませんので、ツクモロボット王国に買いにいきました。SACは2〜8.4Vのアクチュエータが対象になりますが、店長にお聞きしたところ、低電圧では

FA-130
RE-140
RE-260
RE-280

が3V動作ということで、これらを購入しました。
マブチモータはコイル抵抗が非常に低いので、SACに直結すると大きな電流が流れてSACが壊れます。実際にテストしてみたところ壊れましたので100%壊れます。よって電流を制限するために、モータの両端に1オーム2W以上の酸化皮膜抵抗を取り付けてください。電子回路でよく使う1/4や1/8Wカーボン抵抗を使うと、抵抗器が非常に熱くなり、長時間動かすと抵抗が燃えたり破裂したりしますので、かならず2W以上のものを使用してください。

  


片方側だけに2オームの抵抗を入れても動きますが、正転と逆転で差が出ますので、両端に1オーム(以上)を入れた方が安定動作します。尚、抵抗が大きすぎると回転が遅くなるので注意して下さい。




実際に、モータに抵抗を取り付けたのが下の写真になります。実験中にショートすると怖いので、端子が出ている部分は絶縁テープを巻いています。この後にはステッピングモータなどをつないでみますので、取り外しできるようにコネクタも付けてみました。浅草ギ研で販売している2550コネクタをつけていますが、2.54mmピッチであればなんでも良いかと思います。



モータ用電源ですが、今回はNiMH(ニッケル水素)バッテリを使ってみました。RE260などのマブチの低電圧モータは3V推奨で、1.5V〜3Vが動作電圧となっています。NiMHは1本で1.2Vなので2本で2.4Vでちょうど良い。




全部つないでみたところが下の写真になります。ちょうど4種類のモータを買ったので、4ch全てにつなげてみました。




では早速、ON/OFFで実行してみます。ch1は#1側が正転、#2側が逆転となりますので、#1だけONにすると正転します。同じように4ch全て正転するには次のように設定してボタンを押します。


送信部分のプログラムです。最後に設定値を入れます。設定値はbit0が#1、bit1が#2...と対応し、ビットを1にするとON,0にするとOFFになります。よって、各ビットの重みを足せば設定値になります。それがif文のところです。
命令の詳細はSACのページに書いてあります。

実際に命令を送信したところ、全てのモータが勢いよく正転しました。この時、各モータに流れた電流は200〜500mAぐらいでした。軸を固定してストールさせてみたところ各1Aぐらい流れましたが、短時間(3秒とか)ならば問題ない様子でした。長時間は怖いので試してません。
ちなみに、規定の3Vを超えて5Vぐらいで回してみたところ、さらに早く回転しましたが、ドライバICや抵抗の発熱が大きくなりました。短時間なら5Vでも大丈夫そうです(マブチモータの仕様は超えてますので責任は負いません)。
命令0を実行すると全て止まりました。


次にPWMも実験してみました。
ch1を50%で正転する場合は次のようになります。画面ではchとなってますがこれはNoの間違いですね。ch2を正転するにはNo3、ch3を正転するにはNo5,ch4を正転するにはNo7を指定します。詳しくはSACのページを見てください。


送信部分です。単に値を送信しているだけ。簡単です。

実行したところ、先ほどとは明らかに遅い速度でch1がまわりました。


全chをPWM駆動してみました。全部正転で、ch1が20%、ch2が40%、ch3が60%、ch4が100%(フラット)になります。PWM波形についてはSACのページを参照してください。


同じく値を送っているだけ。

実行したところ、ch1は高周波音がするだけで回転しませんでした。2.4Vで20%程度の出力だとマブチモータは回らないようです。
#7を101(%)としてますが、100よりも大きな値にするとパルスは発生せずに、ONがフラットな状態で出力されます。但し、100%にしても101%(もしくはそれ以上の値)にしても違いはまったくわかりません。一瞬でもLOWになってはいけないようなアクチュエータの場合は101以上を設定するとよいでしょう(それがどういうものがはわかりませんが)。

パルス周期ですが、命令20で周期を変えられますが、小型のDCモータぐらいでしたら初期設定(1mS周期)で特に問題ないようです。周期を長くしたりするとギコちない動きになることが予想されますので特に設定は変えない方が良いでしょう。命令20は念のために付けた程度のものです。
尚、ステッピングモータを駆動するときには自動的にさらに周期を短くして、問題が起きないような設計になっています。



電磁石サーボAA-PT01の駆動

SACは小型のアクチュエータを動かす用途で設計されていますので、小型のアクチュエータも販売しています。その中の一つが電磁石サーボAA−PT01です。

AA-PT01


AA-PT01はコイルの中の動作軸に磁石を取り付けたもので、電流の方向により左右に動きます。
非常に小さいものなのでトルクはありませんが、軽いものならば動かせますので、ロボットの装飾などに最適かと思います(耳を動かしたりとか。紙とか発泡スチロールなどで作れば動かせます)。最近では外装もあるロボットが増え、人間とのインターフェイスに表情なども効くと思いますのでこれから流行ればよいと思ってます。
コイルから出たエナメル線には1mmピッチのピンヘッダが付いています。SACと接続するには2.54mmピッチにする必要があるので、手元にあったケーブルと2550コネクタ(浅草ギ研で販売)を使ってコネクタを付けてみたのが下の写真です。



AA-PT01は、電流が流れていない時は動作軸がフリーになりますが、添付の磁石を付けると、電流が流れていない時に中心位置付近に止めておくことができます。下の写真のコイル右についている小さい銀色のツブがその磁石です。取り付け位置によって止まる位置が若干変わります。下の写真では、中心位置にしようと思いましたが磁石を少し上の方につけてしまい、軸が少し右に流れています。通電していない時にこの状態になります。



では早速駆動してみましょう。単純に右左に動かすには、コイルから出ている2本の線の片方をON/OFFすればよいので命令1を実行してみました。ちなみに、下の写真ではSACのch1(の1Lと1H)につないでいます。#1をONにしたところ、左にふれました。




#2をONにすると逆になります。




AA-PT01は両端子をPWM制御することで、位置制御も可能です。SACは各端子から任意のPWM波形が出せますので、これで制御してみました。
まず、#1を100%、#2を0%、つまり上でやった#1だけONと同じ状態にしみますと、同じく左いっぱいに振れました。



#2のデューティーを上げると、止まる位置が右の方へ変化していきます。以下同じ。









両方100%、つまり均衡しているので中心位置(付近?)になりました。



今度は逆に#1を減らしていくとさらに右になります。















小型ステッピングモータ AA−STM15 の駆動

アクチュエータにもいろいろありますが、位置情報などのフィードバックの必要が無く精密な制御ができるものにステッピングモータがあります。カメラのズーム機構、プリンタのヘッドの位置制御、車などに沢山のステッピングモータが使われていますが、一般のホビーで入手できるものは種類が限られています。特に小型のものはホビー用途としてはほとんど販売されていません。
ということで、浅草ギ研では比較的小さい、直径15mm径のステッピングモータAA−STM15を販売しています。大きさとしてはマブチの130モータよりも少し小さいもので、”静止トルク”は約40gfcmです。単純に比較はできませんがマブチFA−130は”
適正負荷”で回転しているときが4gfcmとなっています。(ただし、回転速度はステッピングモータの方がかなり遅い。用途が違うので参考まで。)

STM15にコネクタを付けてみました。DCモータやPT01のときと同じように2.54mmピッチコネクタです。
赤と灰がA相側、黄と黒がB相側になりますので2こづつ。バイポーラなので線は4本しかつながなくて良いです。
ステッピングモータの駆動についてはSACのページで詳しく説明しています。



SACにつないだところが下の写真になります。STM15は5V駆動なので、今まで使っていたNiMHバッテリを外して、テスト用の5V電源をつなぎました。

赤:1L
灰:1H
黄:2L
黒:2H
につなぎます。端子とコイルの相の関係はSTM15のページにあります。

とりあえず、片方(Ach)しかつないでいないので、命令95と命令105を実行してみます。
加速設定がわからなかったので、とりあえず開始速度を100PPS、加速ステップ数を20と少し少なめにして「開始速度が普通で急に最高速度になる」というような設定にしたところ、上限速度は500PPSぐらいでした。下の写真では1000ステップ回転させています。STM15はステップ角が18度なので20ステップで1回転します。ということは1000ステップを実行すると50回転回るということです。

実行してみたところ、速すぎて50回回ったかはわかりませんでしたが、毎回同じ位置に止まるので、きちんと指定通りのステップ数を回転していたことがわかります。
−>止まる位置が同じ


上限速度をいろいろと変えてみましたが、この加速設定ですと最高速を600PPSにすると脱調しました。

−>止まる位置が毎回違う


今度は加速を調整して開始=50PPS、加速ステップ数500と「始めはゆっくり、加速も長い時間をかけて徐々に上げる」という設定にしてみました。今度は最高速が1000PPSぐらいでも脱調しませんでした。

この設定ですと、開始速度が遅いのと加速時間が長いので加減速の様子が見た目でわかります。
ちなみに、この設定で速度を1000以上にすると、たとえば1100PPSに設定すると1100PPSと思われる時にはブルブルしてるだけで動きませんでした。
また、電圧を低くしてみると、100PPSぐらいでも脱調子すことがありました。

ということは、電源電圧を5V以上にすると最高速度も変わるような気もしますが、怖いので実験してません。

1分間ぐらい回していたところ、STM15がかなり熱くなりました。コイル抵抗が低いのと、ほぼむき出しの構造なので熱が出やすいようです。実際に駆動するときには、動作終了毎に命令0を発行して電流を切った方が良いでしょう。
ステッピングモータは停止しているときもその位置を保持するために電流が流れていますので、注意しましょう。

プログラム部分ですが、いままでと同じように値をセットしてSerialPortコンポーネントで送信しているだけです。
速度や加速ステップ数は2バイトで表しますので、テキストボックスの値を2バイトに分割しています。送信はバイト単位なので、変数はバイトサイズに変換しています。


受信部分は下のようになっています。
以下、説明がよくわからない方は飛ばして下さい。私もよくわかってません。
命令200のステッピングモータの状態を判定するコマンドを送ると、SAC側からデータが返信されます。SerialPortコンポーネントにはDataReceivedイベントがあり、受信毎にこのイベントが発生します。
ソース内のコメントで詳しく説明していますが、SerialPortのイベントは、フォームとは別のスレッドで動きます。よって受信イベントが発生すると別スレッドが立ち上がります。VC#2005というか.NetFreamWorksVer2.0からは、スレッドセーフのプログラミングが厳密になってきたようで、別スレッドに直接アクセスしようとすると(デバックモードでは)エラーになります。
ということで、あらかじめ表示させるコンポーネントなどにメソッドを追加しておいてInvokeを使って間接的にアクセスしてます。ということでココには表示してませんが、この他に1)RitchTextBoxを継承してメソッドを追加したクラスを作り 2)デリゲートを記述する、ことが必要になります。


ということで、動作中に命令200を実行したところ下のようにリッチテキストボックスに表示されました。

最後のバイトが状態を表しますが 1:chAが回転中 という結果で、きちんと状態が読めています。
回転が止まった後にもう一度実行すると最後が0、つまり停止中となりました。


STM15はステップ角が18度とかなり大きいですが、逆に言うと同じステップ数であれば回転速度が速いということになります。実際に回してみたところ、一般的に入手できる30mm径ぐらいのハイブリッドステッピングモータに比べると回転速度が明らかに速いです。ということで、車輪をつけてちょこまかと動くようなロボットに使えるのではないかとおもっています。
マイクロマウスも小さい迷路ができるようですのでこれを機にマイクロマウスにはしるというのもよいかもしれません。




日本サーボ製ステッピングモータ KH39FM2-801 の駆動

ステッピングモータといえば、ホビーロボットではマイクロマウスにもよく使われています。マイクロマウスといえば「マイクロマウス工房」の森永さんが有名ですが、ホームページではベーシックマウスというマイクロマウスロボットの作り方が詳しく紹介されており、このベーシックマウスの製作をきっかけにロボット道に入った方は多いのではないかと思います。

ということでベーシックマウスで使われているKH39FM-801を動かしてみます。ツクモロボット王国で車輪も売っていますので簡単に車輪型ロボットがつくれそうです。




つないでみたところ。

−chA側−
1L:黒
1H:茶
2L:黄
2H:橙
−chA側−
3L:黒
3H:茶
4L:黄
5H:橙

という接続になります。青と赤はそれぞれ空いているG1〜G4につないで下さい。

今度は命令90、命令100を使って両方同時に回転させてみました。SACはSTM設定をしないとSTM駆動ができませんので必ず命令90を一度実行しましょう。その後は設定を変えるまで(命令95を実行するまで)何度でも命令100を実行できます。
KH39FM2-801はマイクロステップも使えますのでいろいろ試してみました。下のように400ステップを進めると、このモータは1ステップが1.8度なのでマイクロステップだと1.8x400/4=180度回ります。2相励起だと1.8x400=720度で2回転、ハーフステップだと1.8x400/2=360度で1回転となります。


実行したところ問題なく、回りました。
マイクロステップはステップ角度が小さいのでスムーズに回る感じです。但し、同じ加速設定だと2相励起などにくらべると回転速度は遅くなります。

最高速度を試してみたところ、
2相励起:500PPS
ハーフステップ:1000PPS
マイクロステップ:1400PPS
といったところでした。

と思ったら、サーボを良く見たら電源がDC6.3Vというのを発見。上はAA−PT01の実験の流れで5Vで駆動してました。前回の疑問点だった電圧を上げると最高速度が変わるかという点ですが、6Vにしてみたところマイクロステップで1700PPSまで脱調しませんでした。ということで電圧が高くなれば脱調しづらいということがわかりました。


プログラム部分は、今までと同様です。



この勢いでマイクロマウスを作ってしまおうと思いましたが断念。力尽きました。




バイオメタルの駆動

トキコーポレーションからバイオメタルという名称で形状記憶合金型のアクチュエータが販売されています。電流を流して制御するということでこれもSACで駆動することができます。

いろいろと実験してみたところ、まず直結では抵抗が低すぎるので電流を流すと縮みますがもとにもどらなくなったりしました。ということで抵抗を直列に入れて実験してみたところ、BMF150という一番太いタイプで5〜10オームの抵抗を直列につないだときに問題なく動きました。このとき、流れる電流は200〜300mAとなりますのでSACで十分制御できます。

バイオメタルは素子の状態でしか販売されておらず、ケースや取り付け部なども付いてアクチュエータの形になるとおもしろいかもしれません。

細すぎて写真に写りずらかったので写真などは割愛します。




おわりに

 このような感じで簡単に、小型のアクチュエータを駆動することができます。是非、面白いアプリケーションを考えてみてください。


2007年9月1日

 
(C)Copylight 2003. 有限会社浅草ギ研 | 通信販売の法規(訪問販売法第8条)に基づく通信販売業者の表示