PIC AVR 工作室->TopPage->PICの工作->ポータブル赤道儀(後編)

PICでポータブル赤道儀(後編)

PICでポタ赤を作るという話の後編です。「ネコの目式」赤道儀のお話です。

これまでのお話

前編までのお話を簡単に振り返り。

一般的な赤道儀はウォームギヤ式を採用していて、これを自作するとしたら高い加工精度が求められ、またピリオディックモーションが付き物でした。

一方、タンジェントスクリュー式は身の回りの部品で簡単に作れるけど、 2つのアキレス腱…押しネジが横に押し出されることによって理論値と実際の角度に誤差が生じること、 及び摩擦でステッピングモーターが脱調を起こすことが付き物でした。

あらためて作戦と着地点

既存の2タイプの赤道儀の特徴を念頭に、加工の難易度、材料費、精度といった観点も加味しながらこれらの2方式とは別の赤道儀を模索してみました。

マイコン1個でモーターを制御して、星野撮影が可能な機能を実現したいというのがねらいです。

身近な材料を使って、誰でも簡単に使える工具で、広角~標準レンズ画角はもちろん、 出来れば中望遠くらいまで使えそうなスペックを目指すとしたら、ウォームギヤ式はちょっと難しい。 むしろタンジェントスクリューのアキレス腱を取り除き、押しネジが横方向にズレていかない仕組みを考えよう… という方が建設的かも。そういう作戦で行ってみます。

ということであれやこれやとアイデアをめぐらせては見たものの…思うだけなら簡単なんだけど物理的な壁が幾つもあって、 クリアするまでには予想外に難航しました。

妄想し始めてから数ヵ月後、ふと思いついて組み立ててみたのが冒頭の写真…白いボデーの試作3号機です。 タンジェントスクリュー式のアキレス腱を見事クリアし、なかなかのスペックになりました。

これはオリオン座の下半分辺りの所。三ツ星と小三ツ星付近を望遠レンズで撮ったもの。

135mmレンズ(銀塩換算で約200mm画角)F5.6でISO800、3分間の露出ですが、ほぼ問題なく追尾できてます。 M42オリオン大星雲がくっきり写り、NGC2024もわずかに写りこんでます。

小三ツ星付近だけをCCD画素の等倍にしてみたのがこれ。

ちょっと像が流れちゃったりしてるんですが、これは試作品の加工精度が低かったり、極軸合わせが少しズレちゃったりというのが原因。 あと、マイクロステップも組み込んでないのでモーターの振動も影響してるはず。 もうちょっとちゃんと作って、ちゃんと駆動させればもう少しいいものが撮れるはず。(→次の試作品4号機で取り込みたいところ)

でも望遠レンズでサクッと撮ってもこの程度だから、標準~広角ならもっとマトモに写る方式だということは判りました。 加工精度の向上やマイクロステップ登載によって、もっと200mm画角、300mm画角程度は十分実用レベルに持っていけるのでは? と考えています。

動作原理…高校時代に逆戻り…

ティンバーゲンの4つのなぜ?とタンジェントについて

そもそもなぜタンジェントスクリュー式という赤道儀が生まれたんでしょう? 普通に考えれば赤道儀って歯車回転させて星を追尾すれば良いわけで、わざわざ三角関数なんてメンドウな物を持ち出す必要はないのでは? と素朴な疑問が湧いてきます。

その「タンジェント」っていうモノについて、(1)タンジェントスクリューの機能・目的は何? (2)タンジェントスクリュー式が存在する理由は?(3)タンジェントスクリュー式のメカニズムは?(4)どんな経緯で出来上がった? というティンバーゲンの4つのなぜ の観点から眺めてみると、全く別の仕組みの赤道儀があってもいいジャンって思えてくることになります。言い換えれば、タンジェントスクリュー式って何?

タンジェントスクリューの意義

「ティンバーゲンの4つのなぜ」に大雑把に当てはめると、ネジの回転→長さに変換し、長さを角度に変換するという機能によって 回転という「機能を実現」する物で、身近で安価なネジという部品で「容易」に作ることができ、その変換にはタンジェント関数を「当てはめること」ができ、 「安くて簡単でそこそこ程度実用性のある赤道儀」ということでしょうか。

もしウォームギヤ式の赤道儀がタンジェントスクリュー式に比べてあらゆる点で圧倒的に優れているなら、あっという間に駆逐されていたことでしょう。

