PCBフォーマット
by K.I
2017/03/06〜
Index
- PCB・プリント基板の描画に使われる ガーバーデータ・ドリルデータ のフォーマット
- ガーバーフォーマット、Excellonフォーマットについて、主に以下の資料を基に纏めた。
- というか、ほぼそのままなんだけど、自分なりに纏めてみて、やっと概要を理解できた。
[top]
- ガーバーフォーマットは、プリント基板用の描画データフォーマット
- 描画ビームの形状(アパーチャ)を指定して、それを動かすことで、基板上に露光する
- 層毎(配線層以外に、ソルダマスクとかシルクパターンがある)に別のファイルになっている
- 元々のガーバーフォーマットでは、標準アパーチャだけで、アパーチャ定義は別ファイルになっているが、
- 拡張ガーバーフォーマットは、同一ファイルにアパーチャ定義が含まれる
- マクロ定義で複雑な形状のアパーチャ定義も可能
- 現在は、拡張ガーバーフォーマットが主に使用されているようだ。
param | mean | Memo |
| | |
Directive parameter |
AS | Axis Select | |
FS | Format Statement | 数値形式 |
MI | Mirror Image | |
MO | Mode of units | 単位モード(IN:インチ/MM:ミリ) |
OF | Offset | オフセット |
SF | Scale Factor | |
| | |
Image parameters |
IJ | Image Justify | |
IN | Image Name | |
IO | Image Offset | |
IP | Image Polarity | イメージ極性(POS:正転/NEG:反転) |
IR | Image Rotation | |
PF | Plotter Film | |
| | |
Aperture parameters |
AD | Aperture Definitions | アパーチャ定義 |
AM | Aperture Macro | アパーチャマクロ定義 |
| | |
Layer-specific parameters |
KO | Knockout | |
LN | Layer Name | |
LP | Layer Polarity | レイヤ極性(D:塗り/C:抜き) |
SR | Step and Repeat | |
| | |
Miscellaneous parameters |
IF | Include File | 外部ファイル読込み |
%FS<L|T><A|I>[Nn][Gn]<Xn><Yn>[Dn][Mn]*%
Ex. %FSLAX25Y25*% // 数値形式(リーディング0省略、絶対値モード、座標値の整数部2桁、小数部5桁)
- L:リーディング0省略/T:トレーリング0省略
- A:絶対値モード/I:相対値モード
- Xn/Yn:XY座標値の整数部・小数部の桁数
- Nn:シーケンス番号桁数
- Gn:Gコード桁数
- Dn:Dコード桁数
- Mn:Mコード桁数
%MO<IN|MM>*%
Ex. %MOIN*% // インチ単位モード
- アパーチャマクロ定義
- AMパラメータで、アパーチャをマクロ定義する
%AM<name>*<primitive number>,<modifier>[,<modifier>]*%
%AMOC8* // マクロ名:OC8
5,1,8,0,0,1.08239X$1,22.5* // Polygon8角形、直径1.08239x$1、22.5°回転
%
%AMDONUT*1,1,$1,$2,$3*1,0,$4,$2,$3*% // マクロ名:DONUT
// Circle、直径$1、中心座標($2,$3)、穴径$4
- ADで呼出す際に具体的な数値を指定する、$1,$2,$3のような変数で定義も可能
- マクロOC8の様に、定義に掛け算(x)を含めることも可能(四則演算:+-x/)
- マクロDONUTの様に、続けて複数の定義もできる
- アパーチャ定義
- ADパラメータで、Dコード(10〜999)に対応するアパーチャを定義する
%ADD<Dcode><aperture type>,<modifier>[X<modifier>]*%
Ex. %ADD13R,0.05600X0.05600*% // D13:Rectangle 0.056角
%ADD14OC8,0.05600*% // D14:OC8 0.056(マクロ定義呼出し)
%ADD15C,0.03600*% // D15:Circle 0.036径
%ADD32DONUT,0.010X0X0X0.005*% // D32:DONUT 外径0.010、内径0.005(マクロ定義呼出し)
- Dcode:D10〜D999のDコード
%IF<filename.ext>*%
Ex. %IFCIRCLE.mac*% // CIRCLE.macファイルの読み込み
コード | 機能 |
G00 | 多角形領域塗りでの移動 |
G01 | 直線補間 |
G02 | 時計回り円弧補間 |
G03 | 反時計回り円弧補間 |
G04 | 現データブロック無視 |
G10 | 直線補間 |
G11 | 直線補間 |
G12 | 直線補間 |
G36 | 多角形領域塗りON |
G37 | 多角形領域塗りOFF |
G54 | 工具(ペン)選択 |
G56 | 記号(文字)描画 |
G70 | インチ単位指定 |
G71 | ミリメータ単位指定 |
G74 | 360°円弧補間無効 |
G75 | 360°円弧補間有効 |
G90 | 絶対値モード |
G91 | 相対値モード |
- でも、Eagleで変換したガーバーデータでは、G75しか使用されていなかった。
- 前言撤回。斜めのアパーチャで、G36,G37が使われる場合がある
- 全体的な設定は、RS-274Xパラメータでされているっぽい
コード | 機能 |
D01 | 露光ON |
D02 | 露光OFF |
D03 | フラッシュ(露光ONして、すぐにOFFする) |
D10〜D999 | アパーチャー選択 |
- D01はアパーチャを描画しながら移動するが、D02は移動のみ。
- D03は、スタンプを押すように、一発でパターンを描画する感じ
コード | 機能 |
M00 | プログラムSTOP・描画停止 |
M01 | オプショナルSTOP・プロッタの設定で停止 |
M02 | エンドオブプログラム・描画後プロッタ停止 |
M30 | エンドオブテープ |
- Eagleのガーバー出力で、実際に使用されているのは、M02だけだった。
- ADパラメータで、Dコードに対応させる標準のアパーチャ
Type | 形状 | Format |
C | Circle | C,<diameter>[X<hole width>[X<hole height>]] |
R | Rectangle | R,<width>X<height>[X<hole width>[X<hole height>]] |
O | Oval | O,<width>X<height>[X<hole width>[X<hole height>]] |
P | Polygon | P,<diameter>X<# sides>[X<rotation>[X<hole width>[X<hole height>]]] |
- AMパラメータで、マクロ定義する部品となるアパーチャ
番号 | 形状 | 引数 | 説明 |
1 | Circle | | 円形のアパーチャ |
| | $1 | 露光(0:OFF,1:ON,2:トグル) |
| | $2 | 直径 |
| | $3 | 中心X座標 |
| | $4 | 中心Y座標 |
| | | |
2,20 | Line(vector) | | 線幅と始点・終点で表される矩形アパーチャ |
| | $1 | 露光(0:OFF,1:ON,2:トグル) |
| | $2 | 線幅 |
| | $3 | 始点X座標 |
| | $4 | 始点Y座標 |
| | $5 | 終点X座標 |
| | $6 | 終点Y座標 |
| | $7 | 回転角(CCWが正) |
| | | |
21 | Line(center) | | 幅と高さ、中心点で表される矩形アパーチャ |
| | $1 | 露光(0:OFF,1:ON,2:トグル) |
| | $2 | 矩形の幅 |
| | $3 | 矩形の高さ |
| | $4 | 中心X座標 |
| | $5 | 中心Y座標 |
| | $6 | 回転角(CCWが正) |
| | | |
22 | Line(lowleft) | | 幅と高さ、左下点で表される矩形アパーチャ |
| | $1 | 露光(0:OFF,1:ON,2:トグル) |
| | $2 | 矩形の幅 |
| | $3 | 矩形の高さ |
| | $4 | 左下X座標 |
| | $5 | 左下Y座標 |
| | $6 | 回転角(CCWが正) |
| | | |
3 | EOF | | |
| | | ファイル終了(.desファイルで使用) |
| | | |
4 | Outline | | 50頂点までの多角形アパーチャ |
| | $1 | 露光(0:OFF,1:ON,2:トグル) |
| | $2 | 頂点数 |
| | $3 | 始点X座標 |
| | $4 | 始点Y座標 |
| | $5 | 第2点X座標 |
| | $6 | 第2点Y座標 |
| | $7 | 第3点X座標 |
| | $8 | 第3点Y座標 |
| | : | :頂点数だけ繰り返す |
| | : | :(閉じる場合は始終点が同じ) |
| | $N | 回転角(CCWが正) |
| | | (N=頂点数x2+3) |
| | | |
4 | Polygon | | 中心点と頂点数で表される正多角形アパーチャ |
| | $1 | 露光(0:OFF,1:ON,2:トグル) |
| | $2 | 頂点数 |
| | $3 | 中心X座標 |
| | $4 | 中心Y座標 |
| | $5 | 径 |
| | $6 | 回転角(CCWが正) |
| | | |
5 | Moire | | 十字線を持つ同心円アパーチャ |
| | $1 | 中心X座標 |
| | $2 | 中心Y座標 |
| | $3 | 外径 |
| | $4 | 円の線幅 |
| | $5 | 円の間隔 |
| | $6 | 円の数 |
| | $7 | 十字線の幅 |
| | $8 | 十字線の長さ |
| | $9 | 回転角(CCWが正) |
| | | |
5 | Thermal | | サーマルパターンのアパーチャ |
| | $1 | 中心X座標 |
| | $2 | 中心Y座標 |
| | $3 | 外径 |
| | $4 | 内径 |
| | $5 | 十字線の幅(白抜き) |
| | $6 | 回転角(CCWが正) |
| | | |
- ガーバーフォーマットの例(EagleのCAMで出力したもの)
- 最初に全体的な設定
- アパーチャのマクロ定義
- Dコードにアパーチャ定義
- Dコード指定して描画を繰り返す
- D02は移動のみ、D01は描画しながら移動、D03はフラッシュ(スタンプを押すように描画)
G75* // 360°円弧補間有効
%MOIN*% // inch単位
%OFA0B0*% // 描画全体のオフセット →A0B0って何だろう?
%FSLAX25Y25*% // 数値形式(リーディング0省略、絶対値モード、整数2桁、小数点以下5桁)
%IPPOS*% // イメージ極性Posi(正転)
%LPD*% // レイヤ極性Dark(塗り)
%AMOC8* // アパーチャーマクロ名:OC8 定義
5,1,8,0,0,1.08239X$1,22.5* // Polygon8角形、直径1.08239x$1、22.5°回転
%
%ADD10C,0.00000*% // D10:Circle 径0 →これって実際は描画されないんだろうか?
%ADD11R,0.11811X0.11811*% // D11:Rectangle 118.11mil角
%ADD12R,0.04400X0.04400*% // D12:Rectangle 44mil角
%ADD13R,0.05600X0.05600*% // D13:Rectangle 56mil角
%ADD14OC8,0.05600*% // D14:OC8 0.056
%ADD15C,0.03600*% // D15:Circle 径0.036
%ADD16C,0.01000*% // D16:Circle 径0.01
D10* // アパーチャD10をセット
X0015956Y0006500D02* // 移動して
X0015956Y0076500D01* // 描画
X0160956Y0076500D01* // 描画
X0160956Y0006500D01* // 描画
X0015956Y0006500D01* // 描画
D11* // アパーチャD11をセット
X0095956Y0041500D03* // フラッシュ!
D12* // アパーチャD12をセット
X0066956Y0050250D03* // フラッシュ!
X0056956Y0050250D03* // フラッシュ!
D13* // アパーチャD13をセット
X0025956Y0071500D03* // フラッシュ!
X0025956Y0011500D03* // フラッシュ!
D14* // アパーチャD13をセット
X0035956Y0011500D03* // フラッシュ!
X0045956Y0011500D03* // フラッシュ!
X0055956Y0011500D03* // フラッシュ!
X0065956Y0011500D03* // フラッシュ!
:
:
- リーディング0省略のはずなんだけど、省略されない場合もあるらしい。(そのほうが読みやすいから良いんだけど)
[top]
- Excellonフォーマットは、プリント基板にドリルで穴を開ける場所を指定するもの
- 最初に、ツール番号に対してドリル径を割り当てて、
- ツールを切替えながら座標を指定して穴を開けていく
- Excellonフォーマットの情報は何故か非常に少ない。
- とりあえず、 こちらの資料を見つけたので、そのまま抜粋させてもらいます
パラメータ | 意味 |
% | Rewind and Stop |
X#Y# | Move and Drill |
T# | Tool Selection |
M30 | End of Program |
M00 | End of Program |
M25 | Beginning of Pattern |
M31 | Beginning of Pattern |
M01 | End of Pattern |
M02 X#Y# | Repeat Pattern |
R#M02X#Y# | Multiple Repeat Pattern |
M02 X#Y# M70 | Swap Axis |
M02 X#Y# M80 | Mirror Image X Axis |
M02 X#Y# M90 | Mirror Image Y Axis |
M08 | End of Step and Repeat |
N# | Block Sequence Number |
/ | Block Delete |
R#X#Y# | Repeat Hole |
G05,G81 | Select Drill Mode |
G04 X# | Variable Dwell (ignored) |
G90 | Absolute Mode |
G91 | Incremental Mode |
G92 X#Y# | Set Zero |
G93 X#Y# | Set Zero |
M48 | Program Header to first "%" |
M47 | Operator Message CRT Display |
M71 | Metric Mode |
M72 | English-Imperial Mode |
Snn | Spindle Speed (RPM) |
Fnn | Z axis feed speed (IPM) |
- でも、普通に使われるのはぜいぜいインチ/ミリ単位の指定ぐらい。
- あとは、ドリルの設定と選択、座標の指定があるだけのものが多い
% // Rewind and Stop
M48 // Program Header
M72 // English-Imperial Mode
T01C0.02400 // Tool 1 Change: to 24 mil
T02C0.03600 // Tool 2 Change: to 36 mil
T03C0.07874 // Tool 3 Change: to 78.74 mil
% // End of Header: Drill data follows
T01 // Select Tool 1
X51206Y15750 // Drill at X:512.06mil, Y:157.50mil
X71706Y21500 // Drill at X:717.06mil, Y:215.00mil
:
X54706Y59750 // Drill at X:547.06mil, Y:597.50mil
X151706Y61750 // Drill at X:1517.06mil, Y:617.50mil
T02 // Select Tool 2
X25956Y71500 // Drill at X:259.56mil, Y:715.00mil
X35956Y71500 // Drill at X:359.56mil, Y:715.00mil
:
X35956Y11500 // Drill at X:359.56mil, Y:115.00mil
X25956Y11500 // Drill at X:259.56mil, Y:115.00mil
T03 // Select Tool 3
X95956Y41500 // X:959.56mil,Y:415mil
M30 // End of Program
- Excellonフォーマットのドリル座標は、1/100000inch単位(1/100mil単位)で記述されているらしい
- 本来、T03のドリル位置は、Eagle上の座標で800,350だが、マイナス方向にはみ出しているデータがある
- そのデータの左下を基準にすると、959.56,415に近い値になるので、多分そういうことだと思う
- 同じデータを、EagleのExcellon_24で変換したもの
% // Rewind and Stop
M48 // Program Header
M72 // English-Imperial Mode
T01C0.0240 // Tool 1 Change: to 24 mil
T02C0.0360 // Tool 2 Change: to 36 mil
T03C0.0787 // Tool 3 Change: to 78.7 mil
% // End of Header: Drill data follows
T01 // Select Tool 1
X5121Y1575 // Drill at X:512.1mil, Y:157.5mil
X7171Y2150 // Drill at X:717.1mil, Y:215.0mil
:
X5471Y5975 // Drill at X:547.1mil, Y:597.5mil
X15171Y6175 // Drill at X:1517.1mil, Y:617.5mil
T02 // Select Tool 2
X2596Y7150 // Drill at X:259.6mil, Y:715.0mil
X3596Y7150 // Drill at X:359.6mil, Y:715.0mil
:
X3596Y1150 // Drill at X:359.6mil, Y:115.0mil
X2596Y1150 // Drill at X:259.6mil, Y:115.0mil
T03 // Select Tool 3
X9596Y4150 // X:959.6mil,Y:415mil
M30 // End of Program
- 比較してみると、Excellon_24のドリル座標は、1/10000inch単位(1/10mil)で記述されているようだ
- 0.1mil = 0.00245mmなので、普通の用途ならば、十分な精度だと思う
- でも、ExcellonとExcellon_24のフォーマットを区別する記述が全く無い1。
- そうなると基本的には、基板メーカーの指定するCAMファイルを変更するのは、あまり望ましくないかもしれない。
- 但し、Eagleのバージョンが違うと、同じCAMファイルでもフォーマットが同じとは限らないかもしれない。
- ドリル座標が10倍ずれるので、すぐに気がついてくれる可能性は高いと思う2
- 小数点以下の桁数を指定するパラメータが無いので、フォーマットの判定が難しいが、
- もしかすると、Tパラメータで指定される数値の少数点以下の桁数で、判別できるかも4しれない。(170427追記)
- まぁ、ガーバーファイルの小数点以下の桁数と合わせておくのが無難な気がする。
1そのためのパラメータを作ってくれれば良かったのに。
2だからといって、直してくれるかどうかは分からない。。
3何故こんなちょっとした違いの紛らわしいフォーマットを作るんだろう。わけわからん。。
4少なくとも、自分が調べた範囲では一致しているようだ。
[top]
[Homeに戻る]