Crazy-accurate PCB stencils via Silhouette Cameo2013/04/05
Wow, I haven’t posted anything here in way too long. This might help.
Right now I’m working on getting accurate PCB stencils out of my Silhouette Cameo desktop cutter. People have been doing this for a while now, but they’ve been plagued by various complications with the data workflow and physical cutter settings. The process involved transforming your artwork through several formats, importing into a proprietary application (you can buy SVG support for $50…), and hoping you have everything set right.
My initial work on the process was to change the data flow, allowing me to work from Gerbers rather than exporting a different format from Eagle. It was a cumbersome process that involved using gerbv to write SVG files, then loading those into Inkscape in order to save them out as “R14” DXF, then switching over to my Windows VM to import the file into Silhouette Studio, dragging it to the right spot, and then cutting. This at least allowed me the possibility of cutting an entire panel as generated by gerbmerge, but took waaay too long.
Now, I’m well on my way to having a radically superior process in place. First off, I found that there are several projects capable of talking to the Graphtec engine that the Cameo is based on. These gave me the foundation to write my own simple code to control the cutter, although there are still a lot of “magic commands” that need to be figured out the hard way (I’ll have to set up USB sniffing and exercise Studio a fair bit to figure them out, if I care). That got me a Python script that could cut whatever I wanted programmatically.
The next step was to try to clean up the physical results. Ever since I started cutting stencils, I’ve been plagued with strange shapes instead of nice rectilinear openings. Well, this turns out to be a function of the design of the Cameo blade. Inside the cutter is a vertical shaft with a very small triangular knife blade that spins freely. The shaft is centered on the nominal X,Y of the cutter head, but the tip of the blade is not. It drags roughly 0.5mm behind the center of the shaft.
This means that when you make a hard corner with the cutter head, the blade will not make the same corner. As the center of the head (black) makes the sharp corner, the knife (red) lags behind and eventually ends up where the head wants it. The result is a shape that roughly approximates the original, but only mostly. Even worse, because the blade never actually reaches the start point, it leaves a little un-cut corner.
My initial thought was to basically over-shoot the corner, then come back to the target line. A simple method uses a single angled return path, but really it should be an arc of the same radius as the blade lag.
That mostly worked, but then I ran into another problem with blade-dragging: the blade drops with whatever rotation it had for its previous cut.
In this case you can see that the blade was aligned from a previous upward cut when it dropped, then slowly made its way towards the right cut it was supposed to make. The solution I came up with was to do a “pre-cut” off to the side before any lines of a given angle. This leaves the blade pre-set at the right angle to make sure the beginning of the cut is straight.
The final trick was to cut each line in half, and actually force the blade to make two cuts starting from the center towards each end. This avoids any question of exactly where the blade drops at the corners, and leaves and overshoot at every corner. At least for rectilinear openings (all I care about just for now), this results in a perfect opening:
That’s a millimeter ruler up against an 0.2mm square hole. Not only is it nearly perfect (to the limit of my ability to actually see the thing!), but it lifted clear of the adhesive cutting mat exactly as you see: the fragment was 100% detached from the sheet.
At this point I’ve got a minimal codebase that reads actual stencil data, albeit the long way around: gerber -> gerbv -> Postscript -> pstoedit -> .pic(troff) -> myscript. I’m hoping to fix that in the long run by reading Gerbers directly.
I have all sorts of transform functions in place to allow me to implement these techniques then send the resulting cut paths to the hardware. I’m still tweaking a few things (I don’t have the cut-from-center trick written yet, but I do have a “repeat last line” to make 5 cuts around a rectangle) and getting period odd results (my last test left every single fragment still attached well enough to peel off with the main sheet…), but it won’t be long before I can take a Gerber file straight from Eagle CAM and generate a nearly perfect stencil on my $300 cutter!