自作基板によるMARK-X用モータードライブ試作工作 ― 2011年09月25日 15時28分00秒
自作コントローラ基板をステッピングモータと同じケースに組込みました。スイッチやディップスイッチも取り付けて操作可能にしています。
工具類は電動ドリル手持ちで使ったため、ぐだぐだの穴あけになりました。ポンチも下手に使ったためにひずみました。今回のケースの加工の場合はポンチは使わずにボール盤でゆっくり穴あけが正解でしょう。
ディップスイッチ部分も大きな穴を一つだけ開けてヤスリで広げていく方法が正解。今回は四角を意識して小さい穴を何箇所も開けてくりぬくという方法をとったため、ケースのアルミがでこぼこになりました。
今回の試作の目的は基板やコネクタ類が全てケースに収まるかの実験を兼ねています。一応頭の中での機構設計の通りにケースに収まることは実証できました。試作とは言っても自分用ではそのまま使う予定です。
工具類は電動ドリル手持ちで使ったため、ぐだぐだの穴あけになりました。ポンチも下手に使ったためにひずみました。今回のケースの加工の場合はポンチは使わずにボール盤でゆっくり穴あけが正解でしょう。
ディップスイッチ部分も大きな穴を一つだけ開けてヤスリで広げていく方法が正解。今回は四角を意識して小さい穴を何箇所も開けてくりぬくという方法をとったため、ケースのアルミがでこぼこになりました。
今回の試作の目的は基板やコネクタ類が全てケースに収まるかの実験を兼ねています。一応頭の中での機構設計の通りにケースに収まることは実証できました。試作とは言っても自分用ではそのまま使う予定です。
以下、自作コントローラ基板のスイッチ類、LED用、取り付け穴用の穴を電動ドリルであけてヤスリで調整してとりあえず取り付けたもの。
モータの取り付け、電源用のDCジャックとマークX赤道儀の回転止めピンとの接続部分を組み上げたところ。回転止め用の金具は以前に作ったものから拝借しているので、本当は追加で作る必要あり。
マークX赤道儀に取り付けてケースを開けたところ。この段階ではリモート接続用の接続はしていません。
ちょっとわかりづらいですが、DCジャックと電源供給用ピンヘッダを接続している部分です。ピンヘッダは垂直用を干渉しないように曲げています。
ステッピングモータの接続部分。下から黒(COMMON=モーター電源)、赤(A)、赤(B)、緑(A/)、緑(B/)と接続します。
駆動状態。ケースの隙間から明かりが漏れるのでLED用の穴あけは次回作からは行わない予定。
マークX用自作モータードライブリモートスイッチ取り付け ― 2011年09月26日 23時55分28秒
自作基板による五藤光学MARK-X用モータードライブ試作工作ですが、本体側にもFASTとSTOPのスイッチを取り付けています。通常はこのままでも最低限の操作は出来ますが、CANONのE3用リモートスイッチを取り付けることでリモート操作も可能なように考えていました。
これもケースに問題なく収まることが必要です。
これもケースに問題なく収まることが必要です。
2.5mmのステレオジャックのRch側にFASTスイッチを接続、Lch側にSTOPスイッチを接続してQIコネクタでコントローラ基板に接続したところ。コントローラ基板側は回転方向切替スイッチのための出力も出していますが、今回は使いません。DIPスイッチの1ビット(4番)にも同じ機能を割り当てているからです。
CANONのE3コネクタ用のリモートスイッチを接続したところ。問題なくケースに収まっています。半押しでFAST、全押しでSTOP操作になります。天体観測時の操作はボタン一つでのこういうシンプルさが必要。
ちなみに、今回はマイコンを組込んでいますので、回転制御系には凝った部分があります。
・回転方向が逆転するような場合は一定時間停止させてから逆転させる
・STOP操作は一定時間経過すると低速で逆転を始める
・STOPとFAST同時操作の場合はSTOP操作優先
・赤緯モード時にはFAST操作とSTOP操作で単純に正転、逆転操作になる
PICでのモータードライブ制御にはCCP1必須 ― 2011年09月29日 19時45分06秒
PIC16F648Aを使って五藤光学MARK-X用モータードライブの制御を試みていますが、インターバルタイマーでパルスモータの駆動パルスを生成する手法には注意が必要です。
以下の方法が考えられます。
(1) TIMER1を使ったタイマ割り込みでタイマカウンタを再設定しつつパルス出力
(2) TIMER1とCCP1を使ってコンパレータで比較設定値がTIMER1のカウンタと一致した時のCCP1割り込みでパルス出力
最初は(1)の方法を使っていたのですが、実験してみるとどんどん回転がリファレンスよりも遅れていきました。リファレンスとは五藤光学製のP型モータードライブです。回転軸を同じ位相に設定した後まわしっ放しにして何時間たとうが同じ位相関係を維持していればリファレンスとのずれはないことになります。
この方法での実験で(1)の方法ではずれて行ったのです。
この方法ではタイマ割り込み処理内で次のタイマカウンタ値を設定するため、この処理のオーバーヘッドによりずれが発生していると考え、処理遅延を加味してタイマカウンタ値を設定するように試行錯誤しましたが余り改善されませんでした。
そこで(2)の方法を使います。実は最初は(2)の方法そのものを知りませんでした。この方法を教えてくださった、air variableさんに感謝いたします。
(2)の方法を使ったソースコードはこちらです。
※(2011/11/04追記:上記のソースコードにはバグがあります。CCP1の比較値はマイナス1する必要あり。)
この方法では割り込み処理でタイマカウンタをリセットする必要はありません。カウンタ一致時点で割り込み要求フラグを立てると同時にコントローラがTIMER1のカウンタもリセットしてくれます。これにより、リファレンスとのずれは発生しなくなりました。
但し、水晶発振子の精度には依存しますので、発振自体が狂うとずれることになります。
以下の方法が考えられます。
(1) TIMER1を使ったタイマ割り込みでタイマカウンタを再設定しつつパルス出力
(2) TIMER1とCCP1を使ってコンパレータで比較設定値がTIMER1のカウンタと一致した時のCCP1割り込みでパルス出力
最初は(1)の方法を使っていたのですが、実験してみるとどんどん回転がリファレンスよりも遅れていきました。リファレンスとは五藤光学製のP型モータードライブです。回転軸を同じ位相に設定した後まわしっ放しにして何時間たとうが同じ位相関係を維持していればリファレンスとのずれはないことになります。
この方法での実験で(1)の方法ではずれて行ったのです。
この方法ではタイマ割り込み処理内で次のタイマカウンタ値を設定するため、この処理のオーバーヘッドによりずれが発生していると考え、処理遅延を加味してタイマカウンタ値を設定するように試行錯誤しましたが余り改善されませんでした。
そこで(2)の方法を使います。実は最初は(2)の方法そのものを知りませんでした。この方法を教えてくださった、air variableさんに感謝いたします。
(2)の方法を使ったソースコードはこちらです。
※(2011/11/04追記:上記のソースコードにはバグがあります。CCP1の比較値はマイナス1する必要あり。)
この方法では割り込み処理でタイマカウンタをリセットする必要はありません。カウンタ一致時点で割り込み要求フラグを立てると同時にコントローラがTIMER1のカウンタもリセットしてくれます。これにより、リファレンスとのずれは発生しなくなりました。
但し、水晶発振子の精度には依存しますので、発振自体が狂うとずれることになります。
以下はリファレンスとして使っている五藤光学のP型モータードライブです。回転軸の位相を合わせて比較しています。
駆動モードはディップスイッチの1~3の3ビットで指定します。
以下は恒星時設定(モード0)での出力を周波数カウンタで計測した結果です。
5.26424Hzは水晶発振周波数に逆算すると3.99998012MHzとなって使っている4MHzの水晶発振子からの誤差は-4.9696ppm相当の計算になります。これでCCP1でのインターバルタイマ処理の精度は十分であるということが分かりました。計算カウンタ値はそのまま比較値として使用することができますので、何らかの値を減算するような必要もありません。
※(2011/11/04追記:上記の比較値に対する説明は間違い。CCP1の比較値は計算値からマイナス1する必要あり。)
以下はキングスレート設定(モード1)での出力を周波数カウンタで計測した結果です。
他にモード2:太陽時、モード3:月時、モード4:星景モードがありますが、この日は実測しませんでした。
以下、計算のためのEXCELシートの情報です。
CCP1利用時の水晶発振子の誤差調整 ― 2011年09月30日 01時09分03秒
PICマイコンで天体望遠鏡用のモータードライブコントローラを作る場合、水晶発振子の誤差も気にする必要があります。
大抵の製品ならば±20ppmとか±50ppmとかの誤差があるものです。これに加えて更に温度によって誤差が発生します。
天体望遠鏡の赤道儀で恒星時追尾をするような場合、短時間ならばこのような誤差は余り問題にはなりませんが、通常の市販品ではギアの減速比とモータのパルス数から恒星時の1/2^nに丁度分周できるような特注品の水晶発振子を使っていることから、ある程度の精度は気にしていた方が精神衛生上いいでしょう。
大抵の製品ならば±20ppmとか±50ppmとかの誤差があるものです。これに加えて更に温度によって誤差が発生します。
天体望遠鏡の赤道儀で恒星時追尾をするような場合、短時間ならばこのような誤差は余り問題にはなりませんが、通常の市販品ではギアの減速比とモータのパルス数から恒星時の1/2^nに丁度分周できるような特注品の水晶発振子を使っていることから、ある程度の精度は気にしていた方が精神衛生上いいでしょう。
水晶発振子は固体によってばらつきがありますから、発振周波数にもばらつきが発生します。ある程度以上のばらつきによってステッピングモータへのパルス供給に対しても許容範囲を超えるような場合には何らかの修正をしたくなります。電子回路だけなら不可能ですが、PICマイコンを使うわけですからある程度の調整をしてみようと思います。
以下のように対応します。
(1) 恒星時に与えるタイマカウンタのカウンタ値(CCP1の場合はコンパレータの設定値)をEEPROMで定義して、コード定義しない
(2) EEPROMのカウンタ値を起動時に反映させて恒星時パルスを発生させる
(3) 組み立てた後に周波数カウンタで測定した結果を逆算したものを水晶発振子の周波数と考えて、その周波数で再度恒星時パルス数となるようなタイマカウンタのカウンタ値を求め直して、PICKit2を使ってEEPROMの定義値だけを修正する
以下は組み立てた基板の一枚での測定値です。かなり誤差があります。恒星時設定の時の1相あたりの周波数が5.26504Hzとなっています。これは4MHzの水晶に対してタイマカウンタ値23745から逆算すると4.00058799MHzとなり、誤差は+146.9984ppmとなります。かなりのハズレ水晶です。
以下のように対応します。
(1) 恒星時に与えるタイマカウンタのカウンタ値(CCP1の場合はコンパレータの設定値)をEEPROMで定義して、コード定義しない
(2) EEPROMのカウンタ値を起動時に反映させて恒星時パルスを発生させる
(3) 組み立てた後に周波数カウンタで測定した結果を逆算したものを水晶発振子の周波数と考えて、その周波数で再度恒星時パルス数となるようなタイマカウンタのカウンタ値を求め直して、PICKit2を使ってEEPROMの定義値だけを修正する
以下は組み立てた基板の一枚での測定値です。かなり誤差があります。恒星時設定の時の1相あたりの周波数が5.26504Hzとなっています。これは4MHzの水晶に対してタイマカウンタ値23745から逆算すると4.00058799MHzとなり、誤差は+146.9984ppmとなります。かなりのハズレ水晶です。
4MHz基準でのタイマカウンタ値は23745ですが、これを4.00058799MHzとして計算し直すとタイマカウンタ値は23748になります。この値をEEPROMに設定します。計算時のEXCELの結果は以下。
PICKit2でEEPROMでの設定値がオリジナルの状態。
EEPROMの設定値のみを修正値で変更。
EEPROM上のタイマカウンタ値を変更後の恒星時設定での測定値は以下。十分実用になる値となりました。
最近のコメント