※2011年12月10日月食の写真はページの一番下にあります

Vixen 天体望遠鏡 ポラリス SA-70S 電動化 2011年5月

きっかけ

tetraf_and_keypoints

picf1705_DAC

jpg2csv

csv2bmp

kp12_and_tri


30年前に妻使用の天体望遠鏡を実家から持ってきた。
しっかりした天体望遠鏡の赤道儀。
しかし当時は経緯台としてしか使っていなかったとのこと。

30年前の代物とはいえ保管状態もよく、もの自体がよい品でモータドライブ用の取り付けねじがある。
当時のモータでMD1というオプションパーツがあり、これが現存すれば取り付け可能らしいが、さすがに販売は終了しているし中古稼動品も見つからない。

天体写真を撮るなら赤道儀+自動追尾!これはもう自分で追尾装置を作るしかない。

思い出したのが半年ほど前に天文ガイドに小型のステッピングモータを使ったポタ赤を作る企画。
この企画にあったモータと回路基板の頒布はすでに終わってしまっていたが、基板写真を見て使っている部品が大体把握できたのでなんとかなりそうと考えた。
最終的な目標は赤道儀電動化によって星を自動追尾すること。
回転数検知とフィードバック式では難しそうなので、ステッピングモータで実現することに決めた。


しかしそうは言っても知らないことばかり

・そもそもステッピングモータとは何か?
・どんな回路が必要なのか?
・天体観望に適した時間を駆動するための電源・電圧は?
・取り付けられるギアは?

などなど。
自分でポータブル赤道儀を作っている人のホームページはとても役に立った。

ステッピングモータとは何か


永久磁石を軸に、複数電磁石(コイル)を周りに配置したモータである。
そして、コイルを適切なタイミングと順序で磁化すれば永久磁石である軸が回転する。

ということがわかった。

どんな回路が必要なのか


ステッピングモータは電池をつないだだけでは動かない。
複数あるコイル端子に順番に電流を流せばよいのだから、プログラムループで電圧を制御すればよい。

時間で決められた幅の電圧パルスをパラレルでステッピングモータに送る回路を作ればよいことがわかる。
PICを使えばこれらは簡単に解決できるが、モータはPICの流せる電流では到底動かせないのでなんらかの増幅が必要。
調べるうちにモータ制御は回路の単純さや発熱の点で、トランジスタよりFETが定番だとわかった。

回路を含め全体としては、電源-PIC-FET-モータ、のようになればよいことがわかった。

電源・電圧は

天体観望側からみた要件は、冬場なら10時間程度の持続時間。
そして持ち運びが便利な重量が軽いもの。
ということで充電式乾電池に決める。
するとステッピングモータは5V〜12V程度で動作、赤道儀につけるために小型、自作なので安価であることが条件となった。

取り付けられるギアは?部品調達、ほか

ステッピングモータとウォームホイール・ウォームギア


この赤道儀にモータを設置できるスペースは3cm×5cm程度。
トルクもそこそこ必要で、ネットでいろいろ探したが結局、天文ガイドで紹介されていたKP4P15Gに落ち着いた。
選定の理由は、
・モータ設置スペースから極軸微動軸までが遠いので、KP4P15Gの軸が偏心していること。
・また、中古品が多くあり安価だったこと、
・そして一番は、減速比1/60だったこと。
もし天文ガイドから調達するとなっていたら減速比1/600のものしかなく製作は不可能だった。


この赤道儀の極軸微動軸は1回転で時角10分進む。
極軸微動軸につけた歯車の歯数は50枚。
1分でウォームギアを5回転させると10分で歯が50枚進みちょうど一回転する。

KP4P15G-470は15°/stepなので24パルスで1回転する。
120pps(パルス毎秒)で秒間5回まわり、減速比1/60により1分間で5回転させることができる。
これはモータのカタログ上一番トルクが出そうな100pps前後とも一致する。

実際に通販(オリジナルマインドさん)で取り寄せたところ嬉しい誤算もあった。