逆にタンジェントスクリュー式の赤道儀がウォームギヤ式に比べてあらゆる点で圧倒的に優れているなら、逆の結果になっていたことでしょう。

どちらかがどちらかに優れていて、別の点では劣っている。その対比によって赤道儀の進化上、適材適所で両方生き残っているということかと思います。

ウォームギヤ式タンジェントスクリュー式
軽さ、小ささ ×
追尾精度
作りやすさ ×
操作性 ×
値段
安定性 ×

対比してみると、個人的にはこんな感じだと思います。(あくまでカメラを載せて星野撮影を行う範囲です)

作りやすさの「◎」は身近なネジや簡単な工具で作れるというところに起因し、 追尾精度や安定性の悪さはタンジェント関数を応用して追尾するという点に起因しています。 また操作性の悪さと言うのもやはりタンジェント関数を使うことに起因します。

タンジェントスクリュー式のデメリット

なぜタンジェント関数を用いることがデメリットになるのでしょうか?

それはすべてこの図のように、上側の構造物がネジの回転で滑りながら押し上げられていくという形態にあります。 滑りながら押し上げるということは、言い換えれば”上側の構造物とネジは結合されてない”ということです。

この図のように、左の角や右下の角のところは構造物同士が結合されていますが、右上の角は結合されていないため、 ネジは力を受けるとグラグラと揺れ動く(橙色の矢印)ことになります。パッと見は直角三角形ですが、本当は三角形ではない…というわけ。

タンジェント関数を正確に表現するためには直角三角形を描くことが大前提ですが、 直角の表現が不正確になってしまうと、三角関数の計算結果と実際にズレが生じることになります。 また、角度が大きくなって行くにつれてネジ溝とネジの間の摩擦が大きくなり、やがてステッピングモーターが脱調を起こす原因にもなります。

さらには、結合されていないためある程度以上三角形が開いてバランスを崩すと、 上側の構造物がカメラもろとも左側にガシャンと一気に回転して倒れてしまうおそれがあるので、 実際の操作時に注意をするか、設計段階での予防策が必要です。 じゃないと上に載せたカメラと三脚が「グシャッ」とコンニチハしてしまいます。クワバラ・クワバラ。

目的と手段を整理してみる

先ほどの表で×や△が付いている部分の原因がタンジェント関数。一方でタンジェント関数を使うことが最大のメリットでした…。

でもメリットの部分をもう少し細かく眺めてみると、タンジェントを使うこと自体がメリットと言っている訳ではなく、 「安価なネジを使うことがメリット」な訳です。言い換えれば、ネジは軽量化や製作の容易さ・低コストの「目的」で、 タンジェント関数はそのための「手段」。

別の手段でも同じ目的(ネジで制御)が達成できるのなら、本来のネジを使う目的=「安く簡単に作れて軽くてそこそこの精度」も実現できるはず。

そう考えては見たものの、具体的に解決できる方法を見つけ出すのにそれから半年ちかく悩みました…。で、ピン!と来た。

三角関数について考え直してみる

三角関数についてあらためて考えてみます。三角関数っていうのは高校生の時に習いましたね。 直角三角形の「角度の大きさ」から「辺の比」を求める関数です。

まずはタンジェント。これを使うと…。

長さLの下側の構造物から直角にネジを押し出していく時に、そのネジの長さがHで角度がθとすると、H=L×tan(θ) で表されます。

これは上手く行きませんでしたね。では次、サイン関数。こんな感じ。

長さLの上側の構造物の先端(円周部)に向けて下側の構造物からネジを垂直に押し出していく時に、そのネジの長さがHで角度がθだとすると、 H=L×sin(θ) で表されます。これはどうかというと…

図の円の半径Lは常に一定の長さ、ネジの長さHはモーターで制御可能で、θはsin関数で表せます。 が、角度が大きくなっていくにつれて下の構造物の長さは短くなっていってしまいます。 長さが変わるということは、つまりタンジェントの時と一緒でどれか1つの角は結合させることが出来ずにズレながら開いていく必要があるということ。 sin関数の場合は右下の直角部分がズレていく必要がありますね。

これではダメだ…  同様にコサイン関数。

これも同じようにθが大きくなるにつれてWの長さが短くなってっちゃう。

うーーーーん、結局三角関数を使うとタンジェントスクリュー式と同じ欠点になっちゃうんジャン! 辺の長さが変わっていっちゃうってことはタンジェントの時と一緒、どこか1つの角が結合できない…。元の木阿弥。

