2010年02月18日

ガーバデータのツール

以前 アマゾンで P板.com の ワークサイズパッケージ があった。(2/24 の 1 日だけ発注できるようだが 実は詳細は知らない)

そのときの条件は、Vカットは 5本まで ルータ面付けは 3面まで という条件だった。

自分で面付けして、Vカットすれば、お得かも知れない。

たとえば、35mm x 47mm の 1/2 C 基板サイズを 3x2 取ると、基板間に 0.5mm の Vカットラインを入れるとして、端に、13.5mm x 47mm が 2枚 , 35mm x 25mm が 3 枚。13.5mm x 25mm が1枚取れる。

24日には間に合わないような気がするが、とりあえず面付けするツールをでっちあげてみた。

gerbtool-01.tar.gzgerbtool-0.4.tar.gz


  • gerbtool-0.5.zip

    イメージファイルを出力するスクリプトを追加。(後述)

  • gerbtool-0.6.zip

    octagon (正八角形の Pad) に未対応(gerbmerge/gerbimg 両方)なのが分かったため対応。ついでに未対応の図形は、イメージファイル上ピンクで表示するよう修正。

  • gerbtool-0.7.zip

    描画系の座標計算みなおし。かなり綺麗に出力できるようになった。

  • gerbtool-0.7w.zip

    試しに 白を指定できるようにしたもの。


これは、perl スクリプトで、eagle で作成したガーバーデータだけを対象にしている。

  • gerbmerge.pl -- ガーバデータをマージする。(90度の回転 option 付き)
  • drdmerge.pl -- ドリルデータをマージする。(90度の回転 option 付き)
  • drdshrink.pl -- ドリルデータの同一径を 1つにまとめる。
  • gerbx2.pl -- ガーバデータを 2倍のサイズに拡大する。
  • gerbgeom.pl -- オフセットと サイズを計算。(新規)
  • gerbimg.pl -- ガーバデータをイメージファイル(XPM フォーマット)に変換


gerbmerge.pl と drdmerge.pl は、使い方が同じで、


-x オフセット -y オフセット [ -r ] ファイル

の組を 複数指定する。出力は標準出力なので、リダイレクトでファイルを作成する。

オフセットは、

数字[mm|in]

の指定方法で、mm はミリ。in はインチが単位。小数点が使える。

-r は 90 度時計回りの回転で、y 軸が マイナスの値になる。-y オフセットに サイズを加える必要がある。

    gerbgeom で得た情報を使って

    -g x_offset y_offset xsize ysize

    を指定してやると、(5mm , 5mm) に オフセットする。回転もサイズを自動的に足す。(新規機能)

単に くっつけていくだけなので、ドリルデータの場合、同一径が別エントリになってしまう。そのため、drdshrink.pl を使って、1つにまとめる。

さて、問題は外形線。120mm x 120mm の外形線は フリーの eagle で引くことはできない。そのため、外形線専用に gerbx2.pl を作った。
座標を 2 倍にするだけのツールで、太さは変わらない。
(スクリプトの中で オフセットを設定している。編集が必要なので注意)

とりあえず、以前作成した ガーバファイルで確認はしたが、必ずうまく変換できるとは限らないので注意。また、Linux でのみ確認している。Windows の perl では、ひょっとしたら改行に問題が出るかも知れない。

2/24 に向けてなにか作ろうとしている人がいるかも知れないので公開しておくが、いろいろ問題があるかも知れないので、 正しいか確認できて 問題があれば自分で直せる人だけ使って欲しい。

注意点:

  • Octagon (正八角形)の PAD/VIA に対応できていない。(0.6 で修正)

    %ADD10R,0.0671X0.0671*%
    %ADD11C,0.0671*%
    %ADD12OC8,0.0474*% <<< OC8 を認識してない。

  • フォントは 全部 Vector でないとまずい。回転に対応していない。
  • 回転で他にもバグがあった。

    %ADD10C,0.0512*%^M
    %ADD11R,0.0157X0.0394*% <<<< ここ
    %ADD12C,0.0394*%
    %ADD13R,0.0433X0.0433*% <<<< ここ
    %ADD14C,0.0433*%
    %ADD15C,0.0157*%
    %ADD16C,0.0354*%
    %ADD17C,0.0079*%

    AD コマンドの R パラメータの場合、2 つの値を入れ替える必要があるようだ。


追記:

以前作ったファイルで試したが、なんかうまく行かない。
いくつかバグもあるみたいだが、それ以前に オフセットが計算どおりにならない。困った。

追記2:

だいぶ分かってきた。どうも brd ファイルの オフセット通りには出力されず、ランダムのような 値になるようだ。

