Eagle メモ、その 3.


Olimex に出した、その関連。 頼んだ基板はこんなの↓
クリックするとベタ部分を塗りつぶした拡大版になるが、詳細は略。 今回は一般論のみ。ボード specific な話はこれを作ってから (そもそもまだ基板届いてへん)。

fpga board

デザインルール 0.250mm

中央にデンと居座るでかいの (IC3; XC2S100E, TQFP-144) やその右の石 (IC6; ADS5203, TQFP-48) は 0.5mm ピッチである。 Olimex の 10mils ルールだとぎりぎり足りない。 8mils ルールでも、 0.5mm ピッチだとパッド間が 0.250mm 以下となって、 パッドからワイヤを出した瞬間にクリアランス制限 (8mils = 0.2032mm) にひっかかりやすい。 パッド中心とワイヤ中心が 0.0468mm ずれればおしまい。オートルータもまともに働いてくれない。

なのでインチ系を諦めて 0.25mm grid でワイヤを引いた。ワイヤのセンタがパッド中心に合うので、 ワイヤを 0.25mm くらいまで太くできる。... が、拡大画像のほうでもワイヤとパッド中心が合ってるよーに見えないな。 強拡大するとこんな風 (マス目は 2mm):

between FPGA and ADC
もっとも厳しいのはワイヤ〜パッド間なので、残りを 10mils (0.254mm) ルールとした dru ファイル

なお、Olimex さんに作ってもらったときに 製作プロセスが 8mils (Delivery in 15 WORKING DAYS) でなく 10mils のほう (Delivery in 3-5 WORKING DAYS) になるところにこのルールの価値がある。 フォトマスクのアパーチャも 0.0100inch (10mils) になってくれてるてこともあるかしらん。

むろん微妙に余裕削って狭くしてるので、 出来上がりがパターン切れとかショートとかを起こしている確率は確実に上がっているはずである。念のため ... あくまで数字上、ルールチェック上の話ではあるけども。

自由な線幅の設定

ボードのワイヤの幅はメニューによれば 0, 10mil, 12mil, 16mil, 24mil ... という系列になっている。 0.250mm の線幅は無い。0.254mm では代用が効かないからこそ 0.250mm ルール使ってるんであって。

適当に線を引いたあと、Change → Width から最下段の "..." を選ぶ。"New Width?" なる入力枠が出てくるから、 ここで 0.25mm と入力。 一回、こーして 0.25mm のを入れておくと、ワイヤの幅のメニューに 0.25mm が出てくれるようになるので、 次からはそれを選べばいい。

ライブラリで任意のサイズの smd pad を作りたいときも同じように "..." を選んだあと、"1.5 x 2.5" などと入力すると (grid に mm を指定してある場合は) 1.5mm x 2.5mm のパッドが描ける。

一回は入力するってのが嫌なら、${EAGLEDIR}/scr/eagle.scr にそー書いておけば最初からメニューに入る、 んだろうがそこまでしてないので未確認。

補足 (Jan. 2, 2005)
ドリル径いちいち直すのが面倒になったので eagle.scr に書き加えた。 現行こんな感じ eagle.scr
ボードのほうは完全に mm グリッドの 0.25mm ルールになっている。 回路図のほうはインチベースだけど ...。

なお、ドリル径などのメニューリストは 16 個分の FIFO になっているらしく、 山ほどリストに追加すると最初のほうを忘れる。

暗黙のドリル径

オートルータがポコポコ開ける via 径は 24mil (0.6096mm) である。つまりほっとくと 1 ドルかかる。 これは Design rules の Sizes の Minimum Drill で決まるので、 これを 0.7mm にしておく。

これを同じことだからといって 28mil にしてはならない。28mil = 0.7112mm なので、 本当に 0.70mm で開けた穴が Design Rule Check でエラーになる。 0.7mm にしとけば 0.70mm も 28mil もパスする。 mm/mil 混合系ではこーゆーとこで気が抜けないのであった。

