OSHPark PCB Rules

Close, but not quite. The minimum track width only has to take into account tolerances for printing the photolithography artwork and the process of etching. But annular rings have to also account for drilling tolerances (both drill location tolerance and drill diameter tolerance as well as the actual drill being slightly larger than the finished hole size in the design to allow for the thickness of the hole plating).

This is why OSHPark specifies annular ring separate from track width. Here are the specifications from their web page:

  • 6 mil minimum trace width
  • 6 mil minimum spacing
  • at least 15 mil clearances from traces to the edge of the board
  • 13 mil minimum drill size
  • 7 mil minimum annular ring

The annular ring specification is how much to add to the radius of the drill hole so the math will be drill + 2 * annular ring. Thus 13mil + 2 * 7mil = 27mil.

That’s the value I use as well.

I think the key to this is actually calling this out in the KiCad interface vs using default annular ring (granted, this depends on how you use the Net Classes to start with). When I first made this mistake I put in a 13 mil drill and a 20 mil diameter. It looked too thin, which caused me to double check. Using the default values for drill/ring only shows the ring, not the drill inside it.

Quickly looking at the design rules and DRC dialog boxes, I don’t see anything to enforce a minimum annular ring. One would have to manually make sure that all pads are 2 * minimum annular ring (14mil with OHSPark) larger than the associated drill. Not only on vias, but also on all THT components. Might be something worth requesting as a feature addition to the development team.

KiCad has a Template option:
in the main Window there is a button ‘Start a new Project from a template’
(new Versions: ‘Create new Project from Template’)
if you click on this button you can choose from some templates -
on windows these are located in the main KiCad folder:
“c:\Program Files (x86)\KiCad\share\template”
(in the new Version: “c:*****\kicad-winbuilder-3.4\kicad\template” worked for me)
i have made a PCB-Pool Template according to there specifications.
you can download it at: http://s-light.github.io/template_PCBPool_20150105.zip
i posted this also at https://groups.yahoo.com/neo/groups/kicad-users/conversations/messages/19513

hope that helps :smile:

sunny greetings
stefan

I downloaded a OshPark 2 Layer template Zip folder linked above and then opened the template in KiCad.

This provided the following design rules for KiCad:

This is the info I was initially looking for.

I figure that if somebody does not want to deal with downloading the template they can just copy the info from the image above.

If there is anything wrong with this info as far as OSHPark’s design rules just let me know.

1 Like

Looks like what Oshpark says on their site, indeed.

It looks like 4 layer boards have different minimum track width and drill sizes.

The minimum specs for 2 layer orders are 6 mil traces with 6 mil spacing, and 13 mil drills with 7 mil annular rings.

The minimum specs for 4 layer orders are 5 mil traces with 5 mil spacing, and 10 mil drills with 4 mil annular rings.

1 Like

I’ve always seen annular ring defined as such…

http://www.totalboardsolutions.co.uk/image_gallery/AnnularRing-Text.JP_G

(remove the underscore b/w P & G in JPG. The forum won’t let me post images…)

which means that you would need to add two annular rings. However, I’ve made the mistake of submitting files with the via diameter rule set to one annular ring dimension and I got the board back fine. Use this knowledge at your own risk.

1 Like

You can create different board templates and start a new project from that template. It’s not super convenient if you don’t know which board house you’re going to use when you start, but at least it’s something.

3 Likes

Same here. I’ve read (older) IPC specs and as I recall that is the correct definition of annular ring. But don’t think of it as adding “two annular rings”. Just recognize that the annular ring is an addition to the drill radius, not the diameter. So the mathematical effect that you describe is the same.

Often the annular ring is larger than the minumum track width because it needs to take into account drill tollerances (both in drill diameter and mis-registration) and the fact that if the specified drill size is the finished hole size the board house will have to drill with a slightly larger drill so the through hole plating reduces the diameter to the customer specified size.

QFT! The specified size is the finished size so over-drilling occurs to allow plating to shrink the hole size to the specified size.

This is pretty much what I did. I made a starter projects/templates kind of thing, then just put them in a special folder and made them read-only so I don’t accidentally hit “Save” and overwrite them. Seems to work fairly well.

For a more flexible method you can open your pcb file up in a text editor and replace the section of setup as required. You can copy out from existing projects and make a simple library. Not as good as being able to load in a suppliers validated rules file, but quicker than typing out every time.

As an example i’m using for OSH 2-layer is;

(setup (last_trace_width 0.1524) (user_trace_width 0.1524) (user_trace_width 0.254) (user_trace_width 0.3048) (user_trace_width 0.4064) (user_trace_width 0.6096) (user_trace_width 0.8128) (user_trace_width 1.27) (user_trace_width 1.778) (trace_clearance 0.1524) (zone_clearance 0.508) (zone_45_only no) (trace_min 0.1524) (segment_width 0.2) (edge_width 0.15) (via_size 0.6858) (via_drill 0.3302) (via_min_size 0.6858) (via_min_drill 0.3302) (user_via 0.8 0.5) (user_via 0.91 0.6) (user_via 1.05 0.7) (user_via 1.2 0.8) (user_via 1.35 0.9) (user_via 1.5 1) (user_via 1.8 1.2) (user_via 2.1 1.4) (uvia_size 0.762) (uvia_drill 0.508) (uvias_allowed no) (uvia_min_size 0.2) (uvia_min_drill 0.1)

1 Like

you can make a template project for that and load that when creating a new project.
(everything you have in your post is stored in a templates pcb_new file.)

That is true, but if you need to check against different board houses rules then this is a quick way of doing so.

Your way surely is python scriptable. To bad KiCAD lost the macro facility some time ago due to code-maintenance issues.