2016年11月21日

OPi Zero クラスタボード(1)



OPi Zero クラスタボードの回路と部品配置が決まって来た。上のパターンは、INA219 の部分で、なんとか乗せることが出来た。まずは、ここらでスナップショット。 。パターンが出来ると発注したく .... 少々手直しは入れたが我慢できず発注!

 ・回路図:suzbrd_opizero_v0.06.pdf
 ・EAGLEファイル:suzbrd_opizero_v0.06.zip
 ・発注ファイル:suzbrd_opizero_v0.06-out.zip
今回は、ITEAD Studio にした。送料が $6.43 で合計 $21.33 。Fusion PCB(Seeed Studio)より少し安い。
v0.06 の問題点:
 ・ MINI-360 フットワーク の幅が 0.5mm 程狭い。0.35 inch ではダメで 0.37 inch ?

11/22 発注 11/30 発送 12/06 受け取り(予定)
 ・2週間ほどで受け取れるようだ。


時系列で思いついたことを記して来たが、よくわからなくなってきているので、まとめを書いておく。この記事は、変更があったら、訂正を入れる。

ボードについて


サイズは、99.06 x 49.53 mm 。これで FIX 。サイドに 2.54mm の余白を作ったので、PCBレール を使うことが可能。この上に 2つの OPi Zero を取り付ける。そのためには、13pin と 3pin のピンヘッダを取り外し、ピンソケットを下側に付けなければならない。
ピンヘッダを一本一本外すことは容易いが、スルーホールの中のハンダの除去が難しい。

左側の OPi Zero を ノード1とする。右側はノード2。基本的に対等ではあるが、一部違う所があり、普通はノード1がマスターになることを想定している。

ボード上にある3つの長方形は、MINI-360 DC DC コンバータモジュール。DJ ジャックの 12V (〜 20V) を入力し、OPi Zero と ボード上の USB に 5V を供給する。この DC DC コンについても改造が必要。1つは、EN ピンの引き出し。もう一つは、可変電圧になってる所を 確実に 5V にする改造 -- こちらは必須ではないものの、少なくとも 5V に調整済みのうえ取り付ける必要がある。
右側のエリアの前後に USB type-A メスが付く。DJ ジャック側を USB1, コネクタ側を USB2 とする。この2つの USB はそれぞれホストの切り替えが可能である。

この DC-DC コンは、aliexpress で MINI-360 DC DC で検索。
よくよく見ると、空きパターンがあるタイプがある。こちらの方が改造には都合が良い。 まぁ古いタイプみたいだから、写真はどうであれ、空きパターンがない方が来るだろう。

裏面はこんな感じで、なにもない。
IC自体 は MP2307 -- 4.5 〜 23V の電源入力レンジ。放熱が十分であれば、連続3A の出力が出来る。(ピーク 4A) 。だが、このモジュールは インダクタが小さいのでそこまで流せない。2.3 A は流せるが連続は無理であった。連続では 1.8A ということになっている。

電圧の設定は、出力を VR + 8.2K で分圧し FB に接続している。VR を外し抵抗と交換することで、固定電圧にする。
誤差を無視して計算すると、

39k : 5.32v
33k + 470k パラ: 4.98v
22k : 3.41v
22k + 470k パラ : 3.30v

こんな感じ。

上限を指定したうえで調整したいのであれば、VR とパラに 抵抗を入れる。最大出力が 17V であることから VR はおそらく 150k 。
56k パラ : MAX 5.52v
27k パラ : MAX 3.51v

この改造の方が良いかも。


2012 の抵抗を付けてみた。5番ピンがFB でそれが VR の右上に接続されている。だから、これでパラレルに接続したことになる。こういう改造なら、空きパターンのない方でも楽。

確認してみた。12V 電源で、5V 系は 5.33V まで。3.3V 系は 3.34V までだった。まだ回せるかも知れないのだが、だいたいこんなもの。作った 5V 系 は 5.22V に調整してタブレット用に使う予定。3.3V 系は ESP32 ボードに回す。

なお、2012(0805)サイズで、これらの抵抗値を入手するには、例えば この25種 が安価。
15K 18K 20K 22K 24K 27K 30K 33K 36K 39K 43K 47K 51K 56K 62K 68K 75K 82K 91K 100K 120K 150K 180K 200K 220K