で、out ファイルを入力して、オフセットを出すツールを作って、計算したら、思うように 並べることができた。



これは、自分で計算して、作ったもの。上の 3 つは回転している。緑が、全体の 外形線と Vカットライン。銅色が、out ファイルを マージしたもので、あと drd のマージも表示している。

位置さえ合えば、他の データも ちゃんとできるはず。ツールは、out ファイルを入力することで計算を楽にすることはできそう。

ちなみに... こんなスクリプトを作っている。

    OUTBASE=1
    #EXT_LIST="drd out plc sol cmp pls stc sts"
    EXT_LIST="drd out"

    for i in $EXT_LIST
    do
    if [ $i = drd ]; then
    CMD="perl drdmerge.pl"
    else
    CMD="perl gerbmerge.pl"
    fi
    F=""
    F="$F -x -0.292mm -y -0.143mm srt162b-007/srt162b-007.$i"
    F="$F -x 34.012mm -y -0.066mm dac23-mega/dac23-mega.$i"
    F="$F -x 69.081mm -y -1.319mm halfc-dac23/halfc-dac23.$i"
    F="$F -x -0.292mm -y 47.007mm srt162b-007/srt162b-007.$i"
    F="$F -x 34.012mm -y 47.234mm dac23-mega/dac23-mega.$i"
    F="$F -x 69.081mm -y 45.981mm halfc-dac23/halfc-dac23.$i"

    F="$F -x -0.069mm -y 111.991mm -r dac23-actv3/dac23-actv3.$i"
    F="$F -x 34.710mm -y 112.451mm -r dac23-filt/dac23-filt.$i"
    F="$F -x 70.010mm -y 112.451mm -r dac23-filt/dac23-filt.$i"

    F="$F -x 106.423mm -y -0.475mm usb910b-007/usb910b-007.$i"
    F="$F -x 106.578mm -y 42.933mm ht77xx-007/ht77xx-007.$i"

    $CMD $F > 1.$i
    done


オフセットの計算がすごく面倒。あと、ガーバデータを更新したら、オフセットがまた変わりそうなのがとても困る。

追記3:

なんとか面付けできそうなので、発注することを目標に基板を作り出した。

    まずは、過去に作った基板の修正版。AT90USB162 の SRT162B と DAC23 ボードと、VUSB の DAC23-MEGA 。 それだけでは面白くないので、DAC23-MEGA の CPU を mega32u4 にしたものも作ってみた。

    DAC23 ボード用に SPI や PWM,I2C を合わせたので、ピンの割り当ては結構バラバラ。でっちあげたに近いけれども、時間がない。とりあえず使えることだけを目標にした。

    これらから選んでメインの 3x2 にしようと思う。-- たぶん mega32u4 が 3 で、あと1種類づつ。

    さて、余った部分をどうするか。-- 上の 35mm 幅 x 3 は、 0.6inch 高にして、DAC23 ボード用の フィルターボード 2 種 を入れようと思う。(フィルターボードは 本来 28mm なのだが、多少大きくても 問題ない)

    あとの1つは、tiny44a を使ったボードを作ることにした。急にまったく新しいものを思いつくわけはないので.. とりあえず NiMH 充電器 (になりそうなもの)。

    で、右の部分。47mm 高 だが幅が取れない。47mm を 0.6inch x 3 とか 0.9inch x2 とか自分で切ることにして、小基板を作ることにした。
    まずは、0.6 inch 高の 過放電保護付き昇圧回路。SC120 版と XZ5121 版の 2 種類。あと 水晶と レギュレータ付きの tiny44a 基板。こちらは 0.9 inch 高。

    ちゃんとチェック出来ているわけではないのだが、データは出来た。→ wksize1002-01.tar.gz

    ちなみに、充電器の DC-Jack は、秋月の 1.3mm DCジャックにした。たぶんマル信の MJ-83(pdf)(か互換品)。ユニバーサル基板に刺さるので、愛用しようかなと思っている。

    メモ:修正版の内容

    • DAC23:
        PHONEコネクタ -- 配線がデタラメだったのを修正 + 穴径を拡大。
    • DAC23-MEGA:
        ADC3 を 1.5K Ωプルアップに変更
        LED を SEC2004シリーズ(pdf)に変更 (秋月:SEC2764Cとか)
        シリアル出力 4 pin の配列を変更 (I2C マスタを想定して、GND,VCC,RXD,TXD)
        レギュレータを TAR5SB33 に変更
        シルクで SCL が SCK になってたのを修正
    • SRT162B:
        シリアル FLASH の CLK が PD6 になっていたのを PD5(XCK) に修正
        SPI 出力の CS 用の pin を SS(PB0) に変更。(PB0 ⇔ PB4 入れ替え)
        シルクのフォントをベクタに(一部)


