PIC AVR 工作室別館 arduinoの館->TopPage->つくってみた->赤道儀コントローラ

赤道儀コントローラ基板

Arduinoを搭載した、赤道儀コントローラ基板です。ユニポーラタイプステッピングモータの赤道儀であれば、コネクタさえ合わせれば、 大抵の赤道儀に接続可能だと思います。

赤道儀とはなんじゃらほい?というお話はとりあえずこちらのページに

「Arduino互換CPU+赤道儀コントローラ」を1枚の「独自設計の基板」に押し込んだもので、Arduinoのアナログ出力機能を使って、 マイクロステップ動作をさせることが可能です。(もちろん、マイクロステップを使わなくても使えます)

できれば、CPU以外の部分をシールド化して、Arduino基板に挿して使える「赤道儀シールド」的にできるといいなぁと思ってますが、まぁいずれ。

ちなみに基板自体は、ウォームギヤを使った普通の赤道儀にも、ネコの目式赤道儀にも、 ファームの書き換え(計算ロジックの変更)によってどちらにも対応出来ます。

このページでは、基板周り(ハード周り)だけについて触れます。 赤道儀本体や、ソフト(スケッチ)についてはこちら

作戦

このポタ赤の制御基板の部分は、いわゆる「ウォームホイール+ウォームギヤ」式の赤道儀だけでなく、 スケッチの修正だけで「ネコの目式」の赤道儀 にも対応出来るように。(色々な赤道儀に使いまわし可能)

基板の機能だけについて言えば、ユニポーラのステッピングモータを使用する赤道儀なら、コネクタ形状さえ合わせれば、 大抵の赤道儀に接続できるように。(実際、この基板は古いkenko赤道儀のモータドライバとしても使っています)

CPU(Arduino互換)、モータを駆動するドライバIC(MOS-FETアレイ)、UI用の入出力装置(ボタンやLED、LCDなど)、 電源回路、プログラマ接続端子を一体化しただけのシンプルなモノです。

むしろ、赤道儀に限らず単なる汎用ステッピングモータドライバ基板(ユニポーラ・ステッピングモータ用)としても使えるもの。

フィールドで使うことを想定しているので、電池(充電池:できれば単三型)で長時間安定して動くように。 また、モータは色々なインピーダンス・出力のモノに対応出来るように、Arduinoの5V供給と、モータの給電を別系統に。

スケッチの書き込みには、USBシリアル変換チップを一体化するか、外付けにするか悩み、 とりあえずSparkFunのFTDI BasicBreakout互換に。どうせ動作中はUSB変換チップは使わないので。

そのほか、現場で使いやすいUIになるように、レイアウトとか操作系とかを工夫。

機能洗い出し、機能要件

洗い出した要件

これまでに自作赤道儀や、古いKenko製赤道儀を使ってみて思ったアレコレや、新しい自作ポタ赤の機能概要を念頭に置き、 さらには作りかけのネコの目式赤道儀のすべてに使いまわし出来ることを念頭に、コントローラに組み込みたい機能を洗い出し。

補足

LCD、LED、ブザーと、時間を告知できるしくみを3つも装備しているのには、訳があります。

折角のマイコン制御だから、ケーブルレリーズ端子を使って、オートレリーズの制御もやってしまおうかと思ったんですが…

カメラによって、「ミラーアップ」する時のレリーズアクションが異なるので(※)、 結局「手で」レリーズケーブルを操作した方が楽なが1点。 そして、撮影時間を調整するためにいちいち赤道儀に触る必要がある仕様だと、触ったときにブレが生じたり、 極軸がすれたりといった弊害もあるので、極力コントローラにも触りたくないのが1点。 あとは、手動の方が段階露出(ブラケッティング)がやりやすいというのが1点。

(※:レリーズを1回押すと、ミラーアップして2秒後にシャッターが切れる機種と、 「ミラーアップ」「レリーズ」と2アクションが必要な機種がある)

といったことを考慮して、「時間経過を表示する機能」だけにとどめ、「レリーズは手動(マイコン制御しない)」 という、比較的原始的な方が使いやすかったという、以前作ったプロトタイプの使い勝手を反映したものです。

外部設計(概要設計)

外部仕様

といった、洗い出したニーズを元にして、AT-MEGA328(AT-MEGA168)で実装可能な範囲で要件を絞り込みます。

補足:表示まわり

基本的には、キャラクターLCDに、利用できる操作方法や操作結果、経過時間等の情報を表示したりできるようにします。

ただし、LCDはバックライトが必要だし(暗闇なので)、そのバックライト自体が撮影時の「光害」の原因にもなるので、オプションとしています。

LEDも同様で、経過時間表示のためのLEDが光害となりうるので、極力暗く光らせたいところ。