2A 連続出力可能なのか?

USB resistor というのを入手できたので、試したみた。1A は問題なさそうに思える。2A の設定で 2.3A 流れるのだが、しばらくすると一瞬切れてまた 出力されるのを繰り返す。どうやら効率が急に落ちて温度が上がりすぎるようだ。データシートによるとサーマル・シャットダウンは 160℃。内部ではそこまで温度が上がってしまうということ。... というわけで少々当てが外れた。

信号線のアサインを後で説明するが、その前に、OPi Zero コネクタの信号線について

26pin CON 13pin CON 3pin CON
3V3(1) 5V (1)5V (1) GND
TWI0-SDA 5V GND (2) U0RX
TWI0-SCL GND USB-DM2 (3) U0TX
PWM1 U1TX USB-DP2
GND U1RX USB-DM3
U2RX IO1 USB-DP3
U2TX GND LINEOUT_R
U2CTS TWI1-SDA LINEOUT_L
3V3 TWI1-SCL TVOUT
SPI1-MOSI GND MIC-MBIAS
SPI1-MISO U2RTS MIC1P
SPI1-CLK SPI1-CE0 MIC1N
GND (26)SPI1-CE1 (13)IrRX

3pin には、シリアルコンソールが割り当てられている。13pin は、USB 2ch と アナログ系など。このうち USB の 4pin分のみ使用する。

26 pin は、デジタル系。すべての信号は、GPIO として使用できるが、専用の機能が割り当てられている。また、これらは 20mA まで電流を流せる。

機能として、2 つの I2C (TWI0,TWI1) 、2つの UART (U1,U2) 、および PWM1 を使用し、後は GPIO として使用する。



信号線の割り当てと機能

ノード1 U0TX - ノード2 U1RX
ノード1 U0RX - ノード2 U1TX
ノード2 U0TX - ノード1 U1RX
ノード2 U0RX - ノード1 U1TX
相手の コンソールを UART1 と接続してある。抵抗を間に入れるようにしており、接続しないことも可能


ノード1 U2TX - ノード2 U2RX
ノード1 U2RX - ノード2 U2TX
ノード1 U2CTS - ノード2 U2RTS
ノード1 U2RTS - ノード2 U2CTS

UART2 は、CTS/RTS も含め、相互に接続。抵抗を間に入れるようにしており、接続しないことも可能。CTS は、自ノード電源でプルアップしている。電源が入ったときに CTS が L レベルなら、ブートしないような制御にしようと目論んでいる。

ノード1 TWI0-SDA - ノード2 TWI0-SDA
ノード1 TWI0-SCL - ノード2 TWI0-SCL
まず、この I2C チャネルを使うために、OPi Zero の改造が必要。これらは、Zero 内で、自ノード電源でプルアップされている。共用して使うため、外さないといけない。プルアップはこのボード内の常設電源に対して行う。

このチャネルは、ボード内の いくつかのデバイスに接続できる。(オプション)。外部にも出力されていて、想定しているデバイスに接続できるようにしている。(後述)


R151,R152 を外すだけなので、比較的容易な改修。

ノード1 TWI1-SDA - ノード2 TWI1-SDA
ノード1 TWI1-SCL - ノード2 TWI1-SCL
ボード内では使用せず、外部に接続する。この I2C チャネルを使うために、OPi Zero の改造が必要で、プルアップ抵抗を外さないといけない。このプルアップの取り外しはリスクが大きく TWI0 のものより困難である。今のところ、どのように使用するか想定していない。

プルアップ抵抗を外さないと、片側が電源OFFのときプルダウンになってしまう。そのため、ボード内のプルアップも必要になる。それでも H が 2/3 VCC で通信が出来ない恐れがある。その上 通常時でも 1/3 の 約 700 Ωを駆動しないといけない。Zero 自体はいけるにしてもデバイス側は無理かも知れない。使えればラッキーというところ。


R153,R154 を外すのだが、横の R16,C14 にダメージを与えないようにしなければならない。特に R16 を飛ばしてしまうと起動しなくなる恐れがある。

PWM1
圧電サウンダを取り付け BEEP として使用することを想定し、トランジスタを介した出力になっている。これは、ノード1、ノード2別個にある。圧電サウンダを使う場合、パラレルに 抵抗もしくはインダクタを入れる。入れなければただのオープンコレクタ出力である。