うーん、ネジが都合よく円周上に沿ってグルグルと進んでいってくれればウォームギヤ式と同じ仕組みになるんだけど… 物理的に作れるはずも無いよな…そんなグニャグニャなネジなんて…

困った…。ということで、悩むこと約半年(っていうか放置してた)。突然来た。ビビビっと来た。三角関数の使い方にコツありだな。

三角形の一つの辺の長さをネジにしてグルグル回しながら長さを調節していくと、 直角三角形を使う限り残りの2辺のうち片方がズルズルと引き摺られて長さが変わっていくことがそもそもの問題なわけです。 じゃぁ、残りの辺の長さを両方とも「固定」してみたらどうなるの…?と。

二等辺三角形を応用してみる

まずは机上の空論を並べてみる…理屈と原理

単純に長さを固定するだけだと上手い具合に三角関数が応用できないので、上手い具合に三角関数が適用できるように工夫が必要です。 三角関数といえば、先ほども触れたように直角三角形の「角度の大きさ」から「辺の比」を求める関数なわけです。 だからどこかに直角を作りたい…だけど2辺の長さを固定したら直角三角形にはならない…。

そこで、「二等辺三角形」を持ち出してみます。

二等辺三角形には常時直角な角なんて無いジャン!

…そこが知恵の絞りどころ。長さが等しい2辺に挟まれた角(頂角)を2等分して反対側の辺(底辺)に向かって補助線を引きます。 図で言うと左の角から右の辺に向けてスイーーーッと垂線を。

そうすると、ほら、出来た。直角。ここは常に直角になります。頂角の半分+上側の底角+この直角で構成される直角三角形。下半分も同様。

引いた補助線によって、二等辺三角形は上下に2つの合同な直角三角形に分割できました。あとはもう算数の応用問題ね。

まず上側の直角三角形(水色部分)だけを取り出して眺めてみます。すると、左側の角度(頂角の半分)はθ/2となります。 直角三角形の斜辺の長さをLと置くと、右側の辺の長さ(H/2)は

H/2 = L × sin(θ/2)

となります。両辺2倍すれば

H = 2L × sin(θ/2)

ですね。元々の二等辺三角形に話に戻ると、長さが等しい2辺(=L)の長さと底辺の長さ(=H)、 そして頂角(=θ)の関係を表せたことになります。

つまり、「固定長の2つの辺(二等辺)」と「長さが変化する1つの辺(底辺)」を用いて「角度(頂角)を自由に制御する」ことができる訳です。 変化する1つの辺っていうのはいうまでも無く「ネジの長さ」のことで、固定長の2つの辺って言うのは2つの構造物のこと。 2つの構造物のうち片方は三脚の雲台に、もう片方の構造物には自由雲台やカメラ、望遠鏡を載せればよいということ。

まぁ、原理はそういうこと。ここまでは、あくまで理屈上のお話…。

さて実際にこれを作るとしたらどうすりゃいいの?ってのが次の問題。しかも、ホームセンターで買える安い材料と、 簡単に扱える家庭用工具だけを使って済ますにはどうすればいいでしょう???

それに、そもそもこの方法を使うとタンジェントスクリュー式で致命的だった欠点 …アキレス腱…が解消できるのでしょうか?

部品を配置してみる

ホームセンターで売ってそうな部品を念頭に、イメージ図を描いてみます。 (正確にいうと既にモノは出来上がってますが、昔アイデアノートに描き出した内容を改めてドローソフトで清書しただけ)

こういう構造で作れば上手く機能するだろう…とあれこれ考えてみた図です。こんなかんじ。

ポイントになるのは2点。ひとつは赤いマークのところ(底角)にあるヒンジ(ベアリング)。もう一つは「緑色のところ」と「ネジ部分」の関係。 簡単な解説を。

まず底角…赤いマークのところについて。タンジェントスクリュー式に比較してヒンジ(もしくはベアリング)の部分が2箇所増えました。 この2つの「底角」の部分が自由に回転できることによって、 白い丸(頂角)から2つの各赤い丸(底角)までの長さ=lengthは常に一定の長さを保つことが出来るので、 上と下の構造物が常に二等辺三角形を保ちます。そしてネジの伸び縮み、すなわち底辺(長さ=hight)の伸び縮みで頂角=θの制御が可能となります。

もう一つのポイント:緑色のところ。上の緑の部分はネジとは固着していて、赤い丸(底角)のところを中心にグルグル回れる構造になってます。 下の緑部分にはガイドチューブ(図ではネジが貫通している薄透明のチューブ)を固着させておいて、 その内部をネジが行ったり来たりすることができるようになっています。(こちらの緑部分も赤い丸を中心にグルグル回れます)