ただ、実際は、LCDやLEDの光がカメラレンズに入り込むことは殆ど考慮不要というのが、実地テストの結果。 電流制限抵抗を「抑え気味」に設定しておけば、あまり気にするほどのことは無いと思います。

(ただし、あまり明るくしてしまうと、本人の「瞳孔」が開いてしまい、明暗順応に影響するので、暗いに越したことはありません)

LEDは2個搭載して、2個の光り方の組み合わせで色々な状態を表現出来るように。時間経過とか、動作モードとか。 ちなみにその片方はD13としておき、Arduinoのblinkスケッチを使ってLチカが出来るようにしておく →いずれ、シールド化したときに、このD13はArduino基板上のモノを流用する作戦。

補足:電源まわり

モータ給電は、以前のNJM2360の実験により、 数ワット程度なら充分取り出せることがわかっているので、この実験結果から回路定数をそのまま適用します。 使用するモータに合わせて、電圧を「可変抵抗」で調整できるようにしておきます。

ここから3端子レギュレータを使い、マイコン用5V電源を取り出すことで、安定した電源を確保。

補足:I/Oピンまわり

28ピンのMEGA328(MEGA168)では、操作用の入出力ピンが殆ど余らないと想像できます。 LCDは、4ピンモードによる接続(デジタルI/Oピン計6本)を想定(R/Wは使わない)しますが、それでも限られたピン数。

I2CタイプのLCDもありますが、これ設計した当時はあまり出回ってなかったのと、信号フォーマットが複数あるので、 とりあえずパス。今ならI2Cを選択するのも手かもしれない…

補足:シリアルI/Oまわり

でも、まぁ、他の方法を検討。スケッチの書き込みに使用するシリアルI/O端子を、実行時には汎用シリアルI/O端子と見做し、 外部から制御用信号をやり取りできる仕組みとしておきます。 これにより、複雑な操作を行う場合はこのシリアルI/O端子を使って、制御信号の入出力を行えるようにしておきます。(オプション)

その場合、電源端子は通常「USBシリアル→マイコン基板」なのを、逆に「マイコン基板→シリアル端子」と出来るようにしておいて、 外部I/F機器への電源供給も出来るようにしておきます。(ショートしないように配慮が必要→写真左側の「赤いスイッチ」の部分が該当)

補足:基板サイズ

基板面積:部品を基板サイズ(100mm×75mm)に並べてみると、現実的には微妙に足らないレベル。 このため、LCDなど「立体配置」しても構わない部品は、他の部品と立体配置することで、なんとかサイズ内におさめるように工夫。

具体的には、このLCDを外した写真の様に、CPUやブザーを、LCDの下に隠すようなレイアウトに。

補足:入出力端子

モータの取り付け端子は、多くのユニポーラ・ステッピングモータに合わせて、6ピン(コモンが2箇所)構成とし、 大半のユニポーラステッピングモータで使えるように。モータドライバを基板上に搭載し、 CPUからの信号によって電力制御が出来るように。

その他、取り付け穴などを装備。

といった感じで詳細を詰めていきます。

内部設計(詳細設計) 全般

全部書くと冗長過ぎるので、作るのに必要な部分だけピックアップ。

電源周り

以前の実験結果を元に、 NJM2360を使って、任意の電圧でモータに「ワット級」の給電が行えるように昇圧回路を組みます。 7ワットくらいは供給できることがわかっているので、回路定数はそのまま使用することにします。

想定しているのは、「コパル製SPG20-332などSPG20シリーズの1コイルあたり68Ωの1-2相励磁」や、 「古いKenko製赤道儀用の三龍社製P43シリーズ」、といったクラスのモータを単三電池で駆動できること。 これらはおよそ1~2W程度あればそこそこのトルクで駆動可能なことが実験から判っています。

ただし、一つ制約事項。

CPU供給用の5Vは、昇圧回路の出力からシリーズレギュレータで作るので、昇圧後の電圧は7V以上無いとCPUが動きません。 動作電圧が低く、大電流で大出力を得るステッピングモータの場合、制約が生じるかもしれません。

マーキュリーのステッピングモータST-42シリーズなどは、最大電圧で7ワット程度で使うと、1-1相励磁がギリギリだろうと思いますが、 供給電圧をギリギリ7V程度まで絞っておいて、PWM制御などで平均電流を下げるなどして消費電力をおさえれば、 これらのモータを1-2相励磁(相等)などで使うことも可能でしょう。それでも、このクラスのモータなら、 赤道儀程度なら充分なトルクが得られるでしょう。(モータの定格は、通常発熱に影響する「平均電力」です)

電源は、可搬性を考えて、電池(主に単三電池)での駆動を想定しています。