MOSI(GPIO)
それぞれ相手ノードの電源を ON/OFF できる。Nch FET を介して MINI-360 の EN に接続されており、H にすると OFF となる。強制リセットの代替として使用。

MISO(GPIO)
USB1 を切り替える機能。デフォルトはノード1だが、L にすると、ノード2に切り替わる。共用なので H にしてはいけない。

IO1(GPIO)
USB2 を切り替える機能。デフォルトはノード1だが、L にすると、ノード2に切り替わる。共用なので H にしてはいけない。

CLK(GPIO)
ボタン1:外部にタクトスイッチを接続し、ボタン入力 として使えるが、L にすることで、リモートでのボタン押下にも使用できる。ノード1、ノード2共用。抵抗を入れてあるので、出力がぶつかっても問題ない。

CE0(GPIO)
ボタン2:外部にタクトスイッチを接続し、ボタン入力 として使えるが、L にすることで、リモートでのボタン押下にも使用できる。ノード1、ノード2共用。抵抗を入れてあるので、出力がぶつかっても問題ない。

おまけとして、ダイオードを通した外部出力ピンを持っており、ノード2から引き出したリセットに接続できるようにもなっている。このボードをクラスタではない使い方をしたときに、使うケースがあるかも知れない。(後述)

CE1(未使用)
唯一の未使用ピン。使うとすれば、リブート用。リセット信号を取り出しここにつなぐ。あるいは 割り込み割り当てて L になったらリブートさせる。後者は代替案であり、リセットほど強制力はない。でもリセット信号の取り出しが困難ならば、ないよりはマシだろう。


リセット信号がどこにあるかと言うと、C301 -- すなわち、CE1 の隣であった。CE1 につなぐのはどう見ても簡単。



クラスタ以外での使用方法

USB の切り替えには、NX3DV221 というチップを使用する。これの入手が難しかったりするが、それ以前にあまりに小さいためにハンダづけが困難である。そういう理由もあって、他の利用方法も検討している。

中央右、線が集中しているところが、NX3DV221 のパターン。基板は作れそうだが、実装は無理かも知れない。


クラウド
とにかく、多数の Zero を動かしたいという用途では、USB の切り替えはもとより、増設USB などいらないだろう。相互の再起動の仕組みや、コンソールの接続は有用だろうから、2つの DC DC コンだけ生かす。

こういう使い方では、13pin コネクタの取り外しも必要ない。まぁコンソール接続もいらないという場合は、 3pin コネクタの取り外しもしなくてよい。そういう使い方でも 電源が 2個に1つで済み、12V電源が使えるのはメリットだろう。

開発マシン+開発ターゲット

さらに簡略化して、DC DC コンを1つにする手もある。MINI-360 は、1.8A まで連続で流せる能力があるので、ノード1本体のUSB から ノード2の USB OTG に給電する。( ちなみに OPi Zero は ‘Armbian IoT settings’ だと アイドル状態で 110mA とかそのレベルらしい。)

相互接続も ノード2コンソール程度にしておく。運用ではあまり有用ではないのだが、1台を主に実験用に使うならば意味がある。

こういう用途でのみ、ノード2リセット信号の取り出し→ボタン2への接続を利用する。


I2C デバイス

EEPROM (1010xxx : 1010000 外付け / 1010001 内蔵)
クラスタを設計する場合、わずかな容量であっても共有ストレージが必要だろう。そのために EEPROM を接続する。接続可能なのは、正副2系統。幸いなことに、RTC + EEPROM モジュールが格安で手に入る。これを外付けにして正系とする。副系は、ボード内に付けられる。

正系が外付けなのは、このボード自体を交換する場合を想定してのこと。交換したらすべての情報がなくなるのであれば、復旧に手間がかかる。回路などないに等しいのだが、一応 DC DC コンが壊れる可能性がある。 また、このボード自体が実験用である。改修して交換みたいなことはするだろう。

... ということにしておく。実際の装置でも EEPROM をケーブルで接続し筐体に貼り付けるようなことをするそうだ。それがないと、ボード自体を交換したとき困るのは本当らしい。

この RTCモジュールは aliexpress で DS1307 を検索

DS1307 (1101000)

