How to tile Gerber Files

General project help for Adafruit customers

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
mikewitt
 
Posts: 111
Joined: Thu Jan 04, 2007 9:18 pm

How to tile Gerber Files

Post by mikewitt »

There seemed to be lots of need, as there were lots of people asking: "How do I tile/panelize boards?"

This is a work in progress, but I wanted to get at least a starting point (for now) out there for people.

UPDATE 5/1/2007:
Added Links to programs.
Reomved a large section, replaced it with a file.
Added a new CFG file for reference.

Here's my To Do list for now:
Explain ViewMate, and how to use it to check your boards for accuracy
Pictures of GrebMerge in action
Deeper, better explanation of GerbMerge

One final thing before I start:
I am NOT liable for any damage this may cause. I am NOT liable for the accuracy of the contentents of the tutorial. I am NOT liable if the program creates defective gerbers. I am NOT liable if the program doesn't work, and you send off the files to get made, and you get a bunch of non-functional boards. If you live in a place where these warranties are insufficient under law, and thereby null and void, use of these instructions is PROHIBITED.
Sorry I had to do that, but I don't wan't or need to get in trouble for something I volunteered.

How to tile PCBs:


Go get these files first:
GerbMerge
Python (I'll be using 2.5)
eGenix mxBase
SimpleParse
ViewMate (Registration required)

Install all of these programs, using standard installation paths.

GerbMerge uses configuration files, they specify what files are to be combined together. I'll give a quick overview here, then come back later, after we've made our Gerber files that we want to merge.

Here's the standard configuration file:

Code: Select all

# This configuration file demonstrates panelizing a single job.

##############################################################################
# In the [DEFAULT] section you can create global names to save typing the same
# directory name, for example, over and over.
##############################################################################
[DEFAULT]

# Change projdir to wherever your project files are, for example:
#
#   projdir = /home/stuff/projects/test
#
# or relative pathname from where you are running GerbMerge
#
#   projdir = testdata
#
# or if all files are in the current directory (as in this example):
#
#   projdir = .
projdir = .

# For convenience, this is the base name of the merged output files.
MergeOut = merge1

#############################################################################
# The [Options] section defines settings that control how the input files are
# read and how the output files are generated.
#############################################################################
[Options]

################################################################
#
#             Settings that are somewhat important
#
################################################################

CutLineLayers = *topsilkscreen,*bottomsilkscreen

CropMarkLayers = *topsilkscreen,*bottomsilkscreen

FabricationDrawingFile = %(mergeout)s.fab

ExcellonLeadingZeros = 0

OutlineLayerFile = %(mergeout)s.oln

ScoringFile = %(mergeout)s.sco

PanelWidth = 12.6
PanelHeight = 7.8

LeftMargin   = 0.1
RightMargin  = 0.1
TopMargin    = 0.1
BottomMargin = 0.1

################################################################
#
#           Settings that are probably not important
#
################################################################
XSpacing = 0.125
YSpacing = 0.125

CutLineWidth = 0.01
CropMarkWidth = 0.01
AllowMissingLayers = 0

[MergeOutputFiles]
Prefix = %(mergeout)s

*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor
ToolList = toollist.%(prefix)s.drl
Placement = placement.%(prefix)s.txt
################################################################
#
#		This is the project specifications
#
################################################################

[Proj1]

Prefix=%(projdir)s/proj1

*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor

Repeat = 5
Note that I have removed many comments from this file, because I will be explaining everything you need to know. If you want to see the original file, it's here: http://claymore.engineer.gvsu.edu/~ster ... ayout1.cfg

Here's a list of sections:
*DEFAULT
*Options
*MergeOutputFiles
*Proj1

In DEFAULT you have two variables, projdir and MergeOut.

projdir specifies where the project is. I suggest that you don't type in something like

Code: Select all

C:\blah blah\blah blah
rather, type something like

Code: Select all

..\..\..\blah blah\blah blah
it seems to work better. Also notice that there are no quotes around the path, there shouldn't be.

MergeOut is the name of the files after you merge them. Name them anything you want, just no ,/| etc... just like standard 8.3 format.

Next is Options:
The only things you need to change are panelwidth and panelheight. These are in inches, and should be pretty self-explanitory.

Next up, MergeOutputFiles. You shouldn't need to change these parameters.

And onto the last part. Proj1. This is the place where you put your files. The name doesn't have to be “Proj1” it can be anything you want it to be, and it might be helpful if you name it something meaningful. We'll go over this a little later, but for now, remember that you'll have multiple groups like this one.

You'll want to save this file as something.cfg in your python directory.



Onto Eagle:

Exporting your files.
This is a little complicated, for the sole reason that Eagle's “gerb274x.cam” cam file is missing two things that GerbMerge needs. It's no problem though: I'll walk you through how to get all the needed files.

I'll be doing this with ladyada's wavebubble pieces, all of them individually.

1)Put all of the jobs you want in one folder (close to the root directory preferably, C: in this case) under seperate subfolders.
Image

2)Open Eagle by double clicking the first file.
Image

3)Open the CAM window
Image

NEW
4) Download this file into your CAM folder:
http://witt.michael.googlepages.com/gerb274x-m.cam
** The old way didn't work correctly, this file resolves that **

5) Run it by pressing "Process Job"