実験結果を元にすると、2Wクラスの負荷であれば、単三4本で2時間程度はもつと判っています。 気温によりますが、フィールドでも2時間程度は駆動することができる見込み。(計算上は1.2V×4×2Ah×効率0.7÷2W=3時間ちょっと)

必要に応じて、もっとパワーのある電源を使うなどを検討。

電源監視機能

単三電池、特にニッケル水素タイプの充電池による駆動を念頭においているので、過放電に対する対策を考えておく必要があります。

昇圧回路自体は、常に設定電圧に相当する電圧を出力しますが、電池(ニッ水電池)の出力自体は使用するに従い徐々に低下していきます。

ニッ水電池は、過放電してしまうと、寿命を著しく縮めてしまい、あっという間に使用できなくなってしまう恐れがあります。 そのため、終端電圧(電池1本あたりおよそ1.0V程度)以下になる前にモータへの給電を中止して、 電池に「過放電によるダメージ」を与えない仕組みが必要です。つまり電源監視機能です。

電源監視のために、ADC(Arduinoでいうところのアナログ入力)を使って、ニッ水電池からの供給電圧を監視し、 一定電圧まで下がったら、モータへの給電を供給カットします。
(Arduinoの消費電力自体は微々たるものなので、モータへの電力供給を絶てば、電池の「過放電」には充分対応できるものとみなします)

主に、「1.2Vニッ水電池4本を直列(4.8Ah)」、または「アルカリ電池4本(6V)」を電源に使うことを想定します。 すると、使用開始時点では、ニッ水で4.8V~6V程度、アルカリ電池では6V程度からの電源電圧をADCに繋ぐことになり、5Vを越えてしまいます。 さらには、モータによっては9Vとか、もっと高電圧の電源で使う場合も想定されます。このため、電池からの供給電圧は、 一旦分圧してからADCに繋ぐ必要があります。

今回は、1kΩ抵抗と2kΩ抵抗による分圧で、電池の電圧を1/3にして、ADCから読み出せるようにします。 これにより、5V÷(1/3)=15V以下の供給電圧であれば、監視可能です。 ただし、ある程度正確な電圧監視が出来る必要があるので、この分圧に使う抵抗は「1%」精度の金皮(or酸金)抵抗を使います。

I/Oピンまわり

Arduinoの開発環境を利用することを想定しているので、CPUにはAT-MEGA168/AT-MEGA328を念頭においています。 このため、I/OピンはこのCPUの制約に縛られます。

モータ制御、LCD、電源監視、LED、音声出力、シリアルI/O、ISP端子といった、最低限必要になる端子類の残りが、 ユーザからの操作に関わる「タクトスイッチ」などの入力機能に割り振ることができます。

たくさんのピンが使えるようなら、そして部品を配置できる面積が確保出来るなら、 ジョグダイヤル(ロータリーエンコーダ)とタクトスイッチで簡単操作が出来るようにしようと思ってたんですが、 両方の点でアウトでした。操作用には3つのデジタルI/Oだけしか使えなかったので、とりあえず3つすべてタクトスイッチに。

しかも、基板面積と配線を意識しながら部品を並べていったら、アッチコッチに配置する羽目になり、 操作系(U/I)に悪影響といえるほどのレベル。まぁ、その辺はLCD表示とソフト側でなんとかすることに。

部品配置

とりあえず、「ピンの数」をどう割り振るかは決めたので、あとは部品のフットプリントを考慮しつつ、 PCBEで部品と配線をザックリ仮配置。

CPU、LCD、圧電スピーカといった部品が結構かさばるので、階層化してLCDを立体配置にして逃げることに。 あとは、ザックリと配線をしてみて、出来るだけジャンパー線が少なくなるように配置を微調整。

刷り出して、背の高い部品を置いてみて、平面上も立体上も部品同士で干渉しないことを確認してみる。

できれば、LEDの配置とか電源スイッチの配置とか、色々使い勝手含めて調整したかったんですが、 スペース的に無理でした。両面プリント基板なら、もうちょっとナントカできたと思いますが…

モーターまわり

モータードライバは、MOS-FETが4回路入ったMP4401か、バイポーラ4回路入りのFT5754の、どちらでも使えるように。 CPUかとこれらパワートランジスタの間には抵抗を挟んでおいて、FT5754ならベース電流制限用に、 MP4401なら発振防止抵抗として機能する程度の抵抗値に設定。300Ω。

パワートランジスタ周りには、出来るだけ大きめのコンデンサで平滑化をはかりたかったものの、 部品を置くスペースが無く、結局すずめの涙程度のコンデンサを置くことに。 (あまり効果ないかも知れないと思いつつ、動かしてみたら一応安定して動くので、よしとしました)

コネクタは2.54mmピッチで、6ピン構成に。市販のモロモロのコネクタの中から適当に好きなものを使えるように。

