The freeware and light versions of Cadsoft Eagle limit the design area of the PCB to 10cm x 8cm. This is enough to do many projects, but when you want to try and panelize to fill a 10cm x 10 cm board, it won't work. Plus, maintaining separate projects and updating them on the panel, and maintaining consistency of labels and reference designators can be a pain.
In this Instructable, I will show you an easy way to merge Gerber files generated from Eagle (or any other EDA tool) in a way that Seeed Studio will accept them for panelizing with their Fusion PCB service. I will be using the SARduino644 v1.0 board shown below as an example.
Step 1: Design Board and Render Gerbers
When you're happy with your board, and it passes Seeed's design rules, use the Seeed CAM processor to generate the Gerbers for your PCB.
When you're done, you should end up with the following files:
<board>.GTO - top silkscreen
<board>.GTS - top soldermask
<board>.GTL - top copper
<board>.GBO - bottom silkscreen
<board>.GBS - bottom soldermask
<board>.GBL - bottom copper
<board>.TXT - Excellon drill file.
Before you proceed, you should check the Gerbers carefully to make sure everything looks right *before* combining them into a panel, this will save time later if you find a problem. I like to use the online gerber viewer provided by CircuitPeople. You can make a zip of all the files and upload them in one go, and they will all be rendered to image files.
Step 2: Install Gerbmerge and Patch for Seeed
Go download the latest version (currently 1.8) and install it.
In order to accept panelized PCBs, Seeed requires an outline for the entire panel to be present on all layers, otherwise, they will offer to change your order for multiple, separate boards, which defeats the entire purpose. Out of the box, v1.8 of gerbmerge does not support rendering the outline of the entire panel to all layers. However, I have successfully patched it to include this support. I have submitted this patch to the folks at Rugged Circuits, and they are considering including it in the next release. Until then, you'll have to apply it manually. But it isn't hard...
The latest patched version is in this gerberge-patched github repo. To patch your installation, find the installed files (for example, look for a gerbmerge folder in C:\Python<version>\Lib\site-packages\ on Windows, or in /usr/lib/python<version>/site-packages on Linux). Then apply these patches: https://github.com/space-age-robotics/gerbmerge-patched/commit/5078c7b33439912c465fb33fc0082b82cfac3687#diff-0 to the config.py and gerbmerge.py files.
If you're worried about messing up your installation, feel free to make a backup copy of the gerbmerge folder before you proceed. You might also consider setting up your merge configuration and layout first, and then adding the patch once you have it producing the output you want, so you have more confidence in the output.
Step 3: Define Your Panel Configuration
# I always use the local directory to contain all input gerbers, config files, and output files
projdir = .
# MergeOut is the prefix of the output files.
MergeOut = merge2
# CutlineLayers will determine where the subboard markings are, which will help in separating them. These are the accentuated lines between the two instances of the board in the image below.
CutLineLayers = *topsilkscreen,*bottomsilkscreen
# OutlineLayers is used by the patched gerbmerge, it defines which layers the entire panel outline will be drawn on. Seeed requires this on all layers.
OutlineLayers = *toplayer,*bottomlayer,*topsilkscreen,*bottomsilkscreen,*topsoldermask,*bottomsoldermask
# here you can specify the maximum dimensions allowed by the Seeed PCB service you ordered (in inches).
# gerbmerge will warn you if your final panel (based on your layout) exceeds these dimensions.
PanelWidth = 3.93
PanelHeight = 3.93
# comment out the margins or set them to zero if you want the maximum amount of useable area on your panel.
#LeftMargin = 0.1
#RightMargin = 0.1
#TopMargin = 0.1
#BottomMargin = 0.1
# spacing determines how much space between the panels. I found 0.0625 to be plenty of space for a band-saw blade, I may reduce it a hair in the next run.
XSpacing = 0.0625
YSpacing = 0.0625
# if you define the merge output files to be in the filename scheme that Seeed requires, you won't have to rename them by hand later.
Prefix = %(mergeout)s
ToolList = toollist.%(prefix)s.drl
Placement = placement.%(prefix)s.txt
# Job configuration - for each different sub-board, define a section like follows with the subboard name (used in the layout file) and the gerbers comprising that job.
# List all the layers that participate in this job. Required layers are Drills
# and BoardOutline and have no '*' at the beginning. Optional layers have
# names chosen by you and begin with '*'. You should choose consistent layer
# names across all jobs.
Step 4: Define Your Panel Layout
Here is the file in the repo: https://github.com/space-age-robotics/SARduino/blob/master/panel.layout
Defining layouts is very simple, and the instructions are excellent. Gerbmerge also has basic auto-layout capability, see the fine documentation for more details.
Step 5: Generate Panel Gerbers and Check
path/to/python path/to/gerbmerge.py panel.cfg panel.layout
You will first be presented with a warning about the lack of warranty, as in the first image below. Enter 'Y' to continue.
You should then shortly see output like in the second image below.
Have a look at the output in your favorite gerber viewer, to make sure the results are as you expected.
Repeat from step 1 until you are happy with the results.
Step 6: Order PCBs
Step 7: Separate PCBs From Panel
I didn't catch any photos of using the band saw, but this hackaday post has some good ones.
You can see the cut and finished boards in the images below.