2 # Copyright 2007 by Bdale Garbee <bdale@gag.com>. GPLv2
4 # Program to emit PCB footprint for 16-lead QFN, 6x6mm
5 # used by Freescale acceleromters like the MMA6556
8 # dimensions in mm from AN3111.pdf from Freescale, the Wettable Flank variant
19 # we're going to use the 1/100 of a mil fundamental unit form
21 return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
23 print '# author: Bdale Garbee'
24 print '# email: bdale@gag.com'
25 print '# dist-license: GPL 2'
26 print '# use-license: unlimited'
28 print 'Element[0x0 "AN3111" "" "" 0 0 0 0 0 100 0x0]'
30 # pad under the chip, no overall paste so we can control subset that gets paste
36 mm2mils100(CoreSquare), \
38 mm2mils100(CoreSquare + MaskAdd), \
39 '"17" "17" "square,nopaste"]'
41 # copper sub-squares in a grid to set paste area
42 for viarow in range (-1, 2):
43 for viacol in range (-1, 2):
45 mm2mils100(viacol * 1.4), \
46 mm2mils100(viarow * 1.4), \
47 mm2mils100(viacol * 1.4), \
48 mm2mils100(viarow * 1.4), \
55 # corner mounting squares .. tied to Vss on chip, but don't connect on board
57 mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \
58 mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \
59 mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \
60 mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \
61 mm2mils100(CornerSquare), \
63 mm2mils100(CornerSquare + MaskAdd), \
67 mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \
68 mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \
69 mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \
70 mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \
71 mm2mils100(CornerSquare), \
73 mm2mils100(CornerSquare + MaskAdd), \
77 mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \
78 mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \
79 mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \
80 mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \
81 mm2mils100(CornerSquare), \
83 mm2mils100(CornerSquare + MaskAdd), \
87 mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \
88 mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \
89 mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \
90 mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \
91 mm2mils100(CornerSquare), \
93 mm2mils100(CornerSquare + MaskAdd), \
96 for pin in range (1,5):
98 mm2mils100(-2.5 + pin * PinSpacing), \
99 mm2mils100(-Overall/2 - 0.30 + PinWidth/2), \
100 mm2mils100(-2.5 + pin * PinSpacing), \
101 mm2mils100(-Overall/2 + 0.55 - PinWidth/2), \
102 mm2mils100(PinWidth), \
104 mm2mils100(PinWidth + MaskAdd), \
105 '"pin%i"' % (13-pin), '"%i"' % (13-pin), '0x0100]'
108 mm2mils100(-2.5 + pin * PinSpacing), \
109 mm2mils100(+Overall/2 - 0.55 + PinWidth/2), \
110 mm2mils100(-2.5 + pin * PinSpacing), \
111 mm2mils100(+Overall/2 + 0.30 - PinWidth/2), \
112 mm2mils100(PinWidth), \
114 mm2mils100(PinWidth + MaskAdd), \
115 '"pin%i"' % pin, '"%i"' % pin, '0x0100]'
118 mm2mils100(Overall/2 - 0.55 + PinWidth/2), \
119 mm2mils100(-2.5 + pin * PinSpacing), \
120 mm2mils100(Overall/2 + 0.30 - PinWidth/2), \
121 mm2mils100(-2.5 + pin * PinSpacing), \
122 mm2mils100(PinWidth), \
124 mm2mils100(PinWidth + MaskAdd), \
125 '"pin%i"' % (9-pin), '"%i"' % (9-pin), '0x0100]'
128 mm2mils100(-Overall/2 - 0.30 + PinWidth/2), \
129 mm2mils100(-2.5 + pin * PinSpacing), \
130 mm2mils100(-Overall/2 + 0.55 - PinWidth/2), \
131 mm2mils100(-2.5 + pin * PinSpacing), \
132 mm2mils100(PinWidth), \
134 mm2mils100(PinWidth + MaskAdd), \
135 '"pin%i"' % (12+pin), '"%i"' % (12+pin), '0x0100]'
137 print ' ElementArc[',\
140 '500 500 0 360 1000 ]'