なお、実際に使われるドリル径は 2.5% の誤差を見込むようである。 つまり 1.0mm てのは 0.975mm 〜 1.025mm のことだそーな。 Olimex の指定する 39mil (0.9906mm) も eagle ライブラリの指定する 40mil (1.016mm) も この範囲に入るので両者は同じドリルのはずだが drillcfg で mil 指定すると両者が別のドリルになってしまう ... のかな。いや、何か困るのか知らないけど。

デバイスの Origin と snap-board

Eagle において、回路図からボードへの変換では未配置の部品は枠外に適当に並べられる。 このときの部品の間隔は (grid がミリだろうとなんだろうと) インチ系である。... 1.27mm ピッチかな。 このまま部品を掴んでボード内にもってきても、 ミリ grid では grid 中心に置けない。 どーするか。

最初の技が cmd-snap-board.ulp. 実行すると指定した grid に合ってくれる。

だがしかし、笑えん副作用がある ...。 たとえば 0.250mm ピッチに合わせて cmd-snap-board すると、部品はもちろん配線済ワイヤもこのピッチに合わせようとする。 結果、たとえば 0.65mm ピッチの石と繋がるワイヤが斜めに崩れる。 2.54mm ピッチの石に繋がってるワイヤが 0.125mm くらいずれてもなんてことはないが、 0.65mm ピッチのパッドでワイヤが 0.125mm ずれると引きなおしになる。

で、最近使ってるのがコマンドラインから

move 名前  (整数 整数)
すること。カッコ内は座標、単位は grid のものなので整数で必ず grid に合う。 使う時は座標が分からないので、適当な部品上で Info を叩くとその部品の info が分かる。 その座標値はたぶん整数ではないが、そのあたりの整数値な座標で move なんちゃらすると、その近所に件のデバイスが出現する。 あとはそれを掴んで適当に配置。

でまあ、このことに合わせて覚えたこと:

TQFP48.pac
TQFP-48 のパッケージの例。デバイスの origin (中央付近の十字) がパッケージ (or ダイ) 中心になく、ずらしてある。 ボードに配置したとき、このデバイスの origin が grid に乗るのだが、 こうしておくと origin が grid に乗った瞬間にパッドもまた grid に乗る。つまりワイヤがパッド中心を通る。

Origin を美意識優先でパッケージ中心にもってくると、辺あたり偶数ピンをもつパッケージでは ボードの grid を ピン間隔の 1/2 にしなくてはピンと grid が合わなくなることに注意。

ライブラリの scr 修正

Olimex のドリルは 0.7mm, 0.9mm, 1.0mm, 1.1mm ... という系列だ。 一方、Eagle のデフォルト dru やライブラリは 0.6mm, 0.81mm, 0.88mm, 0.91mm, 1.0mm, ... という系列になっている。 Olimex 自身でも eagle 使って書いてる (たとえば これ) のに ドリルラックが合ってないのが謎なのだが、Eagle は仕上がり径基準かな。 仕様的にその径で穴を開けると実装で 0.1mm せばまった時にピンが入らなくなりそうな pad をどっかで見掛けた (どこかの TO-220)。それはともかく気を抜くと 0.6mm や 0.8mm のドリルを使わされる。

ガーバに変換するときの drillcfg で書き換える手もあるが、annual ring のことを考えると触りたくない。 ライブラリで指定したドリル径はボードでは変更できないので、ライブラリ側を変換する。

ライブラリを開いてから File → Export → Script で、ライブラリをテキストファイル化する。 中身はこんなの:

...
hange Drill 0.8128;Pad '25' Octagon 0 R0 (6.35 3.81);
Change Drill 0.8128;Pad '26' Octagon 0 R0 (3.81 6.35);
Change Drill 0.8128;Pad '27' Octagon 0 R0 (3.81 3.81);
Change Drill 0.8128;Pad '28' Octagon 0 R0 (1.27 6.35);
Layer 51;
Circle 0.254 (-2.54 2.54) (-1.27 2.54);
...
sed 's/Drill 0.8128/Drill 0.9/'g かけるなりする。こーゆー変換する ulp 書くのがほんとなんだろうが、 細かいとりまわしまでよくわからんす。

さて、修正したあとライブラリに戻すのだが、.scr になってるからといってすぐ実行してもたぶん名前重複エラーになる。 ライブラリエディタから New して空のライブラリを開き、そこから 修正済の .scr を実行するようにする。

実際には、con-lstb.lbr (ピンヘッダ) の穴径を 1.016mm から 1.1mm に広げたんだったかな。 秋月のピンヘッダは 0.7mm 角だから、少なくとも仕上がり径で 0.7 x 1.4 = 1.0mm ないと入らない。 con-lstb の仕上がり径 0.9mm だと長いピンヘッダで困る。

てか、あれ? 1.1mm でも足りないかな ...

補足 (Oct. 26, 2004)
ライブラリの pad をいじるだけなら change-pad-in-lbr.ulp というわりとそのまんまの ulp があるので それで十分である。

「全層」への文字記入

Olimex の tech. info によれば だそうだ。ここでいうレイヤというのが若干意味不明なのだが、 ガーバデータ変換後のレイヤ (TOP 銅箔、BOTTOM 銅箔、TOP ソルダーマスク、BOTTOM ソルダーマスク、TOP シルクマスク) についてと解釈する。 eagle での「レイヤ」は、だって何も考えずに gerb274x.cam にかけるのに、mirror になる心配もなにもない。

というわけで、文字を記入するのは 1, 21, 25, 27, 29, 51, 裏文字記入が 16, 22, 26, 28, 30, 52.

作ったボードは 100x80mm と Eagle light ed. の上限一杯、そろそろ余分な文字を記入すべきエリアがない ... というか、すでにほとんど文字はいってんだけど、ソルダーマスク層までは書いてないからなぁ。

EAGLE for Olimex で setabc というものが 配布されているようなのだが、このサイト、中に入れなかった。ていうか、実体 (下位層) はまだあるんかいな。 Eagle and Olimex さん家で ソースが掲示されているので そっちを参考に

GRID MM;
Change Size 2.54;
Change Ratio 10;
Change Font Vector;
LAYER 1;
TEXT '(c) kamiki' (1 -4.0);
LAYER 21;       
TEXT '(c) kamiki' (1 -4.0);
LAYER 25;       
TEXT '(c) kamiki' (1 -4.0);
LAYER 27;       
TEXT '(c) kamiki' (1 -4.0);
LAYER 29;       
TEXT '(c) kamiki' (1 -4.0);
LAYER 51;       
TEXT '(c) kamiki' (1 -4.0);
LAYER 16;       
TEXT '(c) kamiki' (99 -4.0);
LAYER 22;       
TEXT '(c) kamiki' (99 -4.0);
LAYER 26;       
TEXT '(c) kamiki' (99 -4.0);
LAYER 28;       
TEXT '(c) kamiki' (99 -4.0);
LAYER 30;       
TEXT '(c) kamiki' (99 -4.0);
LAYER 52;       
TEXT '(c) kamiki' (99 -4.0);
てな .scr を実行。いや、書いた文字は kamiki でなくせっかくなので mail address だけど。 ボードは (0, 0) 〜 (100, 80) の範囲で、文字はその外側にあるが、これでもかまわんと。

bottom 側にあるレイヤ (16, 22, 26 ...) はこのままでもちゃんと裏文字になってんのね(一番上のボードの右下参照)。

