赤道儀自動ガイドの自作(後編)

−高精度モータドライブの実現に向けて−

福井 雅之

 

1.はじめに

前編では時間切れ未完成だったため、主にハードウェアを中心とした製作記とし、ステッピングモータ&ギアの望遠鏡への取り付けとそのコントローラ製作を写真・回路図を交えて紹介しました。

http://www.d1.dion.ne.jp/~ueharas/seiten/gt30/sekidogi.htm

前編で書き忘れたのですが、今回使用したモータ&ギアを購入したときのミザール本社訪問記を銀河鉄道第21号に掲載しております。ご興味がございましたらご覧ください。

http://www.d1.dion.ne.jp/~ueharas/seiten/gt21/mizar.htm

後編では、前編で製作したモータドライブを駆動するためのソフトウェア開発と完成後の評価について紹介し、完結編とさせていただきます。

なお前編公開後、TA7291SGのデータシートを読み返していたらVrefにプルアップ抵抗を入れるよう指示されているのを発見しましたので回路図を修正しました。あわせて前編30号の回路図がごちゃごちゃしていたので、余計な部分を省いて図1に再掲載します。

 

              図1.全回路図(修正版)

 

2.パルス数の計算

ミザールから購入したステッピングモータは(株)三龍社のP43-2130(12)で、2相2励磁(バイポーラ2相励磁)で駆動させるタイプです。このモータのステップ角度は15°ですので24ステップで1回転します。

同時購入したギアユニットは5段で減速させる構造で総ギア比は1:500でした。これにギアユニットから赤道儀への接続ギア比1:2.5と赤道儀自体のウォームギア比1:144、さらに上述しました24ステップ/回転を全て含めると1:4,320,000となります。これは432万ステップで赤道儀がちょうど1回転することを意味します。

太陽は1日で同じ位置に戻りますので、これを追尾する場合、1日で赤道儀を1回転させる必要があります。したがって432万ステップ/24時間の駆動パルスを与えればよいことになります。これは1秒に換算するとちょうど50ステップとなります。

太陽に比べ、恒星と月の追尾は計算がちょっと複雑です。恒星は太陽より若干早く進み、月は遅れます。恒星の太陽とのずれは1年でちょうど1周分=360°となりこのずれを考慮しなければなりません。月はさらに複雑で、地球を周回する回転と地球を通じて太陽を周回する回転の両方を考慮する必要があります。

天文年鑑のデータを引用し、赤道儀1回転の時間を次のとおり計算しました。

太陽:86,400.00秒/回転

恒星:86,164.09秒/回転…天文年鑑の1恒星日を元に計算

月 :89,428.33秒/回転…天文年鑑の1朔望月を元に計算

この数値から、モータ1ステップの周期を導きます(表1)。

 

赤道儀
回転時間
(sec/回転)

モータ速度
(step/sec)

ステップ周期
(ms)

太陽

86,400.00

50.00000

20.00000

恒星

86,164.09

50.13690

19.94539

89,428.33

48.30684

20.70100

4,320,000ステップ/回転で計算

1.モータドライブのステップ周期計算

この表1のステップ周期毎にタイマ割り込みを発生させてステッピングモータの波形ステップを進めれば、正確な速度で追尾できます。

実際には“倍速ボタン”を設けたため、この1/2の周期でタイマ割り込みを発生させ、等速は2分周で動作させています。

 

3.モータ駆動パルスの生成
前項でも述べましたが、今回のステッピングモータは2相2励磁(バイポーラ2相励磁)で駆動させなければなりません。2相2励磁の特徴を三龍社のカタログから引用すると、「2相に巻かれたステーターコイルに電流を反転させつつ常に2相とも励磁する方式で、コイルの利用率が高く、同じ消費電力の場合4相2励磁と比較して50%前後のトルクアップができ、励磁方式として最も優れています」と書かれています。反面、コイル流す電流を正逆反転させる必要からどうしても回路が複雑になりますが、前号紹介したドライバIC TA7291SG(東芝)を使用することでこれを解決しています。

2相2励磁(バイポーラ2相励磁)の波形>

2つのコイルに90°位相をずらせた波形を加えます。
プログラムではφ1φ2波形反転(+→−または−→+)のタイミングでタイマ割り込みを発生させ、この波形にあわせた電圧をドライバICから出力させます。

ドライバIC TA7291SGのデータシート指示にしたがい、反転時に+側−側トランジスタの同時ONを避けるため約100μSの両トランジスタOFFタイミングを設けています。

  

        図2.ステッピングモータに加える波形

完成後に実際の波形をオシロスコープで観測してみました(写真1、写真2)。

正逆切替え時の両トランジスタOFFの状態(約100μS)がわかりますでしょうか?

抵抗負荷の場合はこの間が0Vですが、モータ負荷の場合はコイルの逆起電力の影響で波形が逆方向に振られているのがわかります。電源電圧を少し超えたところで止まっているのはドライブICに内蔵されている逆起電力防止ダイオードの働きによるものです。

 

写真1.実際の波形1(抵抗負荷)      写真2.実際の波形2(モータ負荷)

 

4.ソフトウェアのプログラミング

1チップマイコンにPICシリーズPIC16F84Aを使いましたので、この開発環境を用意する必要があります。マイクロチップテクノロジー社ホームページから開発ツールMPLABをダウンロード・インストールしてこれを使います。プログラム開発はMPLAB内蔵のアセンブラで行いました。

メインルーチンは初期設定のみとし、それ以降の動作は全てタイマ割り込みルーチンのなかでプログラミングしています。

<タイマ割り込みでの処理>
 @モードSW(恒星・太陽・月)、速度SW(停止・倍速)の判定
 A1ステップ周期のタイミング生成(波形切替タイミング)
 Bステッピングモータへの波形生成および出力
 C波形反転時のトランジスタ同時ON回避処理(100μS OFF)
 DモードLED点滅処理
図3にフローチャートを示します。ソースプログラムは最後に添付しておきます。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


              図3.全体フローチャート

 

5.完成後の評価
前編で記載した5つの基本仕様を実現できたのかを項目毎に確認・評価します。

@電源は単3充電電池または単3乾電池8本とする

これは前号のハード編でも紹介しましたとおり単3×8本の電池ホルダーを内蔵させており仕様どおりです。

A12時間程度は連続駆動し続けること

残念ながらこれは実現できませんでした。消費電流を実測すると208mAでしたので、使用した三洋のエネループ(2000mAh)では9時間37分で電池が消耗する計算になります。満充電状態からモータを連続回転・放置させましたら、偶然ぴったり9時間37分でモータが停止しました。

9時間以上ということはほぼ1晩大丈夫ですし、予備の電池を1セット持っていけば問題ないので目標未達成ですがOKとします。単3電池ならコンビニでも買えますし…

Bできれば時計並みの精度を実現させること

今回使った京セラの12.8MHz超高精度クリスタルモジュールを無調整のまま周波数カウンタで測定すると、その名のとおり高精度であることがわかりました(写真3)。


    写真3.クリスタルモジュールの精度

この8桁精度が維持できれば半年で約1秒の誤差となりますが、実際にはこれにソフトウェアの誤差を含めなければなりません。タイマ割り込みだけではどうしても精度を追い込めないため、開発環境MPLABシミュレーションモードを駆使し、繰り返しループや最後はNOPの挿入で微調整しました。

その結果、実測(1時間のタイマ割込み数から誤差計算)で1日あたりの誤差が1秒以内に収まっていることが確認できました(表2)。

 

ステップ数
(step/時間)

1日あたりの
誤差(sec/日)

<測定方法>

@入力ON期間のタイマ割込み回数をカウントし、その結果をEEPROMに保存するようPICプログラムを追加。

Aバルブ撮影用のタイマコントローラ

TC-80N3aから1時間のON信号を入力。
B測定後EEPROMのデータを読み出し、その

カウント数から誤差計算する。

太陽

360,001

-0.22

恒星

360,983

+0.64

347,807

+0.50

2:ステッピングモータ制御精度測定

基準にしたTC-80N3aの精度が+4.3秒/日と思ったより悪かったので、表2のステップ数はその分の補正を加えています。最終精度が1日あたり1秒以下に納まりましたので仕様の“時計並みの精度”は実現できたと判断します。

    ただ、これよりも大気差・極軸合わせの精度・望遠鏡重みからくる歪みの影響のほうが大きいと考えており、こちらは今後の調査課題とさせていただきます。

C駆動速度は3段階(恒星・太陽・月)切替え可能とすること

D微調整用に停止・倍速ボタンを設けること

この2つはハードスペックですので実現できています。テストでも問題なく動作していることを確認しています。

 

6.おわりに
52歳にして久しぶりに回路設計・製作・プログラムに挑戦しました。若いころのようにスムーズにはいきませんが、何とか動かすことができました。ソフト開発は頭のトレーニングにはよさそうですので機会があればまたチャレンジしたいと思っています。天文関係で何か製作意欲が出てきましたら銀河鉄道で紹介させていただきます。

今回、試し撮りでなかなかピントが合わせられず、近眼・老眼・乱視の3点セットの自分の限界を感じました。マニュアル直焦点でもオートフォーカスが利くと大変ありがたいのですがこの実現は難しそうですね。

最後に今回製作したモータ・コントローラと望遠鏡に搭載したところをご紹介します。後ろに見えているミザールCX-150(15cm反射)もこの赤道儀に搭載できるように改造しています。

こちらの実力もそのうちご紹介させていただきます。ではまた。

 

    写真4:赤道儀AR-1+ギア    写真5:モータドライブコントローラ

  

写真6:モータドライブ+120SL(奥に見えるのがミザールCX-150)


<付録1:写真がよくなった??(試し撮り報告)>
せっかく自作したモータドライブ自動ガイドです。前編でお約束しましたとおり試し撮りを行いましたのでその成果報告させていただきます。

撮影地は自宅から車で約1時間少々の伊豆半島中央に位置する天城高原。天体写真の撮影地としても知られていたので今回初めて行ってみましたが、伊東の街明かりの影響か東の空が明るく期待はずれでした。曇りがちの天候の中、それでも何枚か撮影できましたのでそのうちの3枚を掲載します。結構風が強くせっかくのガイドが安定していないのがちょっぴり残念です。ただ、ガイドスコープを常に見ながら微動ハンドルを回し続けたこれまでと比べると格段に楽になったのは事実です。深夜の帰り道、道路脇から十数頭の鹿のお見送りを受けました。

天気のいい日、もっと条件の良い朝霧高原か井川湖近辺で再チャレンジします。三岳山の星は本当にきれいでしたね。福知山がうらやましいです。

以下3点の写真全ての撮影データが同じですので最初にまとめて記載しておきます。

撮影日/場所

2009年11月21日(土)/静岡県天城高原駐車場

望遠鏡

ミザール120-SL(D=120mm、F=720mm)

カメラ

キヤノン EOS kiss Digital X ボディ

撮影方式

直焦点

ISO感度

800

露出時間

10分、ノイズ除去機能ON (3枚とも)

補正

空が思ったより明るかったので階調補正を加えています。

Presto! ImageFolio 4 で少し黒を引き締めました。

デジタルはこんなことが簡単にできるのがいいですね。



   

写真7.M45プレアデス星団
おなじみのM45プレアデス星団(すばる)です。天城高原に到着したときから目立っていたのですぐ望遠鏡を向けましたが、これは帰宅する直前に撮り直したものです。拡大するとわかるのですが風の影響ですべての星が2重星になってしまいました。特徴である青色のガスがもう少しはっきりするくらい露出時間をかけるとよかったと思います。

 

