|
vega 2003.02.06〜
自動導入追尾システム (最終更新 2004.02.07 )
___ おしらせ ___________________________________
・
導入追尾ソフトのデモ版 ダウンロードできます。 こちらです 2003.8.02〜
・
数学関数の作り方 (秋月Cのユーザの方へ) こちらです 2003.10.8〜
___________________________________________
掲示板
自動導入追尾装置の自作に、挑戦しています。
私がどんなモノをどうやって作っているか紹介します。
ソフトは大分形になってきましたが、ハードは何もしていません。
ハード(モータードライブ)が完成するまで、考えた方法が正しいか否か分かりません。
部分微動を使用し、格安で導入追尾システムが製作できれば愉快なんですが。
機能
望遠鏡の極軸がどこを向いていても、導入追尾ができる。
微動ギアは全周ウォームギアでも、部分微動(タンジェントスクリュー)でも可能。
パソコンと、マイコン(H8−3048)制御のモーターを使用する。
眼視用とする。
機能分担
パソコン
星図を表示して、導入する天体を指示する。
極軸の位置を計算する。
マイコンからの望遠鏡位置データを受信し、星図上に表示する。
マイコン制御のモータードライブ
極軸の位置を測定する場合は、パソコンにデータを送り答えをパソコンから受信する。
導入追尾する天体位置はパソコンより受信し、後は自分で導入追尾する。
望遠鏡が向いている天球上の位置は、逐次パソコンに送る。
赤外リモコンを使用し、アイピースを覗きながら操作可能にする。
モーターはまずパルスモーターを予定しています。
DCモーターも試してみたいですが、こちらは何の見とうしもありません。
___________________________________________
マイコン
AKI−H8/3048F(ROM:128K、RAM:4KB、16Mhz) とそのマザーボード基板 (秋月電子)
パソコンとの接続は、シリアルポート(COMポート)
マイコンの制御は、赤外リモコンとパソコンから
追加部品
128KBのSRAM(RAM上でのテストの為)
赤外リモコン受光素子
LCD 40文字x2行
電子ブザー(追加予定で、リモコン受け付け時や、動作完了など)
シリアルROM(追加予定で、観測地の緯度経度など設定データを保存する)
開発環境
Cのコンパイラは、AKI−H8(3048)用コンパイラ (今はトラ技2002.03の付録DOS版) 他
モニタープログラムは、日立製のH8モニター(フリーソフト)を外部増設RAM用にカスタマイズして使用。
I/Oに関係無くややこしいところは、Boland
C++ Compiler 5.5を使用してパソコンでテスト
すれば、H8でまず問題が発生しません。
___________________________________________
現状
作ったのは、ソフトのみです。H8/3048Fは以前使用したものがありました。
パソコンとH8マイコンと接続して動かしてます。最初は、(バーチャルですが)暴れ回ってた望
遠鏡も今では、大分おとなしくなり言うことを聞くようになりました。H8に周波数カウンタをつない
で、モーター用パルスの周波数が思ったとうりに変化するとこまで確認しています。
モータードライブはまだ何もありません。
H8に付けたLCDには、年月日時分秒、恒星時、目標天体の赤経赤緯と高度方位角と時角、
望遠鏡が向いている赤経赤緯、追尾速度(パルスレート)、極軸座標などを表示します。
パソコンで導入指示をすると、H8から送られた位置(赤経赤緯)は、目標に近づき、目標の天体を捕らえて
止まります。(モーターはつないだつもり)
追尾時に、追尾速度を計算(座標変換など)しLCD表示とパソコンに位置送信の1サイクルに
1秒間以内です。
H8の制御(粗動、停止)などは、パソコンからと赤外リモコン(テレビ用カードリモコン)で行います。
タンジェントスクリューを使用した方式でも、H8とパソコンをつないでうまく導入追尾してます。
アームが長くなると、パルスレートが段々と速くなってくるのがLCD表示でわかります。
☆ ROM化とシリアルROMの読み書きができるようになったので、パソコンと接続しなくても動かせるように
手を加えています。自立する為には、天体データ、基準星を内部に持つ必要があります。パソコンのソフト
からCのソース(データ初期化)を吐き出すようにしました。星以外のデータは、1700個ほどなのでそれほど
サイズは増加しません。Lcdに表示させて選択したり、リモコンのボタン(テンキー)でメシエ番号を直接指定
するようにする予定です。極軸を求める計算ロジックは、現状では遅くてH8では使い物にならないので、経緯台
のみ自立(パソコンなし)します。設定は、水準器で水平に合わせるだけ。赤道儀は、最初だけパソコンを接続
し、極軸の位置を計算したら後は、外してもOKにする予定です。
惑星の位置推算のソースを追加してコンパイルしたら一気に128KBを超えてしまいました。3048ではどうやら
無理のようです。計算量がとても多いです。短精度にしたらどうでしょうか? 惑星は最初だけパソコン
から受信するようにします。彗星の位置推算は計算量が少ないので、問題にならないはずです。
リモコンを変えてボタンの数が増えたので入力の自由度が増えました。数値を直接入力できるのが良いです。
チャンネル番号が、テンキーの代わりです。
薄くて軽くてもう少しボタンが多いと具合がいいのですが。入力の処理方法を変えたので確実に反応し、反応
時間も速くなったので、手動でモーターを動かすのもたぶん問題にならないと思います。
今後追加予定機能
友田さんの掲示板でドブドライバーという装置の原理が紹介されましたが、試しにシミュレーションしてみ
ると結構良さそうです。最小二乗法で、4次式で近似すると精度がぐっと良くなりました。ずれが気になっ
たら中心に移動し、再計算するだけでしばらくは、ノータッチで良さそうです。(倍率にもよりますが)
導入が必要ないなら、これで十分と思います。(データを出さないと全然説得力ないですね。)
この方式なら望遠鏡(経緯儀、又はドブ)の水平を合わせなくてもいいはずです。
経緯儀は水準器で水平を合わせれば(正しく天頂に向ける)、極軸設定位置計算の必要がなくH8だけで
も処理速度的には問題ありません。天体位置データをマイコン内部に保存すれば、パソコンが不要になり
コンパクトになります。でもパソコンから星図を見て操作する便利さにわかなわないと思います。
2000〜3000パルス/回転
程度のロータリ・エンコーダ゙を付ければモーターなしで導入ができます。
これなら、モーターのスピードにイラつくこともなくなります。
【私の教科書】
新装改訂版 天文計算入門 長谷川一郎
著
恒星社 ISBN4-7699-0818-0
C0044 \2,500E
計算方法が具体的に書いてあり、例題が出ています。
機能毎にCの関数にしておけば、パソコンでもマイコンでもソースを共用できます。
極軸のずれを考慮した導入追尾は、P37の黄道座標と赤道座標の変換式を参考にしました。
座標変換の方法
________________________________________________
H8のソフト作り
パソコンソフト作成時に、天文用共通関数として外出しにした関数をそっくりそのまま(include)で使用できました。
複数の割り込み(多重割り込みと言うのか?)は始めて使用しましたが、試行錯誤の末モーター用クロックは、
途切れず出るようになりました(周波数カウンタで確認)。
SCIの出力は(割り込みは使用せず)、他の処理の割り込みが入るからタイミングが狂いエラーになると
思っていたましたが、意外に全くエラーになりませんでした。ハードで送り出しているからかもしれません。
これを使用して、任意のタイミングでパソコンにデータを送信できます。
モーター用クロックの作り方は、タイマーのコンペアマッチの機能を使用しました。
16Mhzを内臓の1/8のプリスケーラーで使用すると2Mhzになります。タイマーはのカウンタは16ビットだから
コンペアする値により約30.5hz以上のクロックが作成できます。(一回にON,OFFだとこの半分)
これより遅いクロックは、N倍して31hz以上にして、あとは自力(ソフト)で分周しました。
精度は、16ビットでも1/10000以上のあるので十分と思います。
●16ビットタイマー割り込み
経度モーター用クロック
緯度モーター用クロック
時計および導入追尾計算用のトリガ
赤外リモコン受信用
●割り込み
SCI受信用 パソコンからのデータ
IRQ1 赤外リモコン受信のスタート処理用
●I/Oポート(制御用のみ) こんな感じ
経度モーター用クロック 1個
(又は4個)
緯度モーター用クロック 1個
(又は4個)
経度モーター回転方向
1個 (又は0個)
緯度モーター回転方向
1個 (又は0個)
赤外リモコン入力
2個
電子ブザー 1個
LCD表示
6個
SCI(COMポート)用
2個
シリアルROM
2個
外付けRAMを接続している為に、I/Oポートを沢山使用しいますが、まだ少し余裕があります。
AD変換ポートも空いているので、バッテリーの電圧監視もできます。
●使用メモリ
35KB(プログラムサイズ)(天体データなしの状態)
使用しない関数がソースの中に結構あるので整理すれば減るけど32KB以下にはならないかもしれない。
コンパイラの指定でdoubleをfloat扱いにすると32KB以下になりました。短精度でOKならコンパクトで
安価な3664が使用できます。だた天体データは内部に持てませんが。
3048は残りROMが80KBとして、1天体20バイトとしても約4000個の天体データが保存できます。
●H8/3048の処理スピード
追尾時は、1サイクルで大筋下記を行います(導入も大体同じ)
1.現在時刻、観測置く緯度から地方恒星時計を進める。
2.追尾天体の時角を計算する。
3.X秒先の位置(望遠鏡座標)を求める。(座標変換)
4.方位角、高度を計算する(LCD表示の為)。(座標変換)
5.X秒先の位置にX秒間かけて移動する速度(パルスレート)を計算する。
6.現在の望遠鏡座標から赤経赤緯に変換し、パソコンへ送信する。(座標変換)
7.LCDへの表示をする。(位置、など)
この処理が1秒以内で計算できます(ROM化で)。座標変換にとても時間がかっています。
実数はすべてdoubleで計算しています。除算は、乗算の4倍時間がかかるので、気をつければ
計算スピードが結構違います(度、ラジアン変換など)。
doubleは、必要無いかもしれません。floatなら、ずっと早くなるはずです。又は数学関数の精度(収束の
繰り返し回数)を落とす手もあります。
計算サイクルが速くなれば、追尾時のパソコン表示がスムースになるんですがね。
● シリアルROM追加 (24LC256 Micrichip
)
256KbitのI2CタイプのEEPROMを接続しました。64KBをモニター配下で4秒弱で読み込むことができます。
今回は、これに天体データを入れる予定はないのですが、1Mbitにすれば少し遅いですが実用にはなりそうです。
今回は、観測地の緯度経度やギアの定数などを保存することにします。
☆ ● 赤外リモコン
赤外リモコンは、今まで割り込み処理で他の割り込みを抑止していたので、リモコンを押すたびにモーターのパルス
が遅れていました。これをタイマーを使用した受信方式に変更しました。これなら他の割り込み処理も同時処理する
ので、大丈夫なはずです。(未テスト) ただ常時タイマを動かすとCPU負荷が大きいので、割り込みのポートで赤外
リモコンの入力を検出してタイマをスタートし、データ入力後タイマを停止するようにしています。モニター配下では、割
り込み処理が渋滞しやすくなるようでモータースピードを上げるとハングしやすくなりました。ROM化すると問題は起き
ません。
●てこずった所・その他
(1)
AKI−H8(3048)用Cコンパイラは、数学ライブラリー(sin,cosなど)がほとんど削られている
のを知らず、リンクして始めて気がつきました(かなりショック)。仕方なく、数学関数(sin,cosなど)
を作る始末になりました。 作り方。
パソコンでテスト(bcc)した数学ライブラリが、H8で正しく動いたり、動かなかったりで困りました。
調べた結果、コンパイラ付属の倍精度の絶対値関数 fabsが正しくないことが分かりました。
fabsを自作して解決しました。
計算精度が悪い部分があり、ここを参考にしました。ほとんどの関数(ソース)があるようです。
http://oku.edu.mie-u.ac.jp/~okumura/algo/
「奥村晴彦」さん著 『C言語による最新アルゴリズム事典』 の公開ソース
(2) printfの変わりにrprintfを作りました。double、longなどをASCIIに変換してRS232Cポートに出し
てテストする為です。パソコンのbcc(Boland
C++ Compiler 5.5)でテストして、H8で動かすと
部分的に動きません。(1)と同時に発生した為、どちらが(両方が)ダメなのか分けがわかりません。
調べた結果、関数frexp()の結果がbccの結果と違うことが判明。 frexpを使用しないように変更して解決
しました。(コンパイラ付属の関数で生き残った数学関数に注意しましょう。)
(3)
割り込みは、試行錯誤でやったら動くようになりました。
2種類のパルスが、絶え間無く出るようになった時は、これで導入追尾ができるかもしれないと思いました。
ソース1 ソース2 (コメントはあまり信用しないで)
現在は、これとは別な方法(#pragma
interrupt(xxxxx) を使用する)に変えてあります。(2003.8.2)
ここの サンプルで B3_48_HEW と同じ作りです。これは4個のパルスを独立した周期で出力しています。
最低の周期は、30Hz程度ですがこれより低い周波数は、自力で割りこみ回数をカウントしてN回に1回
パルスを出すようにします。
(4) 赤外リモコンは、テレビ用カードリモコン(ジャンク)を使用しています。
受信素子は、秋月電子で購入しました。赤外リモコンのフォーマットは下記に参考資料があります。
参考 トラ技 1998年12月号 P355〜P362 これを参考にしました
トラ技 1996年11月号 P261〜P279 これは見ていません
(5) 今マイコンを選ぶとすれば(悩むところ。下記は3664F以外購入してません。無責任モードです。)
ここの内容は、かなり時代遅れになっています。(記2005.7)
その前にAKI−H8/3048Fについてです、位相係数モードを使用すれば、一般によくあるロータ・
リエンコーダのカウントアップ、カウントダウンがソフト処理なして出来ますが、残念ながら1chしか
実装されていません。
・AKI−H8/3052(25Mhz)のセットは、 gccの環境が付いてくるので数学ライブラリが使用できますが、
倍精度が使用できません。(H8のgcc)
ROMサイズは、512KBあるので天体データも十分度内蔵できます。増設RAMはありません。
ROMの最大書きこみ回数は、1000回と多い。
これだけでは書きこめないので、書きこみ基板を自作するか、3048用マザーを購入して改造が必要。
USBキット(キット−182)ならLCD(基板に配線済み?)と、SRAM(128KB)が付いているらしい
(パターン配線済み?)。
・AKI−H8/3664は秋月に専用コンパイラがありますが、数学ライブラリが削られています。
このコンパイラは、アドバンスモードのライブラリがないので注意が必要です。
日立が公開しているTiny用開発環境(無償)なら、数学ライブラリも付いています。
コンパクト、安価を狙うならこれ。
・秋月のH8−3069Fは、25Mhz、ROM512KB、とDRAMですが2MBの外付けRAMがついて、
安価(\4,300)。CygwinのCコンパイラも付いています。数学関数もOKですが、倍精度は使用できません。
秋月で64KB以上のRAMを持つものは、これしかありません。
下記hamayanさんのカスタマイズした日立モニター(3069用)が
、動くそうです。これで書きこみ制限100回を
気にせずに使用できます。
シリアルEEPROMも付いているかも。
ただgccの開発環境のセットアップがむずかしいらしいです。
☆ ・秋月初のSH2マイコンボードが発売されています。(\9950)SH2/7045F(28.64Mhz)、256KBの
ROM、1MBのSRAMが付いています。開発環境は、gccのようです。
hamayanさんがこれ対応のモニターを発表しました。動作確認もとれているようです。
ルネサステクノロジの評価版の開発環境も使用できます(3ヶ月期限)。3048の7倍以上速いかな。
SH2ならこれしかない。
・SHのSH7046F((株)アルファプロジェクト
)ならSHマイコンでは安価です。(\7800)
位相係数モードが2chあります。
開発環境は、トラ技2001.6付録のgccをインストールすれば、即使用できます。数学関数は、問題無
く使用可能なはずです。
・トラ技2002.03の付録のCD−ROMには、DOS版(旧版)のH8の開発環境(cコンパイラも)が付い
ています。数学関数(sinなど)は削られています。
・日立のH8とSHの評価版開発環境は、3ヶ月間試用できます。数学関数は、そろっています。
・(有)イエローソフトにもRAMつきのボードかいろいろあります。買いやすい値段。
SH7045の128KBのROM付き \12,800
など
開発環境は結構するので私はパス。日立のモニターとトラ技2001.6付録のgccは上手く使えるだろうか?
その他RAM付きのSHやH8のCPUボードが色々あります。
H8のgcc環境を使用したところ、doubleは4バイト(短精度)になります。gcc3.3でも同様らしいです。
これは仕様なのかも知れません。注意注意注意。
現状では、H8でdoubleを使用するには、gcc以外を使用するしかないようです。
SHのgcc環境は、doubleは8バイトで使用できます。(トラ技付録CD−ROM)
H8のgcc環境使用してみました。
H8開発環境の独善的選択ガイド
参考 日立のフリーソフトや評価版開発環境、モニタープログラムなど
http://www003.upp.so-net.ne.jp/hamayan/ hamayanさん H8、SHの開発環境
http://akizukidenshi.com/catalog/h8kit.html 秋月H8マイコン
http://watson8.com/ watson8さん 日立モニターとgcc(秋月)ノウハウ
トラ技は、公立図書館に所蔵してあるところもあります。私の所では、他の県内図書館のトラ技を最寄の
図書館経由で借りることができます。
(6)
CCD(QCAM)で追尾できるか、ロジックを試してみました。 ここです 2003.6.04
________________________________________________
●パソコン側ソフト(VC++で作成)
天体の位置データは、友田さん管理の掲示板で教えていただいたのを使用しました。
http://cedrica.webpipe.net/tc.html 609個の星と1732個の星以外のデータ
http://adac.mtk.nao.ac.jp/
FK5カタログの星データ(1670個)
http://sites.netscape.net/raycash715/dm600.htm これはまだ未使用
H8から、いつ来るか分からないメッセージ(COMポートで受信)をどうやって受信するか不安で
したが、フーコーテスターソフトの受信と同じAPI(ReadFile)で受信できました。
COMポートはオープン後、受信データはWindows側でバッファに受信データが貯めてあるので、
データは失われない事が分かりました。 タイマーで定期的に読みにいけばOKです。
H8側がよく分からない場合は、H8でrprintf(上記)を使用しPCに送り、PCで受信してログファイルに
書き出しています。
H8へのデータ送信は、APIのWriteFileを使用しています。
太陽の黄経の計算(赤道直交座標)と彗星の位置推算は、上記 「天文計算入門」を参考にしました。
惑星、太陽、月の位置推算は、真木さん公開のJava
Scriput を参考(丸写しコンバート)にしました。
http://enjoy.pial.jp/~maki/
________________________________________________