そして、薄紫色の歯車。この歯車は内側の軸穴のところに「タップでネジ切り」してあるところがミソ。 歯車を回転させるとネジを押し出すように働きます。ネジが押し出されるとhightが伸びて2つの緑の部分が離れていき、 頂角θが広がっていくというわけ。その際、2つの緑色の構造物は常時並行を保ったまま広がっていく(対面したまま広がる)ように作動します。

アキレス腱の件

さて、こういう方式を用いたら2つのアキレス腱が解消できたのかと言うと…

赤いヒンジ(もしくはベアリング)を用いて二等辺三角形の形状をとることによって、辺と辺が滑っていくという形態がなくなりました。 タンジェントスクリュー式では角度が開くにつれて滑りの量が増えていく欠点がありましたが、この方式ならそれは起りません。

そして緑色のところが常に並行を保ったまま押し広げられていくので、ネジは斜め方向の力を受けることが無くなります。 常に垂直方向に(ほぼ)一定の力で押し広げていくことになるので、摩擦の増大によるステッピングモーターの脱調も起らないというわけ。

2つのアキレス腱は無事解消されました!

ちなみに、私の場合身近に手に入る素材としてM4ネジと内径4mmのガイドチューブ(細い塩ビ管)という形で作りましたが、 ネジとチューブの隙間で「ガタ」が生じる恐れがあります(実際はそんな影響が出るほどのガタは無いけど)。 ガイドチューブを使う代わりに、ベアリング等で「薄紫の歯車部分」を「緑の部分に固定して回転」出来るようにしたらもっと精度を上げられるはずです。 加工は大変そうだけど。腕に自信のある方は挑戦してみてください。

さて、これをどんな仕組みで作るかってという話。

試作機の動作(ハードウェア)

試作機の動作としくみ

これが試作3号機のアップです。

試作2号機はコの字型アルミ押し出し材を2つ向かい合わせにした形状でしたが、試作3号機はかなり違いますね。 木の板を2枚重ねたような構造をしていて、右上のネジ部分を中心に回転していく仕組みです。 本当は、細長くて軽い物に仕上がればカメラバッグに「ポンッ」なんですけど、 今回のカラクリはアルミ押し出し材に押し込められる自信が無かったので、部品配置の自由度が高いという点を重視しこの様な仕組みにしました。 まぁ、試作機なので動作原理重視ってことで。

ちなみに動かしてみるとこんな具合。

常に二等辺三角形を保つわけ。

主要な部品ごとに分解してみるとこんな感じ。(3号機を分解する訳には行かないので、作りかけの4号機の写真ですが)

右上の穴にM6ねじを通しておいて、ここを中心に上の板をグルッと回転できるようにします。 このM6ネジ部分がさっきのイメージ図でいう「白い丸(頂角)」の部分に相当。

「赤い丸(底角)」にあたるのは下の2箇所の銀色の部分。材料はいわゆるホームセンターで売ってる「キャスター」。 そのタイヤ部分をニッパでむしり取ったモノ。 タイヤは要らないけど、360°グルグル回るベアリングが欲しかったので、ベアリング流用のためにキャスターを使いました。 下手なベアリングを買うよりも安上がり!! 1個100円程度で済んじゃう!!

もちろん頂角から2つの底角までの距離は等しく取る必要があります。(二等辺三角形の必要条件ね)

このように2枚の板が滑りながら開いていくという形状は、DIYで使える材料としては安上がりながら強度・精度の点でなかなか有利です。

ちなみに、この底角に相当する部分はベアリングなのでこんな風に自由に回転できるようになってます。

で、この底角の片方にネジを固着させ、反対側の底角からネジを押し出していけばいいって訳。

こんな風に底角の上の部分(さっきの図でいう緑の部分)が常に並行に対面した状態のまま上下の構造物が開いていくことができます。 (特に右上のベアリングに着目して見てみてください→開くにつれてゆっくりゆっくり回転しながらもう一つのベアリングに対面しています)

この構造のポイントは、3つの角のどこかに「直角」を設けなくても三角関数が適用できるってこと。 二等辺三角形だから、その半分に割った三角形がかならず直角三角形になることを応用できます。 それを具現化できる材料と構造の答がこの2つのキャスター(ベアリング)というわけ。