日本サーボ(メーカ)カタログにはモータ軸の直径が3mmと記述してあり、通販オリジナルマインドでは当初は詳しい資料なし(配線図なし、軸径不明)。
ウォームギアの内径が5mmだったのでスペーサが必要だと思っていた。
ウォームギア内径3mmがあればそれを購入したかも知れないが、微動軸からモータベースまで届かせるためウォームギアの選択肢はなかった。

しかし届いたモータの軸は5mm。
中古でカタログとは違うモータが届き、それがぴったりだった。

アルミのアングル材


モータ取り付けベース用。微動軸から遠いのでできるだけ薄く必要十分に強固で3cm×10cmを真ん中で90度に曲げたものが欲しかった。
だが実際はそういったものは存在しなかった。
大きくなると板厚が厚くなり薄くすると小さくなり、カスタマイズ注文できるサイトでもできない。

結局ドイトでアルミのアングル材を購入し穴あけすることに。

ここまで。赤道儀にウォームホィール、ウォームギア、アルミアングル材台座、ステッピングモータを取り付けたところ。



別の角度から。



電子回路図を書いてみる

上に書いたように、電源−PIC−FET−モータ、と一直線に並んだ簡単な回路、部品調達と同時に設計


電子回路周りの調達

ステッピングモータはパルス生成用ICや大電流用のスイッチングICが必須。
さらに追尾精度のため水晶振動子も必要。

− 電源IC:


モータは12Vだが、PICには安定した4.7Vを供給するため電源ICは必須。
手持ちのリニアテクノロジー製、LT3080を選択。
LT3080は6mm角ほどの表面実装、抵抗一本で供給電圧が設定できる省スペース貢献大のIC。
そして最大1.1A供給可能な優れもの。
今回は相手がPICなんで数mA、運転ランプ用のLEDの6mAのほうが電流は食うほど。
よく考えるとかなりオーバースペックだが動くはずなので問題なし。

− PIC(Peripheral Interface Controller: プログラム可能な制御用IC):

モータ用4出力ポートと運転ランプ1出力ポート、制御用(正転、逆転)に1入力ポート、外部クロック入力2ポートが必須。
ちょっと足は余るが手持ちのPICからPIC16F648Aを選択。


− パワーMOSFETアレイ:

PICからのパルス出力をモータ用大電流にする。アレイになっていると省スペース。
しきい電圧が0.8〜2Vで4回路入り、最大ドレイン-ソース間電圧100V、3Aの東芝製、MP4209を選択、購入。

− 水晶振動子:

PIC外部から正確なクロックを供給する。手持ちの3276.8KHzを選択。

− 電池周り:

単三8本で12Vにする電池ボックス、電池ボックスにつけるスナップ端子、USBケーブル、USB端子、を購入。

− その他:

・LED(望遠鏡につけるので暗いほうがよい)
・LED用の抵抗
・電源周りの電解コンデンサ
・水晶振動子用のセラミックコンデンサ
・運転制御用ボタンスイッチなど。

この辺はすべて手持ちの部品で調達。

回路基板の設計と穴あけ

3x5cmに収まるように設計図を引いて、ホールリストを携えて知り合いの会社の工場長に依頼。
リストの座標どおりに80個近い穴あけをやってもらう。
最後はお疲れの様子でした。いつも感謝しています。

回路基板上のパターン切り

小学校時代の銅版画を思い出して...6時間ほどかかり腕がしびれた。 感光基板+エッチングセットがあればなぁ。



部品の半田付けと組み立て

小さい部品はなかったので楽だった。

半田付けが終了した電子回路

およそ3x5cmに収まっている。
一番上にある黒い板上の部品がMOSFETアレイ。
その下の18pinのICがPIC16F648A。
その下の銀色の缶が水晶振動子。
あとはこまごま、電源用アルミ電解コンデンサ、ソケット、ボタン、抵抗など。

基板裏面

表面実装タイプの電源IC、LT3080。これでPIC用4.7Vを生成。

アルミアングル材に取り付けたところ



ここまでかかった購入費用


ステッピングモータがオリジナルマインドさん中古で1980円。

協育歯車のウォームホイール・ギアが楽天で約3300円。

アングル材がドイトで500円。

MOSFETがRSコンポーネンツで約400円