昇圧回路、モータドライバ周りをあわせて、7W程度のモータ(駆動電圧7V~15Vの範囲)であれば、 この回路定数のままで動かせられるようになっています。これを超える場合、まずは昇圧回路周りを、 さらに大電力の場合は電池とモータドライバあたりを根本的に見直す必要がありそうです。

その他

圧電スピーカは、ソフト制御で矩形波を作ると面倒なので、MsTimer2ライブラリのPWMを拝借し、タイマー2用PWM出力ピンに配置。 (ただし、これは後々ちょっとした困った事態に。MsTimer2のライブラリソースをちょっと弄るはめに:後述)

昇圧回路のインダクタやコンデンサ、可変抵抗、圧電スピーカなどは、サイズやピン配置が部品(製品)によってまちまち。 なので、複数の穴を設けておいて、サイズやピン配置によって任意の部品が取り付けられるように配線。 特に可変抵抗は、3つの端子が直列になっているもの(多回転の可変抵抗)や、三角形配置(普通の可変抵抗)の両方に対応できるのがミソ。

タイマー2のPWM出力(D11)はMOSI端子とかぶってます。実験してみると、圧電スピーカを直接繋ぐとそのキャパシタ成分が邪魔して、 ISP書き込みに失敗するようです。なので、とりあえず音量が実用レベルになる範囲で、大き目の抵抗をシリーズに入れて、 安定してISP書き込みが出来る範囲を探ってみた→10kΩ抵抗を挟めば、とりあえずISPに失敗せず、音も出ることが判明。

内部設計(詳細設計) 個別機能

主に回路図関係について。

回路設計に関するゴニョゴニョしたこととか、使用部品とか、それにまつわるゴニョゴニョとか、 プログラム(スケッチ)を書く際の注意事項や制約事項に関することのまとめです。

回路図

サンハヤトのクイックポジP10Kサイズに収まるように部品を並べてみて、詰め込めるだけ機能を詰め込んでみました。

その結果の回路がこんな感じです。(クリックすると別窓で原寸表示)

回路図の補足

昇圧回路まわり

左上は、NJM2360を使った昇圧回路。定数定義関係は 以前の実験をご参照。

可変抵抗で、出力電圧を調整出来るようにしてあります。回路図上は、9V出力という想定で書いてます。

スイッチングTRは、2W以上のモータにも対応出来るように、外付け2SC3709Yで大電流に耐えるようにしています。

電圧監視用に、1%誤差の金皮抵抗(1kΩ、2kΩ)を使って、電池の電圧を1/3に分圧しています。 抵抗値がちょっと小さめなので、無駄に電力消費している感があります。 もうちょっと大きい抵抗を使ってもいいんですが、計算が楽そうな整数比になりにくいので、とりあえずこの抵抗値に。 (10k-20kだとノイズに弱そうなので、せいぜい1.8k-3.6kですかね)

SBDは、平均1A程度流せるものなら何でもよいでしょう。出来るだけVfと逆電流が小さい方が高効率です。 大出力モータを使う場合は2A流せるものがよいでしょう。

電源周りの1000uFコンデンサ(2個)は、ノーマルタイプではなく、低ESRがよいです。効率がだいぶ違います。 東信の茶色いコンデンサ(UTWRZ)が、安い割りに高効率なのでお勧めです。

インダクタは、太陽誘電の黒い22uH 2.3Aを使いました。

なお、直流重畳電流=5Aなどの大電流タイプを使うと、2.3Aよりも効率が落ちたりするっぽいので、 「大は小を兼ねる」とは考えない方がよいみたいです。2.3A前後でチョイスするとよいでしょう。 メーカーは、太陽誘電、TDK、NECトーキン、サガミエレク…どこでも大丈夫だと思います。

1.3A程度のものでも2W程度は駆動できますが、それ以上に負荷が大きくなると、NJM2360が間欠発振したり、 下手すると壊れる恐れがあります(2W程度なら、そもそも外付けTRも不要ですし)。そういう意味でも2Aくらいがよろしいかと。

スイッチングTR、SBD、コンデンサは、効率に大きく影響し、電池駆動の場合、稼働時間に直影響します。 多少コストをかけても、稼働時間を優先した方が便利に使えるのではと思います。(実際、微々たるコストです)

なお、当然ですが、昇圧動作しかしません。降圧動作はしないので、電源電圧とモータの駆動電圧はそれを踏まえて選択してください。

モータドライバ回路まわり

モータドライバには、MP4401を想定しています。ピンコンパチのICの、MOS-FETのMP4410、MP4411、MP4412や、 バイポーラのFT5754Mでもそのまま動くはずです。MOS-FETの方が効率はよいでしょう。