思いついちゃえば至極アタリマエなんだけど、タンジェントスクリュー式から頭をこれに切り替えるまでに半年掛かった…。 当初は「しなりながら回転していくネジ」とか考えてたもんな… 底辺がしなったら、それは三角形じゃなくて扇形ですわ。 (ウォームギヤ式の一部分切り出したものだね)

多分、二等辺三角形の底角を直角にできるのは、世界ではこの人たち だけな気がする。

さて、つづき。

右上のベアリングには寸切りネジを固着しておいて、左下のベアリングにはチューブを固着させて、 チューブの内側に寸切りネジを通してあげれば、角度に関わらず常に2つのベアリング(さっきのイメージ図でいう緑の部分) が正対しつづけることになります。つまり、常に二等辺三角形が保たれたまま押し広げられていくことになる訳です。 ちなみに「固着」に便利なのは「エポキシパテ」です。作った当時は結構な値段だったけど、最近なら100円ショップでも手に入りますね。

さて、ネジを押し広げていくためには一工夫が必要です。

さっきのマンガにも出てきましたが、歯車の中心の軸穴…この穴の内側にネジ溝を切っておくと、 その歯車をグルグル回してあげることで寸切りネジを押し出すことができ、2つの構造物が開いていくことになるというわけ。

そうやって出来たのが、さっきも出てきた試作3号機…

なわけです。

この構造の特徴(補足)

せっかくなので、例によって名前を付けてみます。

「ネコの目式」って呼びたいと思います。相変わらずのセンスです。名前に深い意味はありません。 まぁ、時間によって開いたりしていくってことがイメージの根底にあるんですが。

どーしてもイヤだ、って人は「サインスクリュー式」とか「二等辺三角式」とでも呼んで下さい。

ポイントになるのは、大きくは3つあります。

二等辺三角形

赤道儀といえば、まず代表的なのはウォームギヤ式。これはホームセンターで売ってる材料で高精度なモノを作るのが難しいのでパス。 次はタンジェントスクリュー式。これは2つのアキレス腱があったのでダメだったのでした。

じゃぁ、この二等辺三角形という仕組みはというと…

「キャスターのベアリング部分」と「寸切りネジ」というお手軽な材料を使いながらも二等辺三角形の形状を採用することによってアキレス腱は無事解消。 安い材料で作れて、しかもDIYでもそこそこの精度が出せるウルトラCではないでしょうか?

2枚の板

極軸の回転は、赤道儀にとっては意外と難しい問題です。カメラなどの重量物が載るので、回転軸がたわんだりするからです。

市販されているちゃんとした赤道儀の場合もやっぱりこの辺りがお金の賭けどころ。頑丈なボデーと高価なベアリングで構成されているみたいです。

試作2号機ではコの字型アルミ押し出し材を使ったんですが、この時は結構無い知恵を働かせて「コの字」形状を選択したんです。 回転軸を「2箇所で支える」ことによって軸部分の強度を確保しました。

試作3号機では2枚の板を滑らせながら回転していく形状を取ったわけですが、この形状の場合は重量を「面で分散して受ける」ことになり、 力が軸に集中しないというメリットがあります。そのため、木材(今回はMDF材使用)でも変形しにくく、それなりに精度高くキッチリ動いてくれるわけ。

試作2号機のような細長い形状で作れるよという器用な人なら、そういう形状を取るのもアリでしょう。まぁ、原理が同じでも実現方法は色々あります。

寸切りネジを押し出す仕組み

寸切りネジを押し出すためには、ネジ溝をグルグルと回転させてあげる必要があります。

もう少し機能分解してみると、「回転」と「ネジ溝」という要素に分けられると思います。

回転をさせるには、モーターの動力を伝える仕組みが必要です。今回その部分には「歯車」を採用しました。 歯車でもウォームギヤでもいいんですが、今回はそれほどの減速比が要らなかったので。

もう一つの要素=ネジ溝部分…寸切りネジを押し出す仕組みの部分です。これは歯車と一緒に動いてくれないと意味無いので、 歯車の軸穴部分にタップでネジ溝を切ることで実現してます。協育歯車やレインボープロダクツなどの市販歯車を元に作れば事足ります。 ネジを押し出せる程度の力に耐えればいいので、プラスティックの歯車でも十分でしょう。

難しいのは、タップでネジ切りする際の加工精度のこと。ネジ切りがきちんと垂直になってないと回転させたときにネジが斜めに回転してしまうので、 寸切りネジを押す際に緩急がついてしまい、歯車1回転ごとにピリオディックモーションを生じる原因となります。要注意!

