« 2006年05月 | メイン | 2006年07月 »
以前からのお話のとおり、RoboShell のソースを公開しました。まだ、枯れきっていませんが少しずつ良いものにしていきたいと思います。また、同時に RoboShell Composer も公開しました。モーションデータのC言語のソースを吐き出しますので、便利に使えると思います。
システムを作るときにはフェールセーフが欠かせない。フェールセーフは一般にバ○ヨケとかポカヨケとか言われているものである。今回製作している CNC にも欠かせない技術だ。例えば、X-Yテーブルの行き過ぎを防ぐためのリミットスイッチ。これなんかもフェールセーフの一つだ。でも、リアルスイッチを付けようとすると結構大変だったりする。こういう時こそ、ソフトの出番なのだ。システムはどの位置にいるか把握しているので、テーブルが行き過ぎそうになったら、モータのパルスを止めて防ぐことが出来る。予め、ファームウェアとホストソフトに入れておいたらいいかもしれない。
※まだ実装していません.
もう一つは、モータの過電流防止だ。励磁信号をそのまま出し続けると、けっこうな電流が流れ続ける。これを防ぐためにパルスを止めるときは完全にダーリントントランジスタのベースに与える出力を完全にOFFにする。
ちょっとの工夫だけど、効果は絶大だ。こういう工夫が出来るソフトは本当に楽しい。
って自分で言うのもナニですが、RoboShellの基板が上がってきましたよ〜♪詳しいことはこちらを見てもらうとして、今までのロボットコントローラの不満点をつぶしたコントローラが出来上がりました。既に利用表明も各所よりいただいていますので、それなりに盛り上がるのではないかと期待しています。
また、ロボットに限らず他の組込み用途にも転用できるのではないかとも考えています。
まだ、CNCも出来ていない内からこんなのを心配してもしょうがないんだけど、とりあえずCNC用のコンピュータを一台仕立てることにした。非常用のマシンとして、たまに使っていた X240 だ。でもこれはUSB1.1が一つしか装備されていない。EZ-CNC はジョイスティックとEZ-CNC自体で最低でも2つのUSBポートを利用する。とりあえず、ADAPTECのUSB2.0ボードをCardBusに差し込んで使う。でも、これだとイーサネットのポートが確保できない。これもUSB2.0のバッファローの無線LANアダプタを利用する。この辺はハブを利用していもいいかもしれない。ただし、EZ-CNCに使っているEZ-USB系列ではハブを使うとうまく行かないと言う事例も紹介されているので、注意が必要だ。EZ-CNC自体はCardBusのUSBポート直結と言うことにする。
後はソフト自体を適当にインストールして実験してみる。
こちらの方が公開されているNC エディタ・フリーでフライス盤CNC化の治具の図面を描いてみた。
この手のツールを使うのは初めてだけど、さくっと描けた(はず?)。面白い。あとはこれを元にアルミの板を削りだしていく作業を行うのだ。
今日もホームセンターに行ってきた。フライス盤を作業台に固定するためのタッピングスクリューを買ってきた。これでガッチリ固定したので、かなり良い感じになった。
Eclipse のC言語開発用プラグイン CDT を組み込み用に強化した Zylin CDT がなんとなく動作した。
以前のバージョンだと、make のオプションを展開できなかったが今回から出来るようになった。まだ、設定が甘いので使い込んではいないが、そろそろ本格的に使い込んでみようと思っている。
きちんと使いこなせばかなり強力な武器になりそうだ。
MiniFX2 での波形出力確認が出来たので、モータも合わせてつなぎ込んでみた。こんな感じになる。
基板関係はコンパクトにまとめることが出来た。この後に以下の手順で試験を行う。
CNCのパーサ動作後に
1.無負荷での消費電流の確認
モータを3個接続しCNCのGコードを流してモータの動きと消費電流、トランジスタの発熱を確認する。この時点で2Aを超えているようだと秋月のACアダプタは使えなくなる。
2.フライスに組み込んでの動作確認
実際の負荷に近い環境での動作確認。この時点での消費電流を確認する。実際の作業環境ではワークに刃物が当たるのでさらに消費電流が大きくなる。
CNC の機能について後日と言うことで。
EZ-CNC のホストSWの改良を行った。改良点は…
1.プログレスバーの追加
テーブルの動作がどの程度進んだかを示すプログレスバーを装備した。
2.座標の与え方を相対座標と絶対座標で行えるようにした。
3.CNCの画面の追加
まだ、中身は何も実装していないが、とりあえずガワは用意した。
はやく、ステッピングモータ用の治具を作らないとな…。
先日、送られてきた MiniFX2 から信号を取り出す基板を作成して、実際に動作させてみた。プログラムを PORT-C のドライブから PORT-D のドライブに切り替えてみた。最初は信号が出なかったが、ホストSWの不具合だった。(つまり、PORT-Cでも動作しなかった。)PORT-Dでも問題なかったので、最初に作った基板の配線もPORT-Dに変更して、ソフトは一種類にした。
ホストSWも変更した。桁数を増やしたのと、各種のファンクションスイッチを配置してみた。原点復帰(Home)なんかも入れてみた。なかなか、いい感じに雰囲気が出てきた。
これからは細かなところも作りこんでいかなければならない。例えば、各種の設定メニューやそれらを記録するための *.INI ファイル(レジストリを汚すのは嫌い)なんかだ。
フライスの整備と合わせて、もう少し時間が必要かも?
さらにファームウェアの拡張は続く。XYテーブルの大きさや 1mm あたりのステッピングモータのパルス量などもホストPCとやり取りできるようになった。
AutoFeed は2種類の実装があるので、これも搭載しようと思っている。1つは相対値での座標、もう一つは絶対値での座標の与え方だ。現在は相対値になっている。パルスを与えたら、±いくらで移動するようになっている。絶対値にするには現在の座標をからの距離を算出してその差分だけ、移動するようにする。メニューにでも登録して、切り替えられるようにしておく。これはCNC化を行う際にも役立つ。
さて、話が前後するが、ファームウェアの拡張に伴い、またもXDATAの開始アドレスの変更が生じた。今度はXDATA=0x1400である。こうするとうまくいく。
OptimizeからminiFX2の完成品が到着した。まだ、ドライブ回路との接続基板を製作していないが、とりあえずつなげてソフトを流してみた。
何の問題もなく動作する。ただ、現在製作中のソフトは A, B, C ポートを利用している。ミニ基板には C ポートは付いていないので、Dポートに変更する予定。
これが出来れば、安価で高性能なCNCシステムが完成するのだ。
あれから色々とやってみた。
どうやら、#define の展開がうまくないようだ。あんまり、意味が無いけど #define に予め直値を入れておけば良いみたい。
そうじゃないと Warning が出て気持ち悪い。
一応、long も使える様になった。素晴らしい。これで座標はそのままパルス数で表すことが出来るようになった。
大きなフライスもこれでOK?
あとはAutoFeedとNCパーサだな。
EZ-CNC でなんとか、移動距離の取り込みも出来るようになった。原因はインバッファの指定を1バイトしか設定していなかったので、残りの部分を取込めなかったのが原因だった。
現在使おうと検討しているステッピングモータは200パルスで一回転だ。1−2相励磁にすると倍の400ステップで一回転となる。現在のテーブルの幅が300mmであるので、300 x 400 = 120,000 ステップとなる。これだと、2^16 を超えてしまい16ビットで収まりきれなくなる。
当然、4バイトを基数にするわけだけど、SDCCは4バイトの数を扱えないみたい。32ビットに指定して、その変数にそれなりに大きい数を代入しようとすると Warning が出てしまう。
今時、信じられない。でも、USB2.0 とは言っても所詮制御しているのは 8bit マイコンなんだよね。とりあえず、10mm を単位にしてそれ以上の場合はカウンタに足したり引いたりして、つじつまを合わせることにする。
もう一歩だな。
詳しく調べたところ、FX2 チップの56ピンでもタイマは内蔵していそうだ。ただ、タイマ端子が外に出ているかどうかの違いだけのようだ。これで更に安価に小型にステッピングモータのコントローラが自作できる。早いところ、表示関係を実装しないと…。
#この辺がうまく行ってないんだよね…。
当初は RoboShell を用いてフライス盤の CNC 化に挑戦しようと考えていたが、RoboShellの通信はリモコンなどの対人からの制御を想定したものであり、大量のデータを扱うような今回のような制御には不向きだった。(もちろん、万能ロボット開発環境を目指しているので、拡張していく予定ではあるが…。)
鬼吸い以外にまともなアプリケーションの無かった FX2 だが、今回の EZ-CNC で2つ目の実用的なアプリケーションを開発することが出来てきた。この EZ-CNC は開発結果を皆さんとシェアできると思うし、作りこんでいけばかなり実用的なアプリになりそうだ。
鬼吸いはインターネットに発表された成果物を自分の商品として売り出してしまう心無い人間により、詳細の公表を行うことが出来なかった。回路図とかソース(バイナリでも解析して)とか公表したら、2−3日後に「業界、最速の吸い上げシステムです。」とか言いながら、発表するんだろうなと思う。
RoboShell でうまくいかなかったのが、ステッピングモータのステップ数の大量取り込みの部分。こちらからの命令は問題なく処理できるけど、ステップ数の送りがうまくいかない。オープンループで動作しているステッピングモータにとって現在(まで)のパルス数の認識は非常に重要でこれがないときっちりした制御が出来なくなる。
FX2の使用だが、当初は 手持ちの AN-2131SC(EZ-USB) でやろうと考えていた。しかし、自作のフレームワークでのタイマ割込みがうまく動作しなかった。そこで、こちらの方のフレームワークを利用させてもらおうとしたが、RENUM でこけているようでうまく動作しなかった。ステッピングモータを3軸、回すだけならこの程度のコントローラで十分だと思う。そう、FX2の 56ピンタイプの石にはタイマが付いていないんだよね。1chでも良いから付けて欲しい。今回のような用途にはぴったりなのに…。多少、オーバースペックかなと思いながらも FX2 を使うことにした。以前に公表したフレームワークを用いてファームウェアは作成した。あまり深く考えずに必要と思われる機能を足しこんでいく。これからマイクロステッパなどに対応していけば、ピン数もファームウェアの格納サイズも適正な大きさになっていくと思う。同時にPC側のアプリも考えなければいけないが、これは先に開発した RoboShell-Stepper をそのまま通信部分をUSBに置き換えて使うことにした。
トラブル
XDATA
最初のトラブルは Stepper の制御部を入れると、RENUMがうまくいかない。基本部分だけだともちろんうまくいく。
対策
フレームワークの XDATA のスタート開始番地を 0x1300 にした。CODEとDATAがかぶっていたようだ。問題なく動作する。
パターンがうまく出力しない
結局、パターンをうまく作りこめていなかった。1−2相励磁のパターンを再チェックしたところ動作するようになった。
で、これらの問題をクリアしてステッピングモータは回転を始めた。ジョイスティックからの入力に対して、確実に反応する。かなり、いい感じだ。ジョイスティックを大きく倒せば、ステッピングの発振周波数を高くなり高回転になる。メカ的に追従できなくて回転できなくなる脱調はよく知られた現象だが、周波数を順序良く上げて行くと京急(シーメンス)の車両のインバータ音のような可聴領域での音階が発生する。(WEBマスタのステッピングモータだけかもしれない。)聞いていて、非常に心地よい。
表示関係が未実装なので、この辺りを足しこんで行こうと思う。
ヤフオクで落札したフライス盤が到着した。
朝一で佐川急便から連絡があり、到着は夕方になると言う。それでは困る。当初の予定通り、午前中にナントカしてくれと言うと…。とりあえず、11:00位に持ってきた。佐川のアニキも個人宅にこういうのは初めてのようで、少し困惑していた。アニキに手伝ってもらいながら、部屋まで運び込む。
加齢と共に腰を痛めているWeb Master には堪える重さだ。
木箱で厳重に梱包されているので、その木箱を分解していく。
木箱をばらしていく。やっと、ご本尊を拝むことが出来た。
先日の作業台にとうとう、フライス盤が乗っかったわけだ。
これで終わりではなく、これからが始まりだ。さしあたっては、CNC化の第一歩として、ステッピングモータの取り付け治具を製作する。モータ取り付けとソフトの開発、テストが待っている。楽しすぎる。
でも、部屋の中がかなり油臭くなってしまった。これからフライス盤を買う人はその点を注意すること。
近所のホームセンターに行ってきた。WebMasterは就職するまで東京の下町に住んでいたので、郊外型の大型スーパーやホームセンターの様なカルチャーはあまり無かった。秋葉原や東急ハンズなどを利用していた。現在は横浜在住だが、横浜はそこそこ都会な割には大型のホームセンターもちゃんとある。
作業台を製作するにあたり、先週も行ってきてどの様な品揃えか確認し頭の中で設計図を描いていたのだ。そのホームセンターで購入できる部材で作るわけだ。ホームセンターの便利なところは軽トラックを貸してくれるのだ。それも一時間なら無料だ。そこそこかさばるし、週末を利用して早く作ってみたい時には本当に便利だ。重たいものもついでに買って来れる。今回製作したのはこんな感じ。
スチールのアングルと棚板を組み合わせたものだ。ミソは天板のコンパネである。コンパネは安いが使い勝手が良い。特売のコンパネを4等分して使っている。900mm x 450mm の棚板にぴったり合うのだ。製作時間は1時間ちょっとで、予算も1万円を少しオーバーした程度なので納得だろう。
この上には工作機械を載せる予定だ。もちろん、RoboShellStepper と組み合わせるのだ。
RoboShell の別プロジェクトとして行ってきた RoboShell Stepper が本流にインテグされた。RoboShell Stepper はその名のとおりステッピングモータを駆動させるためのサブシステムである。ステッピングモータのロボットのアプリケーションとしてはマイクロマウスが有名だ。小型なRoboShell は最適なシステムである。もう一つの応用例は工作機械である 旋盤やフライス盤の制御、いわゆる CNCだ。
コントローラが出来上がるにつれて、機体をどの様に製作するかが大きな問題になってきた。
とりあえず、何か道具が必要だよなとは漠然と考えてはいたのだった…。旋盤やフライス盤などの工作機械を調べている内に先の CNC が出てきたのだ。最初はフライス盤の CNC化キットでも購入しようと考えたが、ソフトや電子工学で身を立てているのに買うのはおかしいだろうと言う結論に至った。
内容を詳しく調べると、NCコードのパーサーとステッピングモータのドライブ回路だ。手馴れたEZ-USBでも使うかと考えたが、今はもっと手馴れた環境がある。そう、RoboShell だ。
RoboShell で作る、自分の機体を!!自分の機体を自分で作るロボ。技術者の夢に一歩近づいたと言うわけだ。
早速、ステッピングモータを動作させることにするわけだが、お金をかけるのは基本的に大嫌いなのだ。と言うわけでなるべく安く仕上げることにする。
これがシステムの全景である。
ステッピングモータ
一番手前がステッピングモータ。現品.com で購入。仕様がほとんどわからないので、3軸あればいいのだが念のために4個買った。
RoboShellCore
現在、開発中のロボット制御システム RoboShell 。32軸のサーボモータのコントロールに加えて、今回の拡張で3軸のステッピングモータも制御可能になった。
ステッピングモータドライブ回路
今回製作したドライブ回路。部品はほとんど秋月電子通商で購入。予算は2,000円位だと思う。
ハードだけ作っても意味が無い。コンピュータものはソフトが一番大変なのだ。ソフトも制作する。NCコードのパーサが最終目標だが、とりあえず自動送りとジョイスティックによる制御が第一目標だ。
何のためにあるか、よくわからない 7-SEG LED を模したパネルなど作りこんでみる。RoboShellCore の作りこみが甘いせいであろうか?うまくジョイスティックのデータを受け取れないことがあるが、最初はこんなもんだろう。徐々に熟成させていけばよいのだ。
人を乗せるための機械を作るのは本当に大変なことなのだ…。
GoogleMapでシンドラーのリストを作ってください。お願いいたします。
以前に R2C2 なるシステムを作った。そのときの成果物が残っていた。ジョイスティックのテストプログラムだ。当時は Saitek のジョイスティックではなく、PS2のコントローラをインターフェイスをかまして使っていた。とりあえず、Saitekをつないで動作を見るとなかなか良い感じだ。Saitek のジョイスティックの入力は全部、カバー出来る感じである。ハットスイッチも難なく動作!!アナログ入力もばっちりだ!!
これで現在、製作中のプロジェクトに投入できるな。
ProCommanderUnitは Saitek のドライバをかまして、キーボードとして使うようにする。これで、ブロッキングファクターは全部なくなったな!!
RoboShell を利用した別プロジェクトもほぼ出来たので、次は RoboShell Console だ。RoboShell Console はジョイスティックを取り扱うわけだが、昨今のジョイスティックのボタンの多さときたら…。そういうのをハンドリングするには DirectInput を用いるわけだが、これがけっこう難しい。と言うのも、サンプルプログラムのほとんどは Win32 API をそのまま使うようになっている。最近の開発環境である .Net 2003 が最低無いとサンプルプログラムのビルドが出来ない。小生はいまだに、VC++6.0 と MFC を使っているのだ。この環境に慣れきった怠惰な開発スタイルでは最近の環境についていけないのだ…。
うーん、考えること5秒…。
現在、Saitek のコントローラを使っているがこのコントローラはそれぞれのスイッチをキーボードにマッピングすることが出来る。つまり、ジョイスティックの入力はキーボードからの入力と等価になるわけだ。これなら、
OnKeyMessge〜
をオーバーライドすれば、ナントカできそうだ。
副産物として、本体キーボードでも制御できるわけだ。
でも…。
なんか、やだな、ずるしてるみたいで…。
でも、キーボードでやるか…。出来なきゃ意味ないからな…。
ヘタレだな。
先日、現品.comで買い物をした。秋葉原でもほとんど見かけなくなったジャンク屋だが、そのジャンク屋を常用して買い付けたもので実用品を作れる人であれば、このサイトのセンスを感じ取ることが出来るだろう。そう、ジャンク屋の怪しげな雰囲気、猥雑さの中にも整理された空間だ。このサイトは一般的な人が見ると、単なる汚い WEBだが、どんな WEB デザイナーでもこの雰囲気は出せないのではないかと思う。もし、本職のWEBデザイナーがこのサイトを作ったとしたら…、自分の眼力のなさを恥じるしかないが…。
さて、購入したものはと言うと…。
ステッピングモータx4個だ。例によって資料がない。Googleでも有用な情報を得ることが出来ない…。己の力だけが頼りだ。コイルの抵抗を測り、中点抵抗などを求めて結線図を作ってみた。シャフトには割りピンを使って、スパイラルプーリー(?)が固定されている。この割りピンもなんとか抜き取ることができた。現在、システムを構築中なので一段落したら、WEBで発表していきたいと思う。
Web 2.0 ってのがある。前からのものが大きく変わった時にはとりあえず、2.0 にするみたいだ。そういえば、Windows95 が出た後には 〜95 って付けるのが流行ったよな。〜96、〜97、〜98位まで続いたよな。その後は〜2000って感じだった。その後は XP だな。MSが言い始めるのがいいみたい。Web 2.0 は MS 以外が言い始めたから…。
で、これからはなんでも 2.0 を付ける事にする。携帯電話2.0とかTeamKNOx 2.0とか…。
今日は6月1日だから、駐車違反取締り2.0とかだな。