X、/X、Y、/Yは、それぞれPD6、PB1、PD5、PB2に繋がっています。(ArduinoではD6、D9、D5、D10)

各ピンとも、MEGA168/MEGA328コアのCPUや、ATmega32u4コアのArduino(や互換CPU)なら、 アナログ出力を使ってマイクロステップが可能です。

飛び飛びの番号になってますが、「アナログ出力ピン」可能かつ、LCD用ピンなどとの兼ね合いで、こんなピン配置になりました。

今回モータドライバに使ったICは、ディスコンのモノばかりなので、省電力ならTD62064や、 ディスクリートのMOS-FETなどで組みなおす手もあると思います。ただ、基板面積的にはかなり厳しくなりそうです。

5V電源とシリアルI/Oまわり

5V電源は、昇圧回路の出力から7805で作り出しています。こうすることで、モータへのオンオフで生じるノイズをCPUが受けないようにしています。 なお、5Vを取り出すためには、昇圧回路の出力は7V以上に設定しておく必要があります。 (このため、5Vモータなど、電源が7V以下のモータは使うことが出来ません)

どうしても5Vモータを使いたいと言う場合は、CPUを3.3V駆動にして(レギュレータも3.3Vを使って)、 CPUクロックを10Mhz以下(Arduinoとして使う場合は8Mhzクロックにして、ブートローダは3.3V8Mhz用使用)で使ってください。 使用する電源も5V以下(単三3本とか)にする必要があります。

CPUまわりが使用する電流量は、78L05で充分なんですが、シリアル端子経由で外付け機器を繋ぐことを考慮して、 少し容量に余裕を持たせて7805を使いました。

5V電源の供給先は、CPU、LCD、ISPコネクタ、そしてシリアル端子です。回路図のシリアルコネクタの5V回路周りは、 普通のArduinoとちがってちょっと癖があるので注意が必要です。

この5V端子は、スライドスイッチ経由で7805に繋がっています(スイッチは常時オフ設定にしておいてください)。

Arduino-IDEからスケッチを書き込む際には、(常時オフなので)USBからの給電では書き込むことができません。 電池などから電源を供給しておき、昇圧回路で昇圧→7805で5Vを生成して、CPUに5Vを供給しておく必要があります。 そうしないと、IDEからスケッチを書き込むことができません。

かなり不便(というか変態的回路)ですが、わざわざこうしたのは、シリアル経由で「ケーブルレリーズ」 など色々な機器を外付けして、今後、複雑なコントロールにも対応出来るようにしたかったからです。 (そういう機器を接続するときだけスイッチをオンにして、外部機器に5Vを供給する経路として使います…通常と逆方向なことに注意!)

操作を間違えると危ないので、外付けコントローラをつける予定が無ければ、スイッチ自体を取り付けない方が安全でしょう。

シリアルI/O端子は、SparkFunのFTDI Basic Breakout5V版に合わせてあります。これと同じピン配置(Arduino Pro互換)なら、 サンハヤトのUSBシリアル変換基板などどれを使っても構いません。

(今思うと、7805のところにダイオードで逆電圧の保護回路組んでおけばよかったですかねぇ)

CPUまわり

CPUには、DIPタイプのAT-MEGA168かAT-MEGA328を使うことを想定しています。AT-MEGA8でもとりあえず使うことは出来ると思います。 Arduino互換とするので、16Mhzクロックを使用します。

D5、D6、D9、D10(AT-MEGAではPD5、PD6、PB1、PB2)のアナログ出力を使って、 ステッピングモータをマイクロステップで駆動出来るようにしています。

ただし、AT-MEGA8を使った場合(Arduino-NGかその互換)、D5、D6はPWMではないので、マイクロステップは使えません。

UART端子はArduino-IDEとの接続用に、SPI関係端子はISPによるHEX書き込み用に使えるようにしています。

アナログ0番(PC0)には、電池電圧を1/3に分圧したものを繋いで、電源電圧の監視が出来るようにしています。

周辺装置まわり

LCDの接続は、4ピンモード(書き込みのみ)で、En、Rsも含めて6ピンだけで繋いでいます。 LCDのD4、D5、D6、D7、En、Rsはそれぞれ、D16、D17、D18、D19、D4、D3(AT-MEGAではPC2、PC3、PC4、PC5、PD4、PD3)に繋いでいます。

LCDのバックライトは、秋月で買うと付いてくる付属の電流制限抵抗(100Ω:黄緑の場合)をそのままつけてもいいですが、 100オームだとそこそこの明るさがあるので、もっと暗くてもイイという場合は、2kΩなど使っても、暗闇なら充分視認出来ると思います。 (実験してみて、丁度いい抵抗値を見つけてください)