構造の特徴のまとめ

試作3号機には、構造上このような3つのアイデアを盛り込んで作ってみました。その結果を見比べてみましょう。

ウォームギヤ式 タンジェントスクリュー式 ネコの目式
軽さ、小ささ ×
追尾精度
作りやすさ ×
操作性 ×
値段
安定性 ×

基本的にはタンジェントスクリュー式のアキレス腱を解消した物なので、×印が解消された物と考えてよいと思います。 操作性が△なのは、タンジェントスクリュー式と同様に「巻き戻し」操作が必要になるためです。この点だけはウォームギヤ式には敵いません。

ちなみに、このウォームギヤ式は市販の大掛かりな赤道儀を念頭に置いてますが、技術のある方ならもっともっと小さく仕上げることも可能でしょう。 ただ、この表の場合は市販の望遠鏡用赤道儀をポタ赤に流用した場合を想定しています。念のため。 ちなみにこちらのサイトの方は凄く小さいウォームギヤ式を作られてます。

ネコの目式でハードウェア的に大事なのは、手作業でどれだけ精度高く作れるかという点。手先がどれだけ器用かにもよります… これが動作精度を左右するので、色々工夫しながら頑張ってみてください。

で、あとはこの歯車をどうやって制御するか(ソフトウェアと回路周り)って話になっていきます。 プログラムのロジックや操作機能などなど…ようやくマイコン周りの話になっていきます。

試作機の制御(ソフトと回路)

回路図

マイコン始めたばかりの頃に頑張って書いてみた回路図です。といっても当時はノートに手書きだったので、電子データに書き直したもの。

今以上に良く解らないまま回路書いて、しかも生まれて初めてカメレオンレジストでプリント基板作ったので、 思ったとおりに動いたのは奇跡的だったなぁと…。(クリックで別窓に拡大表示)

回路図の簡単な解説

CPUはPIC16F873。算術演算ライブラリが辛うじて組み込める最低限の容量を登載したPICマイコン。 PB4~PB7のポート4本でMP4024にパルスを送って、MP4024に繋いだステッピングモーターを制御します。

押しボタン4つのうち、3つは通常の操作に使います。スタートボタン、早送り、巻き戻しの3つ。 残りの1個は回転方向(CW/CCW)を制御するのに使います。操作ボタンはチャタリング防止用のフィルターを使ってますが、 回転方向の制御は起動時に1回だけしか入力をしないのでチャタリングのことは気にしない構成です。

あとLEDと圧電ブザーがついてますが、これは動作状態をアナウンスしたり、経過時間をリアルタイムで表示するためのものです。

特に経過時間の表示は重要! 赤道儀にカメラを載せて星野撮影をするとなると周囲が殆ど真っ暗の状態なので、 時計を眺めながら撮影時間を調整するって言うのが思いのほか大変。だからと言って電子レリーズを買うのも勿体無いし使いにくいので、 赤道儀本体にその手の便利機能を搭載できないかな…と思って組み込んだのがこれ。

具体的な表示内容・使い道についてはソフト周りのお話ってことで後述。

そうそう。MP4024周りのフライバックダイオード。 当時は良く解らなかったのでとりあえず整流用ダイオードを電源に向けて4本繋いでおけば良いんだろうって思ってたんですが、 本来ならショットキバリアやファストリカバリのような高速ダイオードを使う必要があるんだと思います。 とりあえずこれで何年も壊れずにつかえているので良しとしてますが、 この回路を改造して使いたい人はショットキバリアかファストリカバリを使うようにしてください。

もしこの間のarduinoの実験 のようにMP4401やFT5754Mあたりを使うなら、そもそもこの手のフライバックダイオードが内蔵されていてラクチンなんですが。 でもMP4024は各信号入力端子に電流制限抵抗を内蔵してて抵抗4本省けるので、どっちもどっちかな。

プログラム

プログラムソースとHEXファイルを貼ります。(右クリックで保存などしてご覧ください)

プログラムの意味や機能は次項で。

進化に進化を重ねてバージョン8です。まぁなんにしても、マイコンを使い始めて以来自分でゼロから設計した「初めてのモノ」だったので、 行儀は悪いわ、効率は悪いわ、モジュール分割は放棄してるわ…困ったプログラムです。もう直さないけど。