ところで、setabc.scr そのものがやってるようにレイヤ 17 (Pads 層) 等や レイヤ 20 (Dimension 層) に書いてはいけないんではないかな。 前者は TOP, BOTTOM 両側のマスクに絡むのでガーバに変換したときに表裏の区別ができなくなるし、 後者は Dimension の定義によって、DRC が通らなくなる (文字はポリゴンみたいに閉じてない)。

なお、枠外に書いた文字は Eagle light ed. の枠 100x80mm の外にあるが、 Eagle light ed. はこれをちゃんと正しく扱ってくれる。あくまでボードが 100x80 以内であればいいらしい。

裏面シルク印刷とガーバデータ

ガーバデータへの変換手順:
  1. drillcfg.ulp を実行
  2. CAM から excellon.cam を実行
  3. CAM から gerb274x.cam を実行

... まあ、brd ファイルで送っても向こうでこの 3 行を実行するだけなんだけど。 これだと裏面シルクはない。 無くても大丈夫なつもりでいたが、裏のチップ部品が全部同じという訳ではなくなってしまった。 ぜんぶ 0.1uF だけとかなら良かったんだけど、2, 3 種混じってる。 ついでなのでデバッグ用のメモも入れて裏面にもシルク。

変換手順上、1, 2 はそのまま。3 が少し変わる:

gerb274x
ADD すると今みている section を duplicate するので、 section 名を変更。BOTTOM 層のシルクなら mirror にチェックして 20, 22, 26 てとこか。それとファイルの suffix も。

変更すると close するときに save するかどうか訊かれる。/usr/local/eagle/cam とかで実行してると save できへん ... というハマり方をしたのでふつーは ${EAGLEDIR}/cam/ を別に作っとくものらしい。 ともかく ${EAGLEDIR}/cam/ あたりに save しておくと、次回からは最初から両面シルク付きで変換してくれる。 つーか、そういう両面シルクなガーバをつくってくれる job ファイル: gerb274x_doublesilk.cam. 使い方は gerb274x.cam と一緒。

ところで、裏面シルクのオプション料金だが、これは本家の FAQ に書かれている。

Q: Can I order my board with silkscreen on top and bottom?
A: Yes, we can do this for additional charge of $5.00 for DSS and $20.00 for DSQ panels.
5 ドルってことは OLIMEX FAN で知ってたけど、"double side" にも "how to order" にも書かれてないんだもん。

gerbv

ガーバデータを覗く。Debian woody に入ってるので apt-get install gerbv 一発でおっけー、だが例によってやや古く、 ベタパターンの解釈が不安だ (なんか縞模様になる ...)。

0.16 拾って来て make 一発。こちらではベタパターンもベタになっていた(からたぶん本物もちゃんとベタになるんだろう)。

gerbv
これは裏面のシルクマスク、の部分拡大。ガーバデータの段階では裏面も文字が読めるむきになる。 デフォルトの彩色がえらく暗いんだけど、重ね合わせとかした時に意味があるらしい。ンな機能ぜんぜん使ってないけど ...。

それと、新しい版では File メニューからガーバファイルを直接 open できなくなった。project を経由しなければならない。 gEDA まともに入れてないから project 使えねーっす。 command line からの引数としてはガーバファイル名を受け付けるので

% gerbv file.sol
とかするしかないみたい。

追記

Jul 13 10:00 +0200 "fax received" の mail
Jul 16 13:00 +0200 "boards shipped" の mail
Jul 22 モノが書留で郵便局着

ちなみに、不在標によれば差出人は「ブルガリア」(カタカナで) だそうである。 海外からの書留って別に国名が差出人になるってことはなかったと思うんだが ... 現物みて納得した。よーするに読めなかったんだな。"BULGARIA" だけ(英語で)読めるわけで。

そのまた追記

「銅箔幅 0.254mm + ピッチ 0.5mm でも 10mils プロセスのほうでやってくれるよ」 とのこと。← EAGLE and OLIMEX の近藤さんによります。 Info ありがとうございました。

Reference


[日記へ] [目次へ]