6) Repeat for all other boards.

Now we need to set up the projects in the CFG file that we use with GerbMerge.

For each of the projects you created, you need a section like this:

Code: Select all

[Proj1]

Prefix=%(projdir)s/proj1

*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor

Repeat = 5
Change the name to something meaningful and unique (In this example, it's “Proj1”).
Change the “Repeat” variable to the number of repetitions you want, so if you want 3 copies, change it to 3.
Also modify the Prefix variable, leaving the part that says:

Code: Select all

%(projdir)s/
but changing the last part to the subfolder you made earlier on in the tutorial.
Now go back to the first section of the configuration file (called “DEFAULT”), and change the projdir variable to

Code: Select all

..\
then add the path to your MAIN directory. This is the directory that has lots of subfolders.
Save the file as something.cfg (you can change “something” to anything you want, just remember it) in C:\Python25. (Change Python25 to something else if you use a version of python different than 2.5)


The file I used, in keeping with all of the WaveBubble parts is here:

Code: Select all

# This configuration file demonstrates panelizing a single job.

##############################################################################
# In the [DEFAULT] section you can create global names to save typing the same
# directory name, for example, over and over.
##############################################################################
[DEFAULT]

# Change projdir to wherever your project files are, for example:
#
#   projdir = /home/stuff/projects/test
#
# or relative pathname from where you are running GerbMerge
#
#   projdir = testdata
#
# or if all files are in the current directory (as in this example):
#
#   projdir = .
projdir = ..\WaveBubble

# For convenience, this is the base name of the merged output files.
MergeOut = tiled_stuff

#############################################################################
# The [Options] section defines settings that control how the input files are
# read and how the output files are generated.
#############################################################################
[Options]

################################################################
#
#             Settings that are somewhat important
#
################################################################

CutLineLayers = *topsilkscreen,*bottomsilkscreen

CropMarkLayers = *topsilkscreen,*bottomsilkscreen

FabricationDrawingFile = %(mergeout)s.fab

ExcellonLeadingZeros = 0

OutlineLayerFile = %(mergeout)s.oln

ScoringFile = %(mergeout)s.sco

PanelWidth = 10
PanelHeight = 6

LeftMargin   = 0.1
RightMargin  = 0.1
TopMargin    = 0.1
BottomMargin = 0.1

################################################################
#
#           Settings that are probably not important
#
################################################################
XSpacing = 0.125
YSpacing = 0.125

CutLineWidth = 0.01
CropMarkWidth = 0.01
AllowMissingLayers = 0

[MergeOutputFiles]
Prefix = %(mergeout)s

*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor
ToolList = toollist.%(prefix)s.drl
Placement = placement.%(prefix)s.txt
################################################################
#
#      This is the project specifications
#
################################################################

[wb_ant]

Prefix=%(projdir)s\cigpack_ant\cigpack_ant

*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor

Repeat = 1

[wb_aaa]

Prefix=%(projdir)s\cigpack-batt_aaa\cigpack-batt_aaa

*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor

Repeat = 1

[wb_lipoly]

Prefix=%(projdir)s\cigpack-batt_lipoly\cigpack-batt_lm3622

*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor

Repeat = 1

[wb_main]

Prefix=%(projdir)s\cigpack-main\cigpack-main_rc1a

*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor

Repeat = 1

Now open up a command prompt.
Type:

Code: Select all

cd C:\Python25
(change this if you're using a version of python different than 2.5)
now type:

Code: Select all

gerbmerge something.cfg
A disclaimer will come up, type y, then enter.

The program will start to work, placing all of your files on the board. It will not stop on its own, you have to type "Ctrl-c" to get the program to break. It will then save all of your files in the C:\Python25" directory.

I will explain more later, but right now, I have to go.

User avatar
mikewitt
 
Posts: 111
Joined: Thu Jan 04, 2007 9:18 pm

Post by mikewitt »

The resulting files are here: http://witt.michael.googlepages.com/tiled_stuff.zip

They are fine, and should be able to be used for production (but you should just use ladyada's files, even though hers are too closely grouped together, mine could be routed if you wanted; not to brag or anything :D ).

ghsrocketman
 
Posts: 2
Joined: Sat Jul 28, 2007 2:02 am

Post by ghsrocketman »

Mike

Thanks for spending the time to put together a much needed tutorial.

I'm having difficulty running the last script though.

After opening a Command Prompt window and changing directories to Python24... I can't compelete the command of:
gerbmerge test.cfg

I keep getting a "The system cannot find the path specified"

I've installed all three of the required programs:
python-2.4
egenix-mx-base-3.0.0.win32-py2.4
SimpleParse-2.1.0a1.win32-py2.4

and of course:
gerbmerge-1.1.win32

all of the files saved automatically to the C:\Python24 directory.

I'm thinking the problem is with gerbmerge... when I simply type 'gerbmerge' into the prompt, it also says "The system cannot find the path specified"

any help would be appreciated..
thanks!!!!!!!

ghsrocketman
 
Posts: 2
Joined: Sat Jul 28, 2007 2:02 am

Post by ghsrocketman »

nevermind... problem was I didn't edit the .bat file to python24! thanks for the how to though!

Locked
Please be positive and constructive with your questions and comments.

Return to “General Project help”