それに加えて、PIC16シリーズは2kワードの境界という呪縛があって、 コンパイル後に1モジュールサイズが2kワードを超えると無慈悲なエラーが出てしまい、Call Tree Listとのにらめっこ。 特に、数値演算ライブラリ(math.h)との絡みでこのエラーが出ちゃうという致命傷があり、 標準のmath.hではどうしても入りきらないことが判ったので、math.hを元に別名で算術演算ライブラリを作り直したりとか大工事。

そのおかげで、超初心者だったオイラがCCS-CのクセとかmplabやCCS-Cの環境面などをゼロから猛勉強。 そんな副作用があったおかげでレベルが1くらいは上がったかな。 その辺の環境周りの詳細は参考書籍に挙げた後閑さんの「C言語によるPICプログラミング入門」 にバッチリ書かれているので省きます。

上に貼り付けてあるプログラム中からその自作ライブラリmath2.hを呼び出しているんですが、 CCS-Cのライセンスを読むと、修正版とはいえライブラリの全部もしくは一部を公開するのは不可とのことらしいので公開が出来ません。 なので、標準のmath.hをこのプログラムで使えるようにする方法だけ簡単に記しておきたいと思います。

ポイントになるのは#separateプリプロセッサの使い方と、使わない関数は潔くライブラリから削っちゃうってこと。

#separateっていうのは、inline展開しないことを明示指定するプリプロセッサで、 これを行うことで2kワードの壁を跨がないようにしていしてやるわけです。 また、要らない関数を削除することによって必要なメモリの使用量に余裕を作るわけです。

で、それらを踏まえてmath.hライブラリを一旦別名で保存した物をガンガン編集しまくっていくわけです。

具体的には、三角関数計算にはあまり必要無さそうな関数を片っ端から削っていくって言うのが1点。 その上で、各関数の境目に#separateを片っ端から挿入していくのがもう1点。もちろん、 各関数で使用している定数や変数の定義は削ってはいけません。

私が編集した算術演算ライブラリを眺めてみると、sqrt、SIN_COS、sin、cos、tan、ASIN_COS、asin、acos、atan、CEIL_FLOOR、ceil、 exp、log、log10、pwr、powの各関数と、それらで使用している各定数・変数定義類を残していました。多分もっと削っても大丈夫です。

もしかしたら、最新のCCS-Cではそんなメンドウなことをせずとも、改善されているかも知れません(未調査)。 まぁ、プログラムの処理内容を掴んだら、最新のチップ用に移植しちゃったほうがいいと思います。 最近のマイコンはフラッシュもRAMも容量がでかくなってますから…arduinoなんか使うのもいいでしょう。

PAD図

プログラムのPAD図を記して起きます。ちなみに普通のPAD図ではなく簡略化PAD図です。 簡略化PADについては別ページに纏めてあるのでそちらをご覧ください。

プログラムの1行1行すべてを書き表しているわけではなく、処理ブロック単位にまとめて全体の流れが解るような書き方にしています。 この辺は、設計基準次第で緻密に書いたり処理ブロックだけ書いたりと色々有るんだけど、まぁ、趣味の工作なら適当なさじ加減でいいでしょう。 (縮小表示をクリックすると別窓に大きく表示します)

プログラムの簡単な解説

あまり詳細の説明をしても意味が無いと思うので、ポイントとなる機能を掻い摘んでとりあげます。

経過時間の管理

角度の制御(下記参照)などの管理・制御を厳密に行うために、タンジェントスクリュー式やネコの目式の場合は、 動作を開始してからの経過時間を正確に把握しておく必要があります。

そのために、今回のプログラムではタイマー割込みを使って経過時間を把握することにしました。 使用するクリスタルの精度次第で、かなり高精度の追尾が実現できます。

具体的には、0.01秒(10ミリ秒)毎にタイマー割込みを発生させ、割り込みが掛かるごとにタイマーを”1”増やします。 そうすると、カウンタの値は正確に100分の1秒毎にカウントされることになるというわけです。 メインプログラム側でこのカウントを読めば、その時点での経過時間が把握できるってわけ。

普通のウォームギヤ式赤道儀の場合、経過時間って言う概念を気にする必要が無いんですが、 タンジェントスクリュー式や、今回のようなネコの目式の場合、処理上欠かすことの出来ないファクターになります。

角度制御(1)

ネコの目式の「肝」になるところです。