3つのスイッチSW1、SW2、SW3は、それぞれD2、D15、D8(AT-MEGAではPD2、PC1、PB0)に割り当てています。すべて負論理です。

SW1、SW2、SW3はそれぞれ、写真の左上、真ん中、右下のタクトスイッチに割り当たっています。(写真の黒いタクトスイッチはリセットです)

リセットとSW3が逆になっていれば、わかりやすかったんでしょうけど、基板面積の都合上、どうにもなりませんでした。

2つのLEDは、電流制限抵抗に1kΩを使っています。もう少し暗めでもいいかもしれません。

MOSI(PB3)には、圧電スピーカを接続しています。ダイレクトに繋ぐとISPの読み書きに失敗するので、 10kΩの抵抗を挟んでいます。若干音量は下がりますが、大抵の圧電スピーカで音が出ると思います。(他励式を繋いでください)

この端子は、PWM出力端子(アナログ出力D11)なので、MsTimer2の割り込み周期と同じ周波数で発振出来るとにらんで選びました。

ただし、実際はMsTimer2ライブラリは、ノーマルの「カウンタオーバーフロー」を使っていて、 このモードだとPWM出力と併用できないんですよね。(しかも、微妙にクロック単位の誤差が時々生じる: 詳しくは以前のブログ記事ご参照)

というわけで、CTCモードにしないと、PWMと併用できません。オイラ謹製のMsTimer2もどきを使うか、 直接SFRを弄ってCTCモードでPWMと併用出来るようにする必要があります。

PCBE用基板データ

クイックポジ10Kサイズに入るように、PCBEで回路書きました。片面用で描いてます。PCBEで開いて使ってください。

Arduino互換赤道儀、PCBE用回路図 PCBファイル

表裏を間違えずに、クイックポジとかで感光してエッチングして使ってください。

いつものことですが、PCBEの基板データ上には、抵抗値やコンデンサ容量などが一切書かれていません。

部品の配置は、以下の写真を参考にしてください。(それぞれ、クリックで等倍ピクセル表示します)

なお、「PCBEは使ってないよ」という方のために、PCBEから刷り出した、感光基板用のPDFファイルを貼っておきます。 プリンタでOHPシートなどに印刷して、クイックポジなど感光基板で使ってください。

クイックポジ10K用(1枚用) PDFファイル

クイックポジ12K用(2枚用) PDFファイル

固定抵抗とジャンパー線

固定抵抗とジャンパー線は、こんな感じで配置します。注意点としては3つあります。

注意点:(1)写真では、10kΩと300Ωが同じ大きさ(1/8W)で、しかも色が似ています。間違えない様に取り付けてください。 (2)小さい方の水色抵抗は、誤差1%の金皮抵抗です。(3)大きい水色抵抗は酸金ですが、0.15Ωと、普段見慣れない抵抗です。 酸金である必要は無いのですが、0.15Ωで入手が容易なのは、写真に有るような、酸金でワット級の大きいものばかりだろうと思います。

セラミックコンデンサと可変抵抗

水色の積層セラコンは、すべて0.1μFです。CPU傍にある茶色のセラコン2個はクロック用の18pF。 8ピンソケット傍の330pFは昇圧回路発振周波数調整のセラロックです。

可変抵抗は、写真では水色の「多回転」タイプが写ってますが、それほど精度が必要なわけではありません。 普通の可変抵抗でも、多回転タイプの高精度可変抵抗でも、どちらでも使える意味で配置してみた…的な例です。

特に左側はLCDのコントラスト用なので、普通の半回転の可変抵抗で充分です。右側は昇圧回路の電圧調整用なので、 多回転の方がいいかも知れませんが、所詮、モータ給電用電源なので、あまり高精度にこだわる必要は無いかもしれません。

なお、昇圧回路の電圧調整抵抗は、NJM2360だけ差し込んで(CPUは差し込まずに)、 昇圧後の電圧が何ボルトになるかを調整してから、CPUを差し込むのが安全だろうと思います。

可変抵抗は、写真では都合により片方が20kΩBになってますが、10kで充分です。(10kでも13~14Vくらいまで調整できます)

20kΩにすれば26Vくらいまで調節出来る計算ですが、よほどコイル抵抗が小さいモータじゃないと、 昇圧回路がパワー不足で間欠発振してしまうでしょう。

その他モロモロのパーツ

その他、電解コンやトランジスタ、LED、レギュレータ、タクトスイッチ、モータドライバ、モータ用コネクタ、 圧電スピーカ、LCD用14ピン用コネクタ…といった部品を、写真の様に取り付けていきます。

ICソケットは、CPU用は左下が1番ピン、NJM2360は左上が1番ピンです。

電解コンは写真の向きに。LEDは2個とも下がアノード、上がカソードです。それぞれD13とD7に繋がっています。