電池周りがマルツパーツ館で約1000円

いろんなところからネット購入したので送料・手数料が約3000円

合計約1万円。



PIC用プログラム

さー、ハードウェアはすべて揃った。
あとはPIC用プログラムを書いて動かすだけ。

■まずは仕様を決める。

といっても、割り込みがかかったら出力ポートへのパターンを切り替えるだけの単純なもの。
出力パターンはそのままMOSFETのゲートへ直結。
このパターンの切り替え時間だけは精度よくしなければならないので慎重に計算する。

アバウトに言えば120pps(pulse-per-second)で運転すれば自動追尾完成。
この場合、86400秒(=24x60x60)で360度赤道儀が回転する。
ところが、実際星空が一回転するのにかかる時間は、一恒星日の86164.1秒。
この約4分短い時間で360度回さないと星についていけない。
そのため、120.328535ppsくらいで運転することになるが、他にキングスレートというものがあるらしい。

天文ガイドの記事によると、
キングスレートは360度を86188.09秒で割って恒星日86164.1秒で割るより少し遅く運転する方法。
大気による影響で地平線方向は天頂付近より遅く星が動くらしく、その補正を入れたもの。
ということは天頂付近で追尾する場合は一恒星日の方を採用すべきなのだろう。
キングスレートでは、120.295043ppsとなり恒星日運転より若干遅い。

プログラムはキングスレートに対応して書くことにした。


■割り込みのしかた

水晶振動子をタイマー1として使い、決められたインストラクション数で割り込みをかける。
1万分の1のオーダーで誤差があるので12回割り込んだら次の割り込み1回は1減じて補正したインストラクション数に設定する。
この方法では15時間で1パルス(=8.3ミリ秒)遅れる計算。

■運転ボタンの仕様

運転ボタンを押すたびに、停止→正転→停止→逆転(南天用)→停止というようにロータリー的動作にする。
こうすることでボタンがひとつで済む。

■ここでハマりました

動作確認で思うように動かなかった原因はボタン押しによるバウンス。
押しボタンスイッチを一回押しているつもりでも4MHzの世界では何百回もはずんで接点が閉じたり離れたりしてる。

適切な待ちループが必須なので、タイマー0を使った。

■ソースコード公開

要約
・初期化、Interrupt-on-pin-changeなどの設定(運転ボタン入力の受付)
・タイマー値設定後、割り込み可、タイマースタート
・タイマー満了で出力パターン更新、タイマー値再設定(13回に一回うるう回があり値が異なる)
・メインでは何もせずグルグル
motor_krate.asm
;********************************
; PIC16F648A
; 2011-05-13
; Author: Naoki
;********************************
	LIST	P=pic16f648a
	INCLUDE	p16f648a.inc
	__CONFIG	_BOREN_OFF & _CP_OFF & _WDT_OFF & _LVP_OFF & _MCLRE_OFF & _XT_OSC & _PWRTE_ON

;***** Variables ****************
	CONSTANT	T1AL = 0x74, T1AH = 0xe5
	CONSTANT	T1LL = 0x76, T1LH = 0xe5
	CONSTANT	LEAPC = 0x0D

	CBLOCK	20h
	lcount
	wSave
	sSave
	cnt	
	stat
	ENDC
s_stat	EQU 	0	;motor stat
s_dire	EQU	1	;direction

;********* Reset Vectorl ********
	ORG	H'0000'
	GOTO	MAIN
;********* Interrupt Vector *****
	ORG	H'0004'
	BTFSC	PIR1,TMR1IF	;timer1 interrupt
	GOTO	t1intr		; occurred
	BTFSC	INTCON,RBIF	;portB Int-on-chg
	GOTO	keyService
	BCF	INTCON,T0IE	;timer0 disable interrupt
	RETFIE

;********************************
;Timer1 expired
;********************************
t1intr
	MOVWF	wSave		;save Wreg
	SWAPF	STATUS,W	;
	MOVWF	sSave		;save STATUS

	BCF	PIR1,TMR1IF	;clear TMR1 Interrupt Flag
	DECFSZ	lcount,F
	GOTO	t1intr_1
	MOVLW	LEAPC
	MOVWF	lcount
	MOVLW	T1LL		;leap timer1 value Low
	MOVWF	TMR1L		;
	MOVLW	T1LH		;leap timer1 value High
	MOVWF	TMR1H		;
	GOTO	t1intr_2
	
t1intr_1
	MOVLW	T1AL		;ave timer1 value Low
	MOVWF	TMR1L		;
	MOVLW	T1AH		;ave timer1 value High
	MOVWF	TMR1H		;

t1intr_2
	CALL	step_control
	SWAPF	sSave,W		;
	MOVWF	STATUS		;load STATUS
	SWAPF	wSave,F		;
	SWAPF	wSave,W		;load Wreg

	RETFIE

;********************************
;PortB Interrupt-on-change
;********************************
keyService
	MOVWF	wSave		;save Wreg
	SWAPF	STATUS,W	;
	MOVWF	sSave		;save STATUS

	BCF	INTCON,RBIE	;disable PortB interrupt
	COMF	PORTB,W		;read PortB
	BCF	INTCON,RBIF	;Clear PortB interrupt flag
	CALL	delay16		;do de-bounce

	CALL	sw1_on		;motor control

keyRelease
	CALL	delay16		;de-bounce
	COMF	PORTB,W		;read PortB Again
	ANDLW	B'00100000'	;
	BTFSC	STATUS,Z	;key still pressed?
	GOTO	key_end		;no key-released
	GOTO	keyRelease

key_end
	BCF	INTCON,RBIF	;clear PortB interrupt flag
	BSF	INTCON,RBIE	;enable PortB interrupt
	SWAPF	sSave,W		;
	MOVWF	STATUS		;load STATUS
	SWAPF	wSave,F		;
	SWAPF	wSave,W		;load Wreg

	RETFIE

;********************************
;Initialize PortA/B, Timer0, Timer1
;********************************
init
	CLRF	PORTA		;initialize PortA
	CLRF	PORTB		;initialize PortB
	banksel	TRISA		;select bank1
	MOVLW	B'11100000'	;RB0-4:output,RB5-7:input
	MOVWF	TRISB		;
	MOVLW	0x00		;prescaler:256, PortB Pull-Up enable
	MOVWF	OPTION_REG	;
	CLRF	PIE1		;disable Perif interrupt
	BSF	PCON,OSCF	;Oscillator 4MHz
	banksel TMR0		;select bank0
	CLRF	INTCON		;disable all interrupts
	CLRF	T1CON		;stop timer1
	CLRF	PIR1		;timer1 interrupt flag off

	MOVLW	T1AL		;ave timer1 value Low
	MOVWF	TMR1L		;
	MOVLW	T1AH		;ave timer1 value High
	MOVWF	TMR1H		;
	MOVLW	LEAPC		;leap counter
	MOVWF	lcount		;
	CLRF	cnt
	CLRF	stat

	banksel	PIE1
	BSF	PIE1,TMR1IE	;timer1 interrupt enable
	banksel	INTCON
	BCF	INTCON,RBIF	;portB clear flag
	BSF	INTCON,RBIE	;portB enable interrupt
	BSF	INTCON,PEIE	;peripheral interrupt enable
	BSF	INTCON,GIE	;global interrupt enable
	RETURN

;********************************
;Main routine
;********************************
MAIN
	CALL	init
main_loop
	NOP
	GOTO	main_loop

;********************************
;output motor control data
;********************************
step_control
	MOVF	cnt,W
	SUBLW	0x03
	BTFSC	STATUS,Z
	GOTO	set0
	INCF	cnt,F
	GOTO	incd
set0
	CLRF	cnt
incd
	BTFSC	stat,s_dire
	GOTO	rotB
	MOVFW	cnt
	CALL	tableF
	GOTO	step_end
rotB
	MOVFW	cnt
	CALL	tableB
step_end
	MOVWF	PORTB

	RETURN

;********************************
;Read input
;********************************
sw1_on
	BTFSS	stat,s_stat
	GOTO	start_motor
stop_motor
	BTFSC	stat,s_dire
	GOTO	ind_f
	MOVLW	B'00010000'
	MOVWF	PORTB
	GOTO	done
ind_f
	CLRF	PORTB
done
	BCF	T1CON,TMR1ON	;timer1 stop
	BCF	PIR1,TMR1IF	;clear timer1 interrupt flag
	GOTO	sw1_end
start_motor
	BSF	T1CON,TMR1ON	;timer1 start
sw1_end
	INCF	stat,F
	RETURN

;********************************
;Wait routine
;********************************
delay16
	banksel	OPTION_REG
	MOVLW	B'00000101'
	MOVWF	OPTION_REG	;prescaler 1:64
	banksel	TMR0
	CLRF	TMR0
	BCF	INTCON,T0IF	;clear timer0 interrupt flag
	BSF	INTCON,T0IE	;enable timer0 interrupt
checkAgain
	BTFSS	INTCON,T0IF	;timer0 overflowed?
	GOTO	checkAgain	;no check again
	BCF	INTCON,T0IE	;else clear mask
	BCF	INTCON,T0IF	;clear timer0 interrupt flag
	RETURN

tableF
	ADDWF	PCL,F
	RETLW	B'00000001'
	RETLW	B'00001000'
	RETLW	B'00000100'
	RETLW	B'00000010'
tableB
	ADDWF	PCL,F
	RETLW	B'00010001'
	RETLW	B'00010010'
	RETLW	B'00010100'
	RETLW	B'00011000'

	END

プログラムをPICに書き込んで完成!

動いてるところの動画

運用試験:追尾性能を撮った写真で確認

ケフェウス座のガーネットスターを15秒露光してみた。
左がモータオン、右がモータオフ

耐久試験

フル充電したeneloopを使って何時間モータを駆動できるか実験
eneloopはニッケル水素電池なので若干電圧が低く(1.2V)、8本で約10V
これでもきちんとモータは動く。

テスターを定期的に当てて電圧を測定。


電流測定(※)から10時間はもつと想定していたが実際は16時間もった。
※乾電池容量1900mAh、モーターは1相あたり180mA、PICが3mA、運転表示LEDが6mA、1900÷189≒10時間。
16時間もてば一晩中動かしても大丈夫。赤道儀の電動化ができて星の撮影ができるようになった。




これより下は9月22日購入の20cm反射望遠鏡R200SS直焦点撮影の月

R200SSで撮った2011年10月12日19時の赤い満月




ISO-200,1/125秒,10枚,RegiStax6で合成

R200SSで撮った2011年10月16日22時の月(月齢19.0)




SONY-NEX5,ISO-400,1/200秒,20枚,RegiStax6で合成

R200SSで撮った2011年10月31日23時のオリオン大星雲(M42)




SONY-NEX5,ISO-1600,20秒,10枚,DeppSkyStackerで合成

R200SSで撮った2011年11月15日22時の月(月齢19.7)




SONY-NEX5,ISO-400,1/2500秒,14枚,RegiStax6で合成

R200SSで撮った2011年11月16日23時の月(月齢20.7)




SONY-NEX5,LPS-P2,ISO-400,1/320秒,8枚,RegiStax6で合成

月食!食分0.8 SA-70Sで撮った2011年12月10日22時49分の月(月齢15.3)




SONY-NEX5,LPS-P2,ISO-400,1秒

皆既月食! SA-70Sで撮った2011年12月10日23時07分の月(月齢15.3)




SONY-NEX5,LPS-P2,ISO-400,1/2秒

皆既月食 肉眼で見た感じに近い色


SONY-NEX5,ISO-400,5秒,F2.8

NEX5で撮った2011年12月10日23時17分の「冬のダイヤモンド」
皆既月食中の月とともに



SONY-NEX5,ISO-400,10秒,F2.8

「冬のダイヤモンド」線入り



アンドロメダ大星雲、皆既月食中に撮影



SONY-NEX5,ISO-800,30秒,5枚,RegiStax6で合成

ペルセウス座二重星団h-χ、皆既月食中に撮影



SONY-NEX5,ISO-400,30秒,3枚,RegiStax6で合成