This is a set of scripts and a configuring GUI I use and I thought I would share.
I use KiCad for layout and EMC/LinuxCNC.
This is the README include with more info.
If you find this usefull, find a bug, or have a good sugestion I would like to know.
Tested with LinuxCNC 2.6.0~pre and KiCad (2012-01-19 BZR3256)-stable and
### DISCLAIMER ###
CNC MACHINES CAN BE DANGEROUS!!!
THOROUGHLY CHECK AND TEST ANY CODE BEFORE RUNNING!!!
Files included in boardtools directory:
doall.py GUI front end for pcbbatch
pcbbatch.py Batch file to run all programs using config file
boardcfgdef.py Default config file
Etch_Z_adjust.2.2.cl.py Modified command line version
gerber2emc2cl.py Modified command line version
p2gdrillopt.py For optimizing drill files
p2gpathopt.py For optimizing paths
demo Directory with sample Kicad layout, gerbers, and
sample boardcfg.py for testing
pcb2gcode installed on system
opti (from Etch_Z_adjust) Untested, I have not used it, not included
-Quick and dirty:
For GUI, from boardtools directory run:
You will probably need to run doall.py at least once to verify default
file paths. Save defaults to boardcfgdef.py in installed directory.
To try demo:
Click "Load boardcfg"
Open the demo directory and choose boardcfg.py
Click "Default Paths" and set to the correct locations.
Click on "Browse" under "Board back" and reselect "demo-Back.gbl"
to make sure the path is working directory is correct.
This will automatically set the other files correctly.
Click "Run boardcfg" (it will automatically ask you to save)
Check out the generated files!
To run a config file from a project directory:
Generate ready to run g-code files from KiCad for LinuxCNC using one interface.
-The method (how I do it):
Schematic and board layout with KiCad.
I use the Comment layer for text and draw board outline using actual tool
path based on the bit I will be using so I can leave gaps to keep boards
paneled together. (there is an option to use pcb2gcode for outline instead)
Generate gerbers and drill files (4). *Back.gbl, *PCB_Edges.gbr, *Comments.gbr,
Use pcb2gcode to generate back and drill g-code files.
* the paths are very "stair-steppy" which I did not like
Use gerber2emc2cl to generate text and outline g-code files.
Join the paths and text together in one file.
Use p2gpathopt to reduce "stair-step", smooth paths, and reduce moves.
Due crude optimizing.
Use p2gdrillopt to due crude optimizing and optionally use only one drill bit.
Use Etch_Z_adjust (*modified) to do auto-leveling.
Have a config / batch script to do all this automatically.
In reality there is a script that is placed in the drawing directory
that holds the configs (boardcfg.py) and calls another script (pcbbatch)
that does all the hard work. This way boardcfg can be run in place when
a board is modified without copying main script to each drawing directory.
All needed settings needed to run are saved in the boardcfg.py file.
A GUI to select all the various setting and generate the config file and
optionally run it.
Config file default name is boardcfg.py This can be modified by hand "at own
risk" if desired, but may break compatibility with GUI. Undocumented.
-What does the work:
Modified command line version. Added ability to re-run file without
re-probing. Modified to use a separate probe instead of tool bit, and to
set tool height automatically.(Must use EMC2/LinuxCNC 2.5+!!!!!! uses G10)
Modified command line version. Added ability to mirror and offset.
For optimizing drill files. Allows using only one drill and does crude
optimizing using Morton number.
For optimizing paths. Smooths out pcb2gcode paths by finding the midpoint
of each stair-step, eliminates redundant points creating straight lines
within a set tolerance. (difference in slope < .001 or about .057 degrees)
Adds very slight deviations from original, but gives much smoother result.
Also optimizes based on Morton number.
-Credit where credit is due:
While thoroughly hacked and mangled, my work is based on these previous works.
Both have no copyright/left restrictions in the files.
I likewise put no restrictions other than ask for credit if you use it.
(Please visit lwill.net)
Etch_Z_adjust from michael_m at cnczone.com
gerber2emc2 from SAMMEL Lothar on the LinuxCNC wiki
-Why my settings / method seems weird:
I actually use a coated board and a drag bit to scribe the coating, then drill
it without removing it from the machine, then etch in FeCl. The scribe
only needs to be offset .001. The scribe and probe mount off to the side
of my spindle, that is the reason for the offsets. I also use
Etch_Z_adjust for engraving other things using a normal engraving bit and
separate probe which was the original reason for modifying it.
I used the Morton number optimizing method because it was fast and simple and
better than nothing. I may rewrite the optimizing method later.
This is my first major attempt at Python programming, so it is ugly. It
started simple, and 1100+ lines of code later.... So don't ask why I did
something the way I did, the answer you will likely get is
"Because it worked!"
More info on this and other stuff at lwill.net/blog
All comments are welcome, but I reserve the right to ignore them!
I can be contacted though lwill.net