カメラや望遠鏡を回転させる速度(=角速度)は常に一定で23時間56分4秒に1回転すればいいわけですが、 それをウォームスクリュー式の赤道儀で実現する場合は、モーターを常時一定の角速度で回転させればいいことになります。 これは、「カメラや望遠鏡を回転させる角速度」と「モーターの角速度」が常に比例関係にあるからです。 地球の自転速度を緩急つけない限りそういうことになります。

一方「ネコの目式」では、「カメラや望遠鏡」と「モーター」の角速度が比例関係にありません。 三角関数を用いた制御が必要になります。そこが「ネコの目式」最大のミソ。

オイラの腕力や財力では、さすがに地球の自転速度を変えることは出来ないからね…

実は、ネコの目式の赤道儀を作る上で一番悩んだのがここ。「時間経過」と「角度」が比例しないということ。

理論上は「経過時間」を関数の引数にして「角度≒モーターのステップ数」を制御する方法なわけですが、 時間の制御は「割込み間隔」によって制御されていて、角度は「モーターのステップ数」によって制御されています。 これらはどちらも離散的な値しか取り得ません。そこが難しかったところ。

実際のsin関数は無理数ですから、一定の割込み周期で示される離散的な経過時間(引数)では奇麗に表すことが出来ないわけ。 必ず誤差が付きまとう…

グラフにしてみましょう。ウォームギヤ式の赤道儀なら、常に一定の角速度で回転すればいいので、 経過時間と角度が比例関係になるんですが、それと同じようにモーターを回すと…

こんな風になっちゃいます。横軸が時間軸、縦軸がモーターのステップ数(≒角度)です。 sinカーブを描かずに、一直線で進んでいきます。

経過時間はタイマー割り込みの回数、角度はステッピングモーターのステップ回数によって制御されるので、 一定の周期ごとにモーターをステップさせると、一直線に進んでいって誤差が蓄積していきます。

ホントはこのsinカーブのように角度の変化量が減ってなっていかないといけないので、 一定周期ごとにモーターをステップ(一定角速度で回す)するとこのように回しすぎちゃう。ってことで、こんな風に↓

時々間引いてモーターのステップを行わない部分(図の赤い線)を作って、 なーんとなくsin関数通りの曲線になるように制御することになります。

その具体的方法がナカナカ悩ましかった…というのも、モーターのステップもタイマー割り込みもどちらも離散的な値しか取りません。 離散的な時間、離散的な角度でしか制御できないので、連続値を取るsin関数をどうしても表現できないのは自明。 そこを加味してどう制御するか。

完全に誤差の無い制御は理論上不可能と言うことが証明されてしまっているわけですが、 そもそも工学の世界は常に誤差が付き物。工業の視点で大事なのは誤差を許容できるものかどうか見極めること。 数学と工業の境目はそこにある、と。学生時代に習いましたねぇ。

追尾誤差について

というわけで誤差との戦いです。許容できる誤差まで追い込めれば工業的にok。当然そこを目指します。

まず、星の追尾を行う上で生じる誤差は大きく分けて2つあるといえるでしょう。PID制御で言うところのP制御とI制御に関する誤差。 (とりあえずD制御のことは考えないことにして置きます)

P制御のエラーは微少時間(微小スケール)で見たときにあっち行ったりこっち行ったりという誤差、 I制御のエラーは時間の経過に沿って徐々に蓄積していく累積的な誤差。今回の赤道儀はPIDのようなフィードバック制御は行ってませんが、 誤差の意味合いの説明としてはまぁ一緒だろうということで取り上げました。

PとI、どちらの誤差もウォームギヤ式とかネコの目式といった方式に因らず必ず生じます。 赤道儀に付き物のピリオディックモーションも短時間に行ったり来たりするエラーなのでPエラーの類いと言ってよさそうです (ちょっと違う気がするけど…まぁ)。で、それらを「星を撮る」という目的に照らし合わせて問題ないレベルに収めればいいというわけ。

誤差について片っ端から整理していくときりが無いので、今回に関係するところだけ掻い摘んで書いていくことにします。

まず機械的精度や強度に関する誤差ですが、ネコの目式にした段階で「ガタツキ」は有効に防げており、 タンジェントスクリュー式で問題となる「滑り」による機械的誤差などは防げていると考えてよいでしょう。 (個別には色々な誤差についてモロモロ考えているんですが、とりあえず端折ります)

というわけで、前項の「角度制御(1)」のところでで出てきた誤差… タイマー割込み制御とモーターのステップタイミングの関係で生じる誤差…だけについて考えることにします。

ネコの目式のソフト制御面で生じる誤差について

… 続きます …

操作盤i/f

時間表示