2SC3709は手前側(写真下側)がプリント面で、7805は右側がプリント面です。(78L05の場合は左側がプリント面)

DCコネクタの横にあるのが電源スイッチで、1A程度は流せる容量のあるスイッチを使ってください。

左端のシリアルコネクタ用の電源スイッチは、この写真では付けていません(必要に応じて付けてください)。

パワートランジスタアレイには、MOS-FETのMP4401を取り付けています。このICは左右対称のピン配置なので、どっち向きでもかまいません。 また、バイポーラでピン互換のFT5754Mでも動きます。ただし、このような1Aかそれ以下程度の電流で使う場合、MOS-FETの方がロスが小さいので、 MOS-FETのMP4401の方が有利でしょう。

タクトスイッチは、SW1、SW2、SW3がそれぞれ、D2、D15、D8に繋がっています。負論理になっています。

あともう1ピンデジタルI/Oを確保して4ピン取れれば、 2ピンをロータリーエンコーダに、残りの2ピンに「決定」「キャンセル」のボタンを付けられるので、 使いやすいUIに出来たかもしれないんですが…

モータ制御のピンは、写真の様にX、ComX、/X、Y、ComY、/Yの順になっています。なお、X、/X、Y、/Yは、 それぞれD6、D9、D5、D10に繋がっています。

LCDは4ピンモードなので、RS、E、DB4、DB5、DB6、DB7、及びVdd、Vss、Voを使っています。 RSはD3に、EはD4に、DB4~DB7はD16~D19に接続しています。

圧電スピーカはD11に繋がっていますが、これはD11としてというよりは、PWM(timer2のアナログ出力)として利用します。

裏面

ご参考までに、プリント基板の裏面です。エッチングのときに表裏を間違えない様に。また、穴あけ位置などのご参考に。

動作確認

ブートローダまわり

Arduino互換機なので、ブートローダを書き込む必要があります。ブートローダの書き込みについては、 このページとかをご参考に。 搭載するCPUに合わせて、MEGA168やMEGA328用のブートローダ(hexファイル)を書き込んで、fuseビットやlockビットの設定を行ってください。 (書き込み時、外部電源が必要)

スケッチは、FTDI BasicBreakout経由で書き込むことを想定しています。Arduino-IDEから、 MEGA328なら「Duemilanove328」、MEGA168なら「Diecimila/Duemilanove168」を選択して書き込んでください。

なお、USBからの給電はCPUには届いていないので、スケッチをアップする際も外部電源の接続が必要です。 外部電源→昇圧回路→レギュレータ→CPUという流れで5Vが供給されるので、電池でも、スイッチングアダプタでも、 何か適当な電源を繋いでおけば、書き込みは出来ると思います。

一般的なArduinoと同じように、D13にLEDを搭載しているので、動作確認用に「blink」などを書き込めば、 ブートローダも含めた動作確認が行えます。

LCDまわり

LCDは、Sunlike社のSC1602シリーズのピン配置になっています。(他のサイズや他社製の場合、電源端子が逆になっていないか確認要)

電源なども含めてピン配置が合うなら、「8文字×2行」や「20文字×4行」なども接続して制御できるはずですが、 基板上のネジアナが16×2のサイズに合わせてあるので、特に要件がないかぎりは16×2がよいと思います。 (なお、8×2や20×4の液晶は、大抵VddとVssが逆の配置になっていると思います)

4ピンモード(書き込みのみ)の配線になっています。ピン配置の設定も含めて、以下のスケッチで確認できるはずです。

#include <LiquidCrystal.h>

LiquidCrystal lcd(3, 4, 16, 17, 18, 19);

void setup()
{
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("hello, world!");
lcd.setCursor(5, 1);
lcd.print("arduino.");

byte neko[8] = {
B00000,
B01010,
B11111,
B11111,
B01110,
B00100,
B00000,
};

lcd.createChar(0, neko);
lcd.setCursor(15, 1);
lcd.write((uint8_t)0);    //for lcd library on arduino 1.0

}

void loop() {
  
  int i;

  for (i=0;i<10;i++){
    lcd.setCursor(0,1);
    lcd.print((float)i,2);
    delay(1000);
  }
}

実行すると、こんな感じになります。(あと、左下に秒数経過表示します)

右下に表示しているユーザ定義文字のキャラは、「ハートマーク」にも見えますが、「ネコ」です。 ハートが表示されてしまった方は、回路やスケッチをよく見直すか、前世でネコと喧嘩してなかったか思い出してください。

LCDのコントラストは、適当に見やすい位置にあわせてください。左の可変抵抗が「コントラスト用」で、 右の多回転可変抵抗が「電圧調整用」です。

タクトスイッチ、LED、スピーカ