作ってから思い出したのだが、700 穴の制限があった。沢山作ったのは良いが入れられないかも知れない。

    dri ファイルに、Total number of drills: の項目があるので集計してみると ...

    clk44.dri: 20 x 2
    dac23-actv3.dri: 22
    dac23-filt.dri: 24
    dac23-mega2.dri: 88
    dac23-u4.dri: 82 x 3
    dac23r2.dri: 83
    pwr44.dri: 26
    sc120.dri: 11 x 2
    srt162b2.dri: 103
    xz5121.dri: 13 x 2

    合計 680 。なんとかセーフの予定。


追記4:

gerbmerge.pl, drdmerge.pl のパラメータに、

-g x_offset y_offset xsize ysize

を追加。この 4 つの数字は、gerbgeom.pl を out ファイルに対して実行することで得ることが出来る。

この数字を元にして、固定のオフセット (5mm , 5mm) に出力するようにした。

面付けしたのが、これ。(横 118.6 x 縦 109.84)




なんとか提出できそうなデータは出来た。

  • wksize1002-06.tar.gz --- 全部入り
  • wksize1002c.zip --- 提出用ファイル


    ところで、ここに入っている 3種類の CPUボードの共通点は、DAC23 ボードに接続できること。CLK を生成する PWM と データ送受信用の SPI(USART) が特定のピンにつながっている。

    参考記事:
  • mega88系ボードの設計
  • MEGA32U4


ようやくひといきついたので、P板.com を見たら 告知されていた

    あ、Vカットは 10本になっていて、穴数の制限はないようだ。

    値段は、7980円(税別)で、アマゾンではなく P板.com から発注。

    発注できるのは、23日18時〜24日18時。

    発注してわかったのだが、やはり 700穴の制限があった。セーフ。


今後の方針。

いずれ P板.com がキャンペーンをしてくれるかも知れない。ワークサイズというぐらいだから、120x120 のサイズも期待できる。

基本的に 35mm x 47mm のサイズで基板を作っているが、端を利用する基板のサイズも 決めておこう。

  • (1) 横 35 mm x 縦 0.6 inch (15.24mm) 〜 0.9inch (22.86mm)
  • (2) 横 0.5 inch(12.8mm) x 縦 0.6 inch(15.24mm) または 0.9 inch (22.86mm)
  • (3) 横 0.5 inch(12.8mm) x 縦 47mm

(1) は 24pin (600mil) 相当 サイズ。(2) は、300mil (+α) 幅で、10 pin 〜 20 pin サイズ。(3) は、電池サイズ (単四 より一回りだけ大きい)。

まぁ、ちょっとしたものなら入るはず。

    またキャンペーンをしてくれるに違いないと期待するのは甘いのかも知れない。でも 一般的にルータ切り出しより Vカットの方が安いだろうし、やれるようにしておいたほうが良さそう。

    ちなみに、EzPCB では Vカット は(無料で?)してくれるらしい。( ルータ切り出しはない。) 120mmx120mm 4 枚だと $116.05 。ただデザインルールがあっているかどうか不明なのでそのままは出せない。

追記:発注

wksize1002b.zip を 発注してみた。はたして受け付けてもらえるのだろうか?

自動メールはきた。が、

[シルク印刷]:部品面
特注仕様】
[Vカット]:なし【標準】0本

とかになっている。設定できなかったのだから 問題ないはずだが、不安になる。まぁ前も同じだったし大丈夫だろう。

なんの連絡もないが、ログインして詳細データを見たところ 製造資料確認中 のステータスだが、


外形寸法 118.6 mm x 109.8 mm
シルク印刷 両面
Vカット あり 5本

になっていた。データを確認して受け付けてくれたらしい。 出荷予定日は、2010/03/25(木) 。

受け付けたというメールがきた。これで待つだけ。

追記5:

P板.com から データに問題があると指摘を受けた。回転したデータが問題で こうじゃないのという指摘までしてくれた。感謝。

修正版を早急にださないと。... ついでに ダメダメな pwr44 ボードも 入れ替え。

追記6:

AD コマンドの R パラメータの場合、2 つの値を入れ替える必要があるようで、修正した。

gerbtool-0.4.tar.gz


あまりにアドホックな対処なので、確認してみた。

資料:長野県情報技術試験場 ? 拡張ガーバーフォーマットの解説(pdf)

%AD の 行は アパチャーの定義で、eagle のガーバーでは、2 種類しか使用されていないように見える。ひとつは、C (Circle) これのパラーメータは、X でつないで複数持てるが、最初の 1 つ(直径)しか使っていない。
もうひとつは、R(Rectangle) こちらは 2 つのパラメータ Width と Height を使っている。回転する場合は Width と Height を入れ替える必要があるし、これだけ対処していれば とりあえずは 十分でもある。

追記: イメージファイル出力ツール




自力で イメージファイルを生成することに成功!。右は比較用の viewplot の画像。

細い線や円がちょっとダメなのだが、スクリプトで自動生成できる。これで、web に貼るイメージファイルが簡単に作れるようになった。あとベタパターンにスジが入るが、精度の問題。viewplot も入っている。

使い方


出力フォーマット XPM (標準出力)

perl gerbimg.pl [ -g ジオメトリ ][ -c 基板の色モデル ] [-d dpi ] [ -f ] ファイル1 ...

gerbgeom で得た情報を使って
-g x_offset y_offset xsize ysize
を指定するのが前提。

基板の色モデル
green-gold 緑基板 - 金
green-silver 緑基板 - 銀 (デフォルト)
red-gold 赤基板 - 金
red-silver 赤基板 - 銀
blue-gold 青基板 - 金
blue-silver 青基板 - 銀

dpi ( デフォルト 600 )
制限はPCのメモリ。
600 で 10cm x 10cm 両面分を生成すると atom で 3分弱かかる。

-f 左右反転
 裏面用の指定

ファイルの指定
 ※ 色との兼ね合いで順番が決まっている。gerber/drill は自動判別。
 ※ 最大 layer 数は 5 。
 ※ FusionPCB向け ドリル は(そのままだと)位置がずれる。
 ※ FusionPCB向け 露出パターン は PAD/VIA を追加する。

      cam P板.com向け FusionPCB向け
1) ソルダーマスク stc/sts GTS/GBS
2) パターン cmp/sol GTL/GBL
3) シルク plc/pls GTO/GBO
4) 露出パターン pac/pas GTP/GBP
5) ドリル drd TXT

[ -x 横余白 -y 縦余白 ]

0 だと 通常 外形線がはみだす。デフォルト 0.1mm 。


開発メモ:

  • フォーマットを XPM にしたのは、XPM は テキストファイルなので作り易かったため。大概の viewer で見れるはずだし自動変換も可能なので、気にしない。ちなみに Windows だと Irfanview で見れている。
  • perl の配列使っているのでメモリ効率は悪い。性能も悪いがいずれ改善したい。
  • 描画は意外と難しかった。微妙に精度が悪いので、いずれ修正したいが、今は触りたくない。

    ver 0.6
  • octagon に対応。
  • 知らないアパーチャはピンクで位置を表示する。ピンクが出たら、マージツールも未対応ということ。

    ver 0.7
  • 描画系のみなおし。元データは 10000 dpi だがその解像度変換を描画プリミティブですることにした。そうしたらかなり綺麗になった。円がガタガタしないし、ベタパターンもスダレにはならない。

追記: 2012/6/9 ナナメの部品を使ったときの不具合



    これは、0.7w を修正した結果だが、gerbimg.pl で 塗りつぶしが出来ていない。

      ナナメの部品を使うと G36 というコードが使われるようになる。これは、多角形の塗りつぶしを指定するもの。

      そんなアルゴリズムは持っていないので、おかしくなっていたのだった。とりあえず G36 で アパーチャ を小さな矩形にしたところ上のようになった。対応するのは面倒なので、放置になりそう。


    } elsif (/^D([0-9]+)\*/) {
    set_aperture($aperture_def[$1]);
    } elsif (/^G36/) {
    set_aperture("R,0.0010X0.0010*%");
    }

    ちなみに、修正はこんな内容。

最新版 (2012/10/16 0.9)

  • gerbtool-0.9.zip

    更新を忘れていた。実は 0.8 で上記の多角形を直した。で、直したのだが問題があってそれを修正したのが 0.9 。
posted by すz at 21:31| Comment(2) | TrackBack(0) | プリント基板
この記事へのコメント
マージの方法大変助かりました。
 中国のPCBCARTに注文し、無事品物を受け取りました。
 一応Cのプロなのですが設計のはじめから、EAGLE、ガーバーデータ、Perl、Batchファイル言語等初めてのことばかりの勉強の連続で、どれだけ頭を使わせれば気が済むんだという感じでしたが、お陰さまでした。
 コンピュータというものはこんなに難しくなって良いのでしょうか。
Posted by kuutame at 2011年05月20日 09:08
gerbtool-0.9 を使わせていただきました。
Windows環境(cygwin)でこの部分だけ修正して使うことができました。

do gerbconv($arg);

&gerbconv($arg);

gerbimg.plも便利でした。さすがにxpmは扱いにくかったのでimagemagickで適当に変換しました。
Posted by と at 2013年03月20日 10:50
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/35399725
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック