Home

Awesome

KiPadCheck

KiCad python script for extra DRC checks involving drill holes, pads, paste, and silk README.md

kipadcheck.py
Original Author: Greg Smith, June-August 2017

Naming conventions (from PEP8):
Short python naming guide (from PEP8):

ClassName
function_name
function_parameter
parameter_disambiguation_
variable_name
_nonpublic_function
_nonpublic_global_variable
CONSTANT_VALUE_NAME

This is beta. Not thoroughly tested.

Inputs and outputs are in varying non-changable units (mils, inches, mm, nm)
Only tested on KiCAD 4.06, Windows 7.

Install: In Windows, place file in 
C:\Program Files\KiCad\share\kicad\scripting\plugins\kipadcheck.py
In pcbnew, open scripting console (Tools > Scripting Console)
Type "import kipadcheck".

ABOUT:
   This python script provides additional basic DRC checks to KiCAD
   and lists to make tweaking pads for stencil creation easier.
   It adds a menu item to "Tools" called kipadcheck.

THERE ARE BUGS:

Preliminary support is included for more than 2 layers.
Pads are not verified for shape, currently assumes rectangle bounding box.
Assumes all pads are on the front.
Does not mix via drill and pad drill checks.
Does not check annular ring size.

TODO list, aside from fixing the BUGS above.
  Support all layers for all checks. Currently SilkInfo does check layers
     appropriately: F.Cu vs. F.SilkS and B.Cu vs. B.SilkS
	Support more than just through drills (i.e. buried/blind self._vias).
  Label units and make consistent.
  Mask Info: Check solder mask dam sizes.
  Silk Info: Check silk screen character sizes.
  Check Annular Rings.
  Update progress bar when doing SilkInfo

Pad Info: Produces two lists: 
  1) detailed list of pads by footprint reference with paste/mask properties
  2) quantity of pads by size
Drill Info: Generates multiple lists:
  1) Hole quantity by specified pad drill sizes
  2) Quantity by closest larger standard drill size
     (future option will be to pick among defined drill sets)     
  3) Drill list
  4) Distance from each via to next closest via
  5) Checks via drill to via drill clearance
  6) Checks via drill to track clearance
Stencil Info:
  1) Lists quantity of apertures by aperture size
  2) Summary of aperture ratios by stencil thickness
  3) Checks AspectRatio and AreaRatio against a variety 
     of stencil thicknesses (2 mil-7 mil, all currently hardcoded)
  4) Lists solder paste sizes for calculating appropriate.
SilkInfo has several options:
  1) Fast check of silkscreen bounding boxes and line segments.
  2) Slower check includes line thicknesses.

EXAMPLES:

Pad Info: Produces two lists: 
  1) detailed list of pads by footprint reference with paste/mask properties
     Number of pads: 293

     ***** Pads By Footprint Reference, Alphabetical *****
     # 4	(BT1.) X=113.665086 Y=147.423648 P=CIRC (2.64, 2.64) D=CIRC
     (2.64, 2.64) Layers=F.Cu,B.Cu,B.Mask,F.Mask lc=0.0000 c=0.1530
     Paste: spm=0.0000,0.0000 lspm=0.0000 lspmr=0.0000
     | Mask : smm=0.0000 lsmm=0.0000
     ...
  2) quantity of pads by size
     ***** Quantity of Pads By Size *****
     Size: 0.900 0.900, Quantity 4
     Size: 0.875 1.250, Quantity 2
     Size: 0.800 1.200, Quantity 2
     Size: 0.900 1.700, Quantity 1
     Size: 0.300 0.800, Quantity 24
     ...

Drill Info: Generates multiple lists:
  1) Hole quantity by specified pad drill sizes
     ***** Quantity of Pads By Specified Drill Size *****
     Size: 1.020mm, Quantity 2
     Size: 4.826mm, Quantity 6
     Size: 1.000mm, Quantity 54
     Size: 2.640mm, Quantity 2
     Size: 1.097mm, Quantity 8

  2) Hole quantity by closest larger standard drill size
     (future option will be to pick among defined drill sets)     
     ***** Quantity of Pads By Standard Drill Size *****
     Size: 1.020mm (25.908in), Drill: 0.041 (59), Quantity 2
     Size: 4.826mm (122.580in), Drill: 0.191 (11), Quantity 6
     Size: 1.000mm (25.400in), Drill: 0.04 (60), Quantity 54
     Size: 2.640mm (67.056in), Drill: 0.104 (37), Quantity 2
     Size: 1.097mm (27.871in), Drill: 0.0465 (56), Quantity 8

  3) Drill list
     ***** Drill Holes List
    (pad #, position (nm), Type, Drill, Drill Value, Via Width) *****
     0 (152661291, 138048648) 3 294000 294000 600000
     1 (113725000, 140800000) 3 294000 294000 600000
     ...

  4) Distance from each via to next closest via
     ***** Distance to next closest via  *****
     (looking only *forward* through the list)

     Minimum Via to Via = 20.000 mils (0.508 mm)
     0 3.692 mm
     1 1.205 mm
     ...

  5) Checks via drill to via drill clearance
     ***** Vias too close to another via *****
     29
     44
     ...

  6) Checks via drill to track clearance
     ***** Vias too close to track *****
     31 Via (/IOC_RB6) at (125934690, 138137006) is 306005 away from track
	(/IOC_RB5)
	((126280790, 137531001) ; (125660499, 137531001)). Shoud be 508000
     23 Via (/GND) at (150540086, 141423648) is 307472 away from track (/RE2)
	((149487558, 140816176) ; (152110941, 140816176)). Shoud be 508000
     ...


Stencil Info:
  1) Lists quantity of apertures by aperture size:
     (Aperture in mm, triplets of:
      stencil mil thickness, area ratio, aspect ratio)
     (qty 24)	Aperture=0.225,0.725 (2.0 1.69 4.43) (3.0 1.13 2.95)
	(4.0 0.85 2.21) (5.0 0.68 1.77) (6.0 0.56 1.48) (7.0 0.48 1.27)
	      Pads: [20, 45, 80, 98, 99, 100, 101, 109, 113, 121, 125, 140,
	143, 165, 205, 208, 209, 210, 233, 234, 238, 239, 241, 244]
	From: CONN_01X24
     ...

  2) Summary of aperture ratios by stencil thickness
      ***** Aperture Ratio Ranges *****
      2.0 mil Aspect: 4.429 14.764	 Area  : 1.471 4.318
      3.0 mil Aspect: 2.953 9.843	 Area  : 0.981 2.879
      4.0 mil Aspect: 2.215 7.382	 Area  : 0.735 2.159
      5.0 mil Aspect: 1.772 5.906	 Area  : 0.588 1.727
      6.0 mil Aspect: 1.476 4.921	 Area  : 0.490 1.439
      7.0 mil Aspect: 1.265 4.218	 Area  : 0.420 1.234

  3) Checks AspectRatio and AreaRatio against a variety 
     of stencil thicknesses (2 mil-7 mil, all currently hardcoded):
      ***** Failed Aperture Test *****
      Failed 5.0 mil thickness:
	Failed Area  : 0.445 0.225
	Failed Area  : 0.300 0.350
      Failed 6.0 mil thickness:
	Failed Area  : 0.555 0.245
	Failed Area  : 0.445 0.225
	Failed Area  : 0.300 0.350
	Failed Area  : 0.225 0.725
	Failed Aspect: 0.445 0.225
	Failed Aspect: 0.225 0.725
      Failed 7.0 mil thickness:
	Failed Area  : 0.555 0.245
	Failed Area  : 0.325 0.725
	Failed Area  : 0.445 0.225
	Failed Area  : 0.300 0.350
	Failed Area  : 0.225 0.725
	Failed Aspect: 0.555 0.245
	Failed Aspect: 0.445 0.225
	Failed Aspect: 0.225 0.725


Nevertheless, there are some examples of using python code to interact
with KiCAD:
   Install Tools menu, replace if already existing
      (allows reloading python file after changes)
   Iterate over tracks, identify self._vias, get sizes of
   via and pad copper, mask, and paste
   Identify which layers a pad is on.
   Generate basic interactive window.
   Display  multi-threaded wx.Gauge (self._progress bar).
   Get Paste (stencil) Aperture size calculated from pad properties.