RTC モジュール。まぁあったほうが良いだろう。幸いなことに、必須とした EEPROM モジュールのおまけで使える。

スタンドアロンで使うものではないから、いらない場合も多いだろう。そういう場合は、正系 EEPROM も使えないから、ボードの副系のみで運用する。

追記:実は高精度のDS3231版のほうが安価だったり。

INA219 電圧・電流計( 1000x0x )
(1000000 NODE1, 1000001 NODE2, 1000010 USB1, 1000011 USB2)
オプションで、ボード内に4つ接続することを計画している。付ける場所は、Zero の電源入力に2つ。USB1,USB2 に2つ。

常時測定するような使い方はしないかも知れない。そして、INA219も小さいのである。ハンダづけが難しい。それ以前にアートワークが厳しく、パターンが入れられない可能性がある。
入手は、aliexpress で INA219 SOT23-8 を検索。

なお、安いモジュールもある。わざわざボード上に常設はしないが、測定したいという場合に使える。その場合も ボードに R100 -- 0.1Ω は付けておく。平行に仮付けして 0.05 Ωで計測。
こちらは CJMCU INA219 で検索。

SSD1306 ( 011110x )

表示デバイスが一切ないのは、実験用としても問題だろう。格安の OLED モジュールを接続することを検討。SSD1306 を使ったモジュールには、単色、2色、フルカラーがあるようだ。青+白2色を予定している。

aliexpress で oled module あるいは SSD1306 で検索

この 表示デバイスは、マスターとなったノードが使用し、運用に使う。デバッグにも必要であれば、TWI1 の方を使用する。


SPI-Flash

本体の裏に SPI-Flash を接続できるようになっている。これはブートも可能。クラウドなんかでは有用だろう。どうせ別に NAS がある。クラスタにおいても、USB ストレージを付けるのであれば、OS はそこに入れれば良いのだ。ノードダウンして切り替えるならば、もう一台が OS ごと引き継ぐ。スタンバイ側は、ストレージがないわけだが、マスターをNASとして使えばよい。こうすることで、micro SD が空く。

なんというか、本体が安すぎるせいで、micro SD が高価なものに思えてしまう。SPI-Flash の価格は、8MB が 10個で $4 ぐらい。4MB はもっと安く $4 も出せば 20 個買える。16MB は少し高く 5 個で $5 を超える。これらのうち標準的なサイズは 8MB である。1MB は U-boot で使うので、残り 7MB にカーネル+initrd を入れる。4MB でも良いとは思うのだが、足りなかったときどうにもならない。SPI-Flash を付けるのは比較的簡単だが、付け替えは厳しい。8MB にしておくのが無難。

ちなみに、ブートできないような状態になってしまっても、micro SD からのブートは可能で、いわゆる文鎮化は心配しなくて良い。

入手は、aliexpress で、25Q64FV, 25Q128FV あるいは W25Q32 を検索。



PCBレール

(aliexpress で PCB guide rail で検索)

PCB をマウントするものを探してはみたが、ピンと来るものが1つだけ見つかった。長さは 86mm で少し大きい。このボードを入れてもロックの位置にすらこないので、当て板が必要。

当て板は 2mm 厚 まで。長さは、おそらく 25mm ぐらいで端まで行く。外付けモジュールを付けるなら、もう少し大きく作って そこにマウントすれば良いと思う。

クラスタの場合、裸の 2.5in HDD もレールを付ければいけるのではないかと思う。そう出来れば割とすっきりまとめられるかも知れない。

で、これを何に取り付けるか? L アングルで良さそうな気も。


ケース

(aliexpress で aluminum box 105 で検索 、SZOMK AK-C-C69a:w105 h40 d92)

ケースなど必要なのか?という疑問はあるが、見つかったので書いておく。基板は入るが、高さがギリギリである。

イーサの HUB とか USB Disk とかを 組み合わせて 使うものだから、全体で様にならないと意味がないと思うのだ。でもまぁ一応。


そういえば、よくある安物の5ポートHUB 。こいつのサイズが、97 x 67 x 25 mm だそうだ。


他に、w105 h55 d150 というのも見つかる。これも溝があるので入れられそうだ。これぐらいの大きさになると、HUB と DISK も入れられて良いのではないだろうか。

