PC Board Tools
Mar 23, 2012 Electronic Projects, Programming
Here are the scripts I use to convert PC boards from Kicad to G-code.
http://www.lwill.net/downloads/boardtools-01.tar.gz
This is the README included for information.
README 03/28/20012 Tested with LinuxCNC 2.6.0~pre and KiCad (2012-01-19 BZR3256)-stable and pcb2gcode 1.1.4 ### 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 REQUIRED: python-argparse pcb2gcode installed on system EMC2/LinuxCNC 2.5+ KiCad Optional: opti (from Etch_Z_adjust) Untested, I have not used it, not included -Quick and dirty: Extract. For GUI, from boardtools directory run: $python doall.py 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: $python boardcfg.py -The idea: 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, and *.drl 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. -The Solution: 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: pcb2gcode Etch_Z_adjust.2.2.cl.py 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) gerber2emc2cl.py Modified command line version. Added ability to mirror and offset. p2gdrillopt.py For optimizing drill files. Allows using only one drill and does crude optimizing using Morton number. p2gpathopt.py 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. You decide. 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 http://www.cnczone.com/forums/pcb_milling/82628-cheap_simple_height-probing-11.html#post843483 gerber2emc2 from SAMMEL Lothar on the LinuxCNC wiki http://wiki.linuxcnc.org/cgi-bin/wiki.pl?Converting_Tools -Other software: KiCad http://kicad.sourceforge.net/wiki/Main_Page LinuxCNC http://www.linuxcnc.org pcb2gcode http://sourceforge.net/apps/mediawiki/pcb2gcode/index.php?title=Main_Page -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.netNumber of View :22417
Tags: electronics, pc boards, programming
November 4th, 2012 at 4:26 pm
Hi!
Amazing piece of code you’ve put together, and I’ve made good use of it in some cases.
However, I’m struggling with using metric system gerber files.
Did you hard-code the unit system on some level? I’ve tried to find it, but without luck.
Sincerely,
Jonas
November 5th, 2012 at 11:01 am
Thank you, for being the first to comment on the code and my blog! (aside from spammers)
My code is just a “wrapper” or “front end” for pcb2gcode.
Apparently there is a bug in pcb2gcode.
I am in the US so do not work in metric, but I thought I tested it and it worked. I will take another look when I get a chance.
I think most of the conversions are unit-less, so I think if you put metric in, output will be metric as well. You may just need to edit the preamble in the outputted G-code (G20/G21). The problem comes converting from one to another.
I have found a other few bugs and made a few minor changes and will be posting an updated version soon.
January 13th, 2013 at 8:22 am
Hi, I thought I would be the second non-spammer! I hoping to mill PCB with my CNC also using KiCad. I came across your blog after trying to make ‘Etch_Z_adjust.py’ working. Thanks for this effort. I am going to dig in…
January 13th, 2013 at 1:35 pm
Whooooo! On a roll now!
Thank you.
I have been using the tools lately and have made some more small changes, but think I have introduce a few more bugs.
I will try to update them and upload them here for others to try soon,
Really.
Promise.
Soon.