写真8.M31アンドロメダ銀河 (編集者注:今号表紙
自動ガイドが完成したら是非撮りたかった被写体です。M45同様もう少し露出時間をかけると迫力が出たと思います。お隣の銀河とはいえ230万光年の光芒はいつ見ても神秘的です。720mm直焦点では画面に入りきりませんので望遠レンズの方がよかったかも。

 




写真9.M42オリオン大星雲
有名なオリオンの大星雲です。10分露出でこれだけ写りました。光害の影響で全体が白っぽかったので強めに補正をかけています。赤色がもう少し出れば申し分ないのですが。


<付録2:全プログラムソースリスト>

久しぶりのアセンブラ挑戦です。冗長な部分がありますことご容赦ください。

 

;********************************************

;  This program is AUTO GUIDE CONTROLLER

;                         for PIC16F84

;********************************************

 

         LIST     P=PIC16F84A,R=DEC

 

         INCLUDE  "P16F84A.INC"

 

         __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

 

;**********************************

; 変数のレジスターへの割り当て設定

;**********************************

 

;<レジスタ>

ST_CNT   EQU      0DH                ;状態カウンタ(割り込み毎にC−UP)

LED_CNT  EQU      0EH                ;LEDカウンタ(LED出力ステータス)

T1       EQU      0FH                ;補助タイマカウンタ(補正タイマ)

W_CNT    EQU      10H                ;波形状態カウンタ(出力ステータス)

OUT_A    EQU      11H                ;ポートAバッファ(波形出力)

 

;<I/OポートA>

U3_1     EQU      0                  ;波形出力

U2_1     EQU      1                  ;波形出力

U3_2     EQU      2                  ;波形出力

U2_2     EQU      3                  ;波形出力

LED      EQU      4                  ;LED出力

 

;<I/OポートB>

DS_MOON  EQU      0                  ;ディップスイッチ−月

DS_STAR  EQU      1                  ;ディップスイッチ−星

PB_FAST  EQU      2                  ;押しボタンスイッチ−倍速

PB_STOP  EQU      3                  ;押しボタンスイッチ−停止

 

;<波形出力データ>

OUT_0    EQU      0011B

OUT_1    EQU      0010B

OUT_2    EQU      0110B

OUT_3    EQU      0100B

OUT_4    EQU      1100B

OUT_5    EQU      1000B

OUT_6    EQU      1001B

OUT_7    EQU      0001B

 

;**********************************

; タイマ・カウンタ定数

;**********************************

 

TM_SUN   EQU      132                ;タイマ割り込みセット(太陽)

TM_STAR  EQU      132                ;タイマ割り込みセット(星)

TM_MOON  EQU      127                ;タイマ割り込みセット(月)

CN_SUN   EQU      80                 ;補正カウンタセット(太陽)

CN_STAR  EQU      52                 ;補正カウンタセット(星)

CN_MOON  EQU      27                 ;補正カウンタセット(月)

CN100US  EQU      80                 ;100usオフカウンタ

 

 

;**********************************

; プログラム開始

;**********************************

 

         ORG      0                  ;メインプログラム開始番地へジャンプ

         GOTO     MAIN

         ORG      4                  ;割り込み開始番地へジャンプ

         GOTO     T_INT

 

;**********************************

; メインプログラム

;**********************************

 

MAIN                                 ;ここから初期化部

 

;<ページ1のレジスタ設定>

         BCF      STATUS,RP1

         BSF      STATUS,RP0                  ;ページ1のレジスタ設定

         CLRF     TRISA              ;ポートAを全て出力モード

         MOVLW    11111111B          ;ポートBを全て入力モード

         MOVWF    TRISB              ;    〃

         MOVLW    00000111B          ;OPTIONレジスタ初期設定

         MOVWF    OPTION_REG                  ;    〃

 

;<ページ0のレジスタ設定>

         BCF      STATUS,RP0                  ;ページ0のレジスタ設定

         MOVLW    00010000B

         MOVWF    PORTA              ;ポートA初期値出力

         CLRF     INTCON             ;全割り込み不許可

 

;<レジスタ初期状態設定>

         CLRF     ST_CNT             ;状態カウンタリセット      

         CLRF     LED_CNT            ;LEDカウンタリセット    

         MOVLW    8                  ;波形状態カウンタセット

         MOVWF    W_CNT              ;    〃

         CLRF     OUT_A              ;ポートAバッファ初期値設定

         MOVLW    TM_SUN             ;タイマ割り込み初期値時間セット

         MOVWF    TMR0               ;    〃

         MOVLW    CN_SUN             ;補助タイマカウンタ初期値セット

         MOVWF    T1                 ;    

 

;<割り込み許可>

         BSF      INTCON,T0IE        ;タイマ割り込み許可

         BSF      INTCON,GIE                  ;タイマ割り込み許可

 

;<メインプログラム停止>

LOOP1

         GOTO     LOOP1              ;メイン処理はここで停止

 

;**********************************

; 割り込みプログラム

;**********************************

 

;<タイマ割り込み処理ルーチン>

T_INT

         BCF      INTCON,T0IF        ;タイマ割り込みフラグリセット

         BTFSS    PORTB,DS_STAR      ;DSW=星?

         GOTO     AJ_STAR            ;星の時間補正へ

         BTFSS    PORTB,DS_MOON      ;DSW=月?

         GOTO     AJ_MOON            ;月の時間補正

 

;<太陽の時間補正>

AJ_SUN

         MOVLW    CN_SUN

         MOVWF    T1

SUN_LOOP

         DECFSZ   T1,F

         GOTO     SUN_LOOP          ;時間補正3サイクルループ

         NOP

         NOP

         MOVLW    TM_SUN             ;タイマ割り込み太陽初期値時間セット

         MOVWF    TMR0               ;    〃

         ;LED点灯処理

         BTFSS    LED_CNT,3

         GOTO     SUN_OFF

         BCF      PORTA,LED          ;LED ON

         GOTO     PB_CHK

SUN_OFF

         BSF      PORTA,LED          ;LED OFF

         GOTO     PB_CHK

 

;<星の時間補正>

AJ_STAR

         MOVLW    CN_STAR

         MOVWF    T1

STAR_LOOP

         DECFSZ   T1,F

         GOTO     STAR_LOOP          ;時間補正3サイクルループ

         MOVLW    TM_STAR            ;タイマ割り込み星初期値時間セット

         MOVWF    TMR0               ;    〃

         ;LED点灯処理

         MOVF     LED_CNT,W

         ANDLW    00111000B

         BTFSS    STATUS,Z

         GOTO     STAR_OFF

         BTFSS    LED_CNT,2

         GOTO     STAR_OFF

         BCF      PORTA,LED          ;LED ON

         GOTO     PB_CHK

STAR_OFF

         BSF      PORTA,LED          ;LED OFF

         GOTO     PB_CHK

 

;<月の時間補正>

AJ_MOON

         MOVLW    CN_MOON

         MOVWF    T1

MOON_LOOP

         DECFSZ   T1,F

         GOTO     MOON_LOOP          ;時間補正3サイクルループ

         NOP

         NOP

         MOVLW    TM_MOON           ;タイマ割り込み月初期値時間セット

         MOVWF    TMR0               ;    〃

         ;LED点灯処理

         MOVF     LED_CNT,W

         ANDLW    00110000B

         BTFSS    STATUS,Z

         GOTO     MOON_OFF

         BTFSS    LED_CNT,2

         GOTO     MOON_OFF

         BCF      PORTA,LED          ;LED ON

         GOTO     PB_CHK

MOON_OFF

         BSF      PORTA,LED          ;LED OFF

         GOTO     PB_CHK

 

;<PBチェック>

PB_CHK

         INCF     ST_CNT,F          ;状態カウンタインクリメント

         BTFSS    PORTB,PB_STOP      ;PB停止?

         GOTO     LED_OFF            ;LEDオフ

         BTFSS    PORTB,PB_FAST      ;PB倍速?

         GOTO     WAVE1              ;波形生成

         BTFSC    ST_CNT,0          ;偶数?

         GOTO     WAVE1              ;波形生成

         GOTO     END_INT            ;リターン

 

;<波形生成>

WAVE1

         INCF     LED_CNT,F          ;LEDカウンタインクリメント

         DECF     W_CNT,F

         MOVF     W_CNT,W

         CALL     GET_WAVE

         MOVWF    OUT_A

         MOVF     PORTA,W

         ANDLW    00010000B

         IORWF    OUT_A,W

         MOVWF    PORTA

         MOVF     W_CNT,F            ;波形状態カウンタ=0?

         BTFSC    STATUS,Z

         GOTO     W_DFT

 

T_100US

         MOVLW    CN100US

         MOVWF    T1

T100_LOOP

         NOP

         DECFSZ   T1,F

         GOTO     T100_LOOP          ;100us遅延

WAVE2

         DECF     W_CNT,F

         MOVF     W_CNT,W

         CALL     GET_WAVE

         MOVWF    OUT_A

         MOVF     PORTA,W

         ANDLW    00010000B

         IORWF    OUT_A,W

         MOVWF    PORTA

         MOVF     W_CNT,F            ;波形状態カウンタ=0?

         BTFSS    STATUS,Z

         GOTO     END_INT

W_DFT

         MOVLW    8                  ;波形状態カウンタセット

         MOVWF    W_CNT              ;    〃

         GOTO     END_INT

 

;<LEDカウンタリセット>

LED_OFF

         CLRF     LED_CNT            ;LEDカウンタリセット    

 

;<メイン復帰>

END_INT

         RETFIE

 

;<波形生成データサブルーチン>

GET_WAVE

         ANDLW    0FH                ;下位4ビットのみ取り出し

         ADDWF    PCL,F              ;PCレジスタに数字を加えてジャンプ

         RETLW    OUT_0

         RETLW    OUT_1

         RETLW    OUT_2

         RETLW    OUT_3

         RETLW    OUT_4

         RETLW    OUT_5

         RETLW    OUT_6

         RETLW    OUT_7

 

;<リストの終わり>

         END


今号表紙に戻る