ちなみに、100mm の基板は入るが、下のでっぱりと干渉しそうな。注意が必要。

100mm で思い出したが、100mm x 72mm の Pico-ITX のボードはギリギリまで部品が配置されてるものが多く(普通)入らない。これらのケース内幅は 98mm ぐらい。また、3.5 inch HDD は入らないが、HDD 用マウンタにも合わない。HDD は 101.6 mm だが、このケースは 106mm 。さらに、2.5 inch HDD は、作ったボードを入れると、タテにもヨコにも置けない。長さが 100.45 mm なので、重なるように配置しないといけない。なんとも中途半端ではあるが、100mm幅の板が丁度合うのは利点。2.5 inch HDD なら、板にマウントしてつりさげるような配置ができる。

ちなみに、Pico-ITX の SBC EspressoBin


ヒートシンク

( banggood で入手 )

一応書いておくと、ちょっと背の高いのが欲しかったので、40x40mm 11mm高のを 切りだして使おうかと。aliexpress でも heatsink 40mm*40mm*11mm で検索すると見つかるが、banggood のやつが具合が良い。フィン 13枚なのは同じなのだが、切り目?が 10本のが良いのだ。

追記:とか書いておきながら 35mmx35mmx17mm のタイプも買っていたり。


こちらは、aliexpress で 「heatsink 40mm 11mm」で検索すると見つかるタイプ。なにしろ安いので気軽に消費できる。
これを 図示したとおりにカットできた。道具は、万力+金のこ。飛び出している部分は wifi チップにかぶせる。これのマウントの方法だが、H2+ SoC に 両面テープ。そのままでは wifiチップも SDRAM も浮くので、0.5mm厚の放熱シート(シリコンシート または αGEL)を挟む。

ちなみに、フィンの数は 13 だが、削った方の切れ目が 8本のタイプと 10本のタイプがある。今回は 8本の方を使った。(2) で切りだした部分も、wifi にかぶらせる突起部がないだけで使える。というか、うまくやれれば 同じ形状を2個取り出せる。(1) と (2) を切り離さないようにすれば良い。あるいは、(3) の切り方を工夫するとか。

35mmx35mmx17mm も同じような形状を切り出せた。背が高くなってもかまわないなら、こちらの方が良いかも。



チップ抵抗の取り外しは、2本のハンダごてを使うと書いたが、ふと USB solder iron を検索してみたところ、$4 ちょっとで買えるようだ。

昔にあったタイプとは違い、こて先が交換可能になっている。(こて先も売っている)。 それだけ実用的に使えるということか?ちなみに、5V 8W で 15秒で使え 30秒で冷めるそうだ。キャップも付属していて、携帯するのに配慮されている。--- 携帯などしないが、すぐ仕舞えるのは便利。今はタブレットの普及で USB AC アダプタも高出力なものが多く使い勝手が良くなって来ているのかも知れない。

ちなみに昔のタイプを所有している。熱量は少々足りない印象だった。形状のせいか、つい先に触ってしまい痛い思いをした。さて、新しいタイプはどうなのだろう?

追記:新しいタイプが来た。早速電流を測定してみると 5.1v で 1.78A : 9W ほど。旧型も火を入れて見たが 1.0A 程度で 5W 。差は歴然で これなら使えるような印象。


ピンヘッダの外し方

戦々恐々としていたわけだが、そう難しいものではなかった。
簡単に言えば、一本づつ、ハンダごてを当ててラジペンで引き抜くだけである。問題は、基板とラジペン両方に力がかかること。両手を使ってしっかりとやらないといけないわけだが、その上でハンダごてを正確に当てる必要がある。ハンダごてを机に置いても出来るが、万力などで固定したほうがやりやすいだろう。

後処理は、はんだ吸い取り線を軽く使った後、無理そうなのは 0.8mm φ のピンバイスで力をかけずにえぐる。私は、ダイソーにあった「精密ハンドドリル」を使用した。

とか書いてみたが、実は練習での話。本番では、はんだ吸い取り線はあまり上手くいかず、だいたいは「精密ハンドドリル」のお世話になった。USB 顕微鏡で見てみると 一部ランドにダメージがあった。大丈夫だとは思うが、それほど完璧にできたわけではなかった。


posted by すz at 03:13| Comment(0) | TrackBack(0) | 日記