□オートガイドへの道 PICの活用(2005.7.16) いろいろあって1ヶ月ほど停滞していました。梅雨明けを目前にして活動再開です。 前回はEM10に接続されているDOG天体導入システムのオートガイドコネクタに、Meade DSIとオートガイドスイートソフトウェアが吐き出すテキストコマンドを如何に変換して入力するかというところの構想留まりでした。DOGのオートガイド入力は、EM10+ST4接続ボックスを組み合わせた場合のオートガイド入力コネクタと電気的接続がコンパチなので、どちらでも使用可能のはずです。この数日で少し進展しましたので、そのご報告です。 まず、接続の要となるPICマイコンの開発環境については2種類の候補がありました。それは秋月電子通商による @PICマイコン固有のアッセンブリ言語とPICライタによる開発環境 AKI−PICプログラマー Ver.3.5 キット PIC16F84Aマイコンモジュールキット(RS232C用IC搭載)
AAKI−PIC877ベーシック開発セット の2種類でした。@を勉強しながら習得する方が今後のことを考えると、ためになりそうですが、梅雨明け目前の今、はやる気持ちを押さえきれず、開発スピードを優先してAでシステムを立ち上げてしまうことにしました。なんといっても昔からなじみのあるBASICが使えるのはとても大きなメリットです。AKI−PIC877ベーシック開発セットでは、スイッチ、LED、LCDなどが搭載された開発用のベースボードに、秋月電子オリジナルのベーシックインタプリタが書き込まれているPIC877モジュールを搭載したものです(Fig.1左)。このPICモジュールは単体で動作可能で、電源供給に必要な5VのレギュレータICを搭載しながらとってもコンパクトなため、91x65x31mmのリレーボックスにすっぽり入ってしまいます(Fig,1右)。 Fig.1 AKI−PIC877ベーシック開発セット(左)、および、リレーボックスとPIC877モジュールの大きさの比較
AKI−PIC877ベーシック開発セットの開発環境では、RS232Cの入出力のエミュレートも可能なので、オートガイドの動作テストはほとんどがベースボード上で行うことができます。
簡単にPIC877モジュールのハードウェアについて触れておくと、以下のような雰囲気です。 @プログラム領域4kword、変数領域4kword、RS232C通信によるEEPROM書き込み方式 AI/O33ch、内8本をA/D変換に使用可能(RS232C,I2Cポート含む) BA/Dコンバータ 10bit Cシリアル 115200bps D電源 5-12V(レギュレータ搭載)
PICマイコンとリレーボックスは、LX200用のテキストコマンドをEM10やDOCで受け取ることのできるリレーのカチカチに変換する機能を担いますが、PICマイコンのプログラミングに先立ち、DSIによるオートガイド時にコントロールソフトウェアがLX200に対して吐き出すテキストコマンドを把握しておく必要があります。LX200のコンピュータ制御やオペレーション・メンテナンスの技術情報については、MAPUG(Meade Advanced Products Users Group)サイトに膨大な情報の蓄積があります。その中のDoc G's Info SiteにLX200の制御コマンドについての情報がありました。
・MAPUG-Astoronomy.net(http://www.mapug-astronomy.net/) Doc G's Info Site-The LX200 Command Set(http://www.mapug-astronomy.net/ragreiner/lx200CmdSet.html) DSIのソフトウェアから排出される制御に必要なコマンドは、Table.1に示すMoveコマンド(M)に付随する以下の4つのコマンドのみと思います。 Table.1 オートガイド制御に必要なMoveコマンド
文法については、<command-prefix> <statement> <command-suffix>のような形に記述して、これらをつないだ一連の文字列を排出すると、LX200のコンピュータ架台は命令と解釈して動作するはずです。ここで、 <command-prefix>とは、"#:" シャープ(0x23)・コロン(0x3A) <command-suffix>とは、"#" シャープ(0x23) <statement>はMajor CommandとMinor Commandを単に連結したもの です。
たとえば鏡筒の方角を西に送りたいならば「#:Me#」のようになります。
AKI−PIC877のPIC-BASICインタプリタの変数セットは、符合なしのbyte型、word型、long型、そして、LCD制御専用の文字列変数が使えます。RS232Cポートを使用する場合は変数の受渡しはbyte型に限られますので、プログラム上では少々工夫が必要ですが問題ないでしょう。
PIC-BASICでは、33chのI/Oポートのうち、RA0-RA5(6ch)、RB0-RB7(8ch)、RC0-RC5(6ch)、RD0-RD7(8ch)、RE0-RE2(3ch)が31chが制御できます。このうちベースボードのLEDはRD0-RD7に接続されているので、オートガイド用の出力はRD0-RD3を用いることにします。
早速、プログラムを始めます。AKI-PIC877ベーシックの開発環境はVBやなんかを使った経験のある人にとっては、わりとなじみやすいものです(Fig.2)。
Fig.2 AKI−PIC877ベーシックの開発環境
まず始めに、リレーにつなぐ出力ポートとしてRD0:East、RD1:North、RD2:South、RD3:Westに定義し、開発環境のシリアル通信エミュレーションウインドにLX200コマンドを打ち込むと、一定時間LEDが点灯して消えるようなプログラムを作成します。力任せで書いたプログラムを以下に示します。IFをネストさせているのはELSE IFが使えないからですが、これとて特にプログラムを大きく制限する要素にはなりません。
'LX200 command → リレー出力変換 Sleep 100 '0.1秒の待ち
このプログラムは実は構文解析を全くやっていません。ただ単にやってきた文字列を順に読み取って、その中にe,n,s,wの何れかが含まれていたら、一定時間、対応する出力ポートのビットを立てるというものです。これでも実用上、問題ないはずです。あとは、コマンドの飛来頻度やリレーの反応速度に応じて、待ち時間の調整をしてやればよいと思います。
(2005/7/30 update)
適切な待ち時間について調べた結果です。リレーの反応速度が5m秒未満と機械式リレーにしてはそこそこ高速ですが、ダミーの入力をDOGに接続して調べた結果、DOG側の制限で、50m秒の待ちでは不安定で、80m秒程度の待ち時間を入れてやっと安定するようになります。また、先のプログラムは負論理で記述していますが、DOGへの出力はリレーで反転されているため、正論理で記述しなおしてしてやる必要があることが分かりました。
プログラムをPICに焼いて、配線を終えたのが以下の写真です。PICモジュールはプログラムの修正ができるようにソケットを介して取り付けてあります。今回活用したPictor用のリレーアダプタは、トランジスタの交換・パターンカット・ジャンプ配線など、いろいろいじらざるを得ない状態になってしまいました。使われているリレーについても高速応答を得るために、永久磁石が入っていて、そのため励磁用の給電配線の極性を逆にすると動作しません。回路構成をいじったあと、一見適正電圧が印加されているようにみえるにも関わらず動かなくなってしまったので、暫く悩みました。これを修正するために、基板裏面側の配線は少々見苦しくなってしまいました。
システムに組み込む前に、ターミナルエミュレータでs、e、n、wなどを入力すると、対応するリレーがカチカチなって、DOGではステッピングモーターがちゃんと進んでいることを確認しました。
Fig.3 Pictor用リレーボックスにPIC877モジュールを組み込んだところ
このモジュールを使ってオートガイドできるように一通り部品をつなげてみました。これまで、電源として単一電池を使っていましたが、今回新たに秋月電子から12V22Ahrのシールドバッテリを購入して強化しました。チャージユニットのキットも秋月から購入しましたが、この容量をチャージするためには、若干改造が必要です。電源周りはできるだけ手持ち部品で済ませることで結構安価に抑えることができましたので、また別のページを開設してご紹介したいと思います。
Fig.4 DSI⇒DOG変換ユニットをシステムに組んでみたところ
早速、AutoStarSuiteソフトウェアからの制御を試してみました。DSIのイメージング用ソフトウェアを起動させたあと、オートガイド用の画面に移動して、接続を確立するためにConnectボタンを押しました。
が、「Scope not found」のエラーが出て通信か確立できませんでした。 どうやら、最初に接続先に機器が正しく接続されているか調べるようなクエリーを掛けているようです。
Fig.5 AutoStarSuiteソフトウェアを用いた動作テスト
(2005/8/3 update)
そこで、DSIのソフトウェアによる最初のクエリを調べてみたところ、「#:GVP#:GVN#」が送信されていることが分かりました。ターミナルエミュレータを使ってLX200GPS-25にこのようなコマンド列を送信して、どのような返答があるか調べてみました。:GVP#に対しては「LX2001#」が、:GVN#に対しては「3.0i#」が返ってきます。どうやら前者はモデル、後者はファームウェアバージョンを問い合わせるコマンドのようです。
Fig.6 DSIのオートガイドソフトウェア起動時の最初のやり取り
このようなクエリに対応させて細かな調整を行ったコードは以下のようになります。
'LX200 command → リレー出力変換 IF data=80 Then ' "P" for ":GVP" クエリ Serin pb9600,1000,data Serout pb9600,1000,"LX2001# Else IF data=78 Then ' "N" for ":GVN" クエリ Serin pb9600,1000,data Serout pb9600,1000,"3.0i#
Else
Endif
Endif Sleep 80 '80m秒の待ち 上記プログラムをPICマイコンに焼いたのち、早速、動作テストをしてみました。うむ。今度はエラーが出ず、リレーがカチカチいい始めたので、多分動いていると思います。やっと、実際に星空で試す段階に進めそうです。
次回、天候が良いときに早速試そうと思います。
Fig.7 AutoStarSuiteソフトウェアを用いた動作テスト その2
(追加情報)
Meadeのオフィシャルサイトにコマンドリファレンスが公開されていました。 http://www.meade.com/support/LX200CommandSet.pdf
Copyright (c) 2004-2005 Mujimuji All Rights Reserved. |