タクトスイッチは、D2、D15、D8に繋がっていて、負論理です。IDEに収録されているサンプルスケッチの「02.Digital」の 「Button」を使って確認できます。(スケッチの入力を各ボタン用に修正して実行)

LEDは、D13は上記で確認済みでしょう。「Bklink」のサンプルスケッチの出力をD7にすれば確認出来ます。

圧電スピーカは、tone関数の使い方のページ にあるスケッチとかを使って、D11に出力することで確認できます。

ただし、tone関数で音を出す場合、「duration」を指定してしまうと、ステッピングモータ制御信号のタイミング制御(割り込み)と衝突して、 タイミング制御が上手く行かないかもしれません。

D11は、timer2のPWM出力端子なので、これを利用すると簡単に音を出すことができるのですが、 MsTimer2ライブラリとPWM出力は、標準で両立しないので、色々と工夫が必要かもしれません。

ステッピングモータ

ステッピングモータは、以前書いたステッピングモータのページ のスケッチがそのまま使えるはずです。

X、Y、/X、/Y及び2本のコモン端子を間違えずに接続して、スケッチを実行してみてください。

まとめなど

もろもろの機能確認が出来たら、各赤道儀に合わせてスケッチを書いたり、赤道儀自体を作ったりして、動かすことが出来るはずです。

PCBEで描いた回路図ですが、エッチング液の疲労を抑えるために、空き地をベタパターンにしました。

が、「とりあえずベタで塗っときゃいいんだろ」と適当にしてしまったのが間違え。GNDにもVccにも繋がってない、 「浮いた」パターンがあちこちに出来てしまいました。こういう「浮いた」パターンは、周囲の電波ノイズを拾って、 結果「ノイズ源」として働いてしまうらしいと、描いた後で知ったんですが、時既に遅し。

まぁ、ほぼ純粋なデジタル回路だし、アナログといえば電源監視程度で、今のところ問題もなく動いています。 気になる方は、PCBEで適当に編集しなおして使ってください。

おまけ

一般的なArduino基板(UnoやDuemilanoveなど)と組み合わせられるシールドを作ることを想定して、 シールド用の回路も描いてみました。

先ほどの回路と、ピン配置は同一なので、スケッチは同じものが使えるはずです。

ただし、オリジナルArduinoのシリアルI/O(TX、RX)は、電源周りの配線が上記の回路と異なるので、 シリアル接続の外付け回路は電源周りの回路に注意が必要です。 (TX、RX経由での外付けコントローラを取り付けしない場合は、特に気にする必要はありません)

Arduino用シールドとする場合の回路

回路図描いてみただけなので、PCBE用の回路パターンはありません。多分動くと思いますが、動作未確認です。

暇があれば、シールド基板のPCBE回路も描いてみようと思います。

電源周りの注意事項

回路全体の電源ですが、単三電池4本程度をつかって、シールド側の昇圧回路で昇圧して(9Vとか12Vとか)、 それをArduino基板のVin端子からArduinoに供給します。

昇圧後の電圧をArduino基板に供給する必要があります。ArduinoのDCコネクタに直接電池を繋がないで下さい。 モータやレギュレータが電圧不足になります。 (電池ボックス→シールド側にある昇圧回路→Vin端子経由でArduino基板のレギュレータ→5V出力をCPUやシールド上のLCDなどへ)

なお、CPUやLCD用の5Vは、Arduino基板上の5Vレギュレータで生成するので、 昇圧後の電圧は7V以上かつレギュレータの定格以内としておく必要があります。

各Arduino基板の電源切り替え機能との兼ね合い

Arduino DiecimilaやUno、Leonardoなどあたらしい基板の場合、昇圧後の電源線(9Vとか12Vとか)を、 シールドからVin端子経由でArduino基板に渡してやれば、自動的に「外部電源/USB給電」の切り替え機能が働いて、 Arduino基板側で5V電源が選択されます。外部電源の場合は、Arduino基板上の5Vレギュレータで、 USB接続の場合は、USB端子からの5Vで、それぞれCPU周りに5Vが給電されます。

スケッチの書き込みは、外部電源(電池から昇圧回路経由)でも、USB経由(PCからの5V)でも動きます。 (USB給電の場合は、モータへの給電が働かないので、当然モータは動きません)

Arduino DuemilanoveやNGなど、古い基板の場合はArduino基板上のジャンパで電源を手動切り替えする必要があります。 スケッチを書き込むだけであれば、「USB給電」側にジャンパを設定しておけば書き込みが出来ます。

動作させるときは、ジャンパ線を「外部給電」側にジャンパを差し替える必要があります。 この場合、(昇圧前の)電池はシールド側に繋いでおき、シールド上の昇圧回路の出力をVin端子経由でArduino基板に供給します。