読者です 読者をやめる 読者になる 読者になる

ガーバーファイル

電子工作

はんだ付にリフロー法というのがあるというのはご存知でしょうか。
はんだ付というと普通ははんだこてでランドとリード線を暖め糸はんだでくっつけるというのが一般的なのですが、リフロー法はそれとは全く異なるはんだの方法です。
具体的には表面実装のパーツをはんだ付するときに用います。
手順としては
・基盤のパッドの位置と大きさに合うように一部を切り取ったシート(ステンシル)をつくる。
・基盤とステンシルを重ね合わせクリームはんだをぬる。(そうすることでパッド部分のみにはんだが付着する)
・素子を乗せる。
・ホットプレートで温める
というようになります。

さて、幸運にも私が通う学校には基盤切削機、カッティングプロッタ、リフロー用ホットプレートが揃っていますのでリフロー法を試しやすい環境にあります。

私のような怠惰で飽きっぽい人間にとっては表面実装などという面倒なはんだづけをさらっと終わらせることのできるリフロー法はまさしく救い。ぜひとも積極的に使っていきたい……のですが、ひとつ難点がありまして、それは

ステンシルをつくるのがめんどくさい

ということでした。

今日はできるだけ簡単にステンシルを作る暫定的なメモを書いておこうと思います。

まずeagleで基盤データを作成。そこからガーバーファイルを出力する。出てきたガーバーファイルをgerbvに読み込み不必要な部分を削除、svgにエクスポートする。illustratorにインポート、.aiとして出力する。.aiファイルをカッティングプロッタのソフトに読み込まる。
というのが最初私が思いついた方法で上手くいきました。
しかし、やっぱりめんどくさいんですね。具体的にはgerbvで不必要な部分を削除するのが面倒だったんです。

そこでそこの部分をスクリプトでやっちまえというのが今回の本題です。

スクリプトに処理して欲しいことは、パッド以外の全ての部分を削除すること、このことを念頭に置きながらガーバーフォーマット(RS274)の仕様について読み進めると以下の処理を行えばいいことがわかりました。

・%AD〜Rの文があったら〜の部分を抜き出しリストを作る。(四角形の形状をしたもののリストを作る)
・D01やD32など、Dから始まる命令を抜き出し、
  D01やD02、D03でなかったなら
    それが上記のリストに存在するか確認
       あったならフラグをセット
なかったならフラグをリセット
D01,D02,D03のいずれかであったなら
    フラグがリセットされていたなら
       それがD01かD03ならそれをD02に置き換える(四角形以外削除)


これを行うスクリプトは以下のようになります。

#!/usr/bin/python

import re
import parse

src=open("s.grb","r")
dst=open("dst.grb","w")
np=re.compile("D[0-9]+")
ecadp=parse.compile("{}AD{rectangle}R{}")
reclist=[]
recflag=False
for r in src:
    if r[0]=="%":
        result=ecadp.parse(r)
        if result!=None:
            reclist.append(result["rectangle"])
    else:
        tmp=np.findall(r)
    
        if len(tmp)!=0:
            for d in tmp:
                if d!="D01" and d!="D02" and d!="D03":
                    recflag= d in reclist 
                    if recflag:
                        print d
                    
        if not recflag:
            r=re.sub("D01","D02",r)
            r=re.sub("D03","D02",r)
            
    dst.write(r)

src.close()
dst.close()

これで実験してみましょう。
f:id:lilyext:20160413221916p:plain
先ほどのスクリプトを実行すると……
f:id:lilyext:20160413221900p:plain

上手く行きました。
他の基盤についても試してみましたが基本的には成功しました。

しかし、失敗した例もありまして、確かにパッドのみ残るのですが、幾つかのパッドも消えてしまっていました。その原因としましてはそのガーバーファイルのパッド部が%ADによって定義された四角形を用いずに線などの重なりでパッドを表現されていることでした。

うーん……これ、どうやって解決すればいいのだろうか……