GWにハードは作った物の(前回記事)、ソフト修正がさっぱり手つかずだ。
同じハードを題材に貧スタさんの所では、元のCPUをAVRに載せ替え、
独自softによる互換マイコン作成と意欲的なプロジェクトが着々と進行
しているのでぼちぼち、うちも修理くらいは完了させたい所である。

【↑改造済みMead1軸制御回路 DK-V】
さて、ハードはともかくsoft(アセンブラ)は、約30年振り。
参考にさせていただいた西中筋天文同好会の福井さんの記事にある
アセンブラソースを、Meadのステッピングモータ、PFC42H-48081の
励磁シーケンスに従って、出力波形の変更と、MKの赤道儀と
ステッピングモータのギア比とステップ数に合わせたタイマーの変更。
やる事は、たったこの2点だけ。
(先人の努力に感謝。福井さんありがとうございます。)
でも、ソースを頭から見ていくと、いきなり、CPU、PIC16F84Aのデータ
シートの命令コードにない記述(たぶん開発ツールのMPLAB IDEで
規定されている記述?やっぱり何か参考書を買ってくるべきだったか?)が
目に付き、いきなり???状態。そんな訳で1ヶ月以上ほったらかしていた
訳である。合わせて、これがMK用のモータードライブで、GP用じゃない
と言う点も、モチベーションが上がらなかった原因の一つではある。
言い訳は、これ位にして、早速、出力波形と、タイマーの時間の
計算をした。このモードラ、ユニポーラ駆動が出来るコイル構成なのに
ケーブルの芯数を減らす為か、コイルを半分だけ使って、バイポーラ
駆動しているから、ちょっとややこしいが、何とか電流の向きを見ながら
出力波形のパターンを作った。↓

続いてMKの赤道儀のギアの数を数えて、各ステップのインターバルを
計算する。ここで、このソースの中で、タイマーの数値の在処は判るが
どうやって割り込みのタイミングが決まっているか良く判らなかった。
しょうがないので、職場のソフト屋さんに、『これどーやって単位時間が
決まってるの?』と質問。彼もPICのデータシートを見るのは初めてらし
かったが、データシートから、『ここにプリスケーラの設定があるから、
これを設定するんじゃん?』との事、質問したタイミングが悪くて、
その日、彼は社内大会でこれから行かなきゃいけないとかで、最終的な
所までデータシートから探しきれずに、『ここを決めてるところを探して
やれば出来るよ』と言いながら行ってしまった。
しょうがないので、その言葉をヒントにしばらくデータシートを眺めていると
プリスケーラはオプションレジスタで設定。現行ソースは、3bitとも1で
256分周だと、やっと判った。
それ以外にも、入力周波数の1/4で命令サイクルが動いていて、割り込み
タイマー(TMR0)もその間隔でで動くことも判った。
でもソースを見ると、間隔が長いはずの月のタイマーが小さい数字になってる
なんで?とよくよくデータシートを見ると、TMR0ってカウントアップして
256でオーバーフローしたら割り込みかけるのね。で、この時、値をセットすると
そこから256までカウントアップするのね!この辺も知識がないから気付く
のに少し時間が掛かった。
それと補正カウンタの方はプログラム内でループを回しているだけのソフト
タイマーで有る事もソースから読みとれた。と言うわけで、だんだん見えてきた
感じで、やっとうちのMKに合わせたカウンター値をはじき出すことができた。

参考にしたソースの波形パターンとタイマー値を変更してMPLAB IDEで
コンパイル。この辺のMPLABを使ってのコンパイルの仕方は、こちらの
HPの記事を参考にさせていただいた。
でもって、コンパイルしたHEXファイルを、GWに作ったライターと、
『icprog』で書き込んで、CPUの完成!直ぐそのまま実機に挿して試して
みたい衝動に駆られるが、この回路、波形パターンを間違えると、
トランジスタが燃えてしまう回路で出来ているからここは慎重に!
↓ブレッドボード上に、デバッグ回路を組んで、オシロで波形を確認する。

なんとか、上下のトランジスタを同時ONにするパターンには成ってなく、
予定通り、先にポートをHにして100μsec待ってから次のポートをLにする
動作↓が確認できた。よしよし、これなら壊れないはずだ!

【CH1:RA3:2V/div CH2:RA1:2V/div T:0.1msec/div】
と言う事で、いよいよ実機にCPUを載せて、モータをつなげて、スイッチオン!
おお~!モーター回ったよ~!なんともたったこれだけの事だが、随分嬉しい。
やっとネックのsoft変更をクリア出来たか。
でもって、色々とスイッチを押してみると、恒星のボタンを押すと、月の
時間になる?!あれ?接続図と、ソースをよーく見比べると、どうも接続図の
書き間違いの様である。まあ、ボタンが異なるだけで実害は無いか。
でも、このままだと、通常使う『恒星』動作をさせるのにボタンを押し続ける
必要がある。良く見ると元の回路は、電源スイッチがセンターオフで、
3ポジションあるから、これで『恒星』を選択させよう。きっとオリジナルは
どちらかで恒星、どちらかで月なのかな?
↓やっと動き出したモータードライブ

【CH1:A:2V/div CH2:A':2V/div T:10msec/div】
このスイッチを使うには、RB1のポートとRB4のポートをショートさせて
やればいいやとジャンパーを一本追加。いざ動かすと、『太陽』モード時に
元の恒星ボタンを押すと電源がGNDに落ちて止まってしまう。『げげっ!』
と慌ててジャンパーを外しながら、なんだポートはsoftで定義しているから
割付を変えればいいだけだった。ついついハード屋さんのくっしーは
なんでもハード改造で済ませてしまおうとする癖が有っていけない。
そんな訳で、ソースとデータシートを見ながら、ポートの割付を変更して
何とか無事に動くようになった。
翌日、さてどうやって時間を確認しようか?MPLAB IDEには、シュミ
レーション機能も有るらしいが、まだそこまで使いこなしていないくっしーは
モータの出力シャフトのギアの穴に消しゴムを切って突っ込んで、そこに
時計の秒針を差して、それが1周する時間を計ることにした。↓

だいたい一周120秒位の計算に成るので、10周もさせて20分位見て
針が戻ってきた所でストップウオッチで時間を計り誤差をだいたい算出して
カウンターの値を変更するという、なんとも原始的な方法で、取りあえず、
ざっと調整して、200ppm位に成ったので、その辺で切り上げた。
せっかくTCXOが3ppm品を使っている(たまたま手持ちがそれしかなかった)
のだからもう少し追い込んでも良いのだが、今の所15秒しか露光しないので
追尾エラーは1/300秒のシャッターを切ったのと同等なので、これで充分である。
デジ一を買って、10分も露光するようになったら、その時に追い込めばいいや。
残るは、電源回りの回路をどうするかだな。
電源回路は、図面を良く見ると保護ダイオード側は電圧が少し高くても動作に
悪影響は無さそうなので、以下にしようかと思っているが、

電源にニッケル水素辺りを使って、電圧を下げてレギュレーター無しに
しようかなとも考えたりする。ちなみに電流は480mAも流れているので、
6V以上ではレギュレターのPDが厳しいしな。
まあ、取りあえず動かせる様になったから、早く撮影テストしてみたいなぁ。
2011.6.10-17(6/18)
補足:
最初は元ソースの2相励磁のままで作ったが、電流が多いのと、動作
ステップを細かくする為に、1-2相励磁に変更した。上記の計算等は
2相励磁の物である。1-2相時は以下となる。


電流はそれでも380mA程流れる。
動作ステップの影響を検討すると、2相だと20msec間隔で動くので、
止まっている時間が20msec=1/50秒である。つまり動かない赤道儀で、
1/50秒のシャッターで写したのと同じ結果になる。1-2相励磁だと1/100秒
シャッター時に相当する。
星雲星団の低倍率での撮影には、Nikon8cmさんの所の撮影データ
(追尾無し時)からも、1/50秒は大して影響が無いといえる。
高倍率で惑星を撮影する時は、30fpsで動画撮影をして取り込むので、
通常1/30秒のシャッターが切れているような物である。つまり33msec分
ブレている訳だ。これに20msecでモードラが動くと、今まで33msecでの
ブレ分が1/50秒20msecになるので、モードラ無しの2/3のブレ量に軽減
される。1-2相だとこれが1/100秒10msecなので1/3に軽減される事になる。
こう考えると、2相の場合の2/3は、モードラが無いのとそう大して
変わらないと言う風にも取れるので、高倍率の惑星動画撮影時にも、
それなりの効果がしっかり現れそうな、1-2相励磁を選択した訳である。
でも惑星撮影しない時は、1相励磁にして電流削減する様に、ソフトを
使い分けるか?出来ればスイッチ一つで励磁を変えられる様に出来れば
良いがくっしーのsoft力では、随分先のことになりそうだ。
(貧スタさん、いかが?)
「ジャンクなモータドライブを買った」
「ジャンクなモータドライブ その後」
「ジャンクなモータドライブ その後2」