2 # Copyright 2014 by Bdale Garbee <bdale@gag.com>. GPLv2
4 # Program to emit PCB footprint for PowerPAD 32-pin package used by TPA3118
7 # dimensions in mm from the TI tpa3116d2.pdf datasheet
9 PinResist = 0.44 # width of gap in solder resist over pad
12 PinRow = 7.4 # center to center of pin rows
14 PadWidth = 11.0 # ground pad under part
17 MaskWidth = 4.36 # opening in solder mask for ground pad
20 ViaGrid = 1.3 # spacing between vias in ground pad
24 # we're going to use the 1/100 of a mil fundamental unit form
26 return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
28 print '# author: Bdale Garbee'
29 print '# email: bdale@gag.com'
30 print '# dist-license: GPL 2'
31 print '# use-license: unlimited'
33 print 'Element[0x0 "PowerPAD32" "" "" 0 0 0 0 0 100 0x0]'
36 # vias in the ground pad under the chip
37 for viarow in range (-2,2):
38 for viacol in range (-4,4):
40 mm2mils100(viacol * ViaGrid + ViaGrid/2), \
41 mm2mils100(viarow * ViaGrid + ViaGrid/2), \
46 '"pin33" "33" 0x0002]'
48 # break pad under chip into a grid to control the resist and paste masks
49 for viarow in range (-3, 4):
50 for viacol in range (-8, 9):
51 if (viacol in (-3, -2, -1, 0, 1, 2, 3)):
52 # copper sub-square without resist, with paste
54 mm2mils100(viacol * ViaGrid/2), \
55 mm2mils100(viarow * ViaGrid/2), \
56 mm2mils100(viacol * ViaGrid/2), \
57 mm2mils100(viarow * ViaGrid/2), \
58 mm2mils100(ViaGrid/2), \
60 mm2mils100(ViaGrid/2), \
61 '"pin33" "33" "square"]'
63 # copper sub-square with resist over vias
65 mm2mils100(viacol * ViaGrid/2), \
66 mm2mils100(viarow * ViaGrid/2), \
67 mm2mils100(viacol * ViaGrid/2), \
68 mm2mils100(viarow * ViaGrid/2), \
69 mm2mils100(ViaGrid/2), \
72 '"pin33" "33" "square,nopaste"]'
75 for pin in range (1,17):
77 mm2mils100((pin - 8.5) * PinSpacing), \
78 mm2mils100(PinRow/2 - PinHeight/2 + PinWidth/2), \
79 mm2mils100((pin - 8.5) * PinSpacing), \
80 mm2mils100(PinRow/2 + PinHeight/2 - PinWidth/2), \
81 mm2mils100(PinWidth), \
82 mm2mils100(PinSpacing - PinWidth), \
83 mm2mils100(PinResist), \
84 '"pin%i"' % (pin), '"%i"' % (pin), '"square"]'
87 mm2mils100((pin - 8.5) * PinSpacing), \
88 mm2mils100(-PinRow/2 + PinHeight/2 - PinWidth/2), \
89 mm2mils100((pin - 8.5) * PinSpacing), \
90 mm2mils100(-PinRow/2 - PinHeight/2 + PinWidth/2), \
91 mm2mils100(PinWidth), \
92 mm2mils100(PinSpacing - PinWidth), \
93 mm2mils100(PinResist), \
94 '"pin%i"' % (33-pin), '"%i"' % (33-pin), '"square"]'
97 # mm2mils100(-2.5 + pin * PinSpacing), \
98 # mm2mils100(+Overall/2 - PinHeight + PinWidth/2), \
99 # mm2mils100(-2.5 + pin * PinSpacing), \
100 # mm2mils100(+Overall/2 - PinWidth/2), \
101 # mm2mils100(PinWidth), \
102 # mm2mils100(PinSpacing - PinWidth), \
103 # mm2mils100(PinResist), \
104 # '"pin%i"' % pin, '"%i"' % pin, '0x0000]'
107 # mm2mils100(Overall/2 - PinHeight + PinWidth/2), \
108 # mm2mils100(-2.5 + pin * PinSpacing), \
109 # mm2mils100(Overall/2 - PinWidth/2), \
110 # mm2mils100(-2.5 + pin * PinSpacing), \
111 # mm2mils100(PinWidth), \
112 # mm2mils100(PinSpacing - PinWidth), \
113 # mm2mils100(PinResist), \
114 # '"pin%i"' % (19-pin), '"%i"' % (19-pin), '0x0000]'
117 # mm2mils100(-Overall/2 + PinWidth/2), \
118 # mm2mils100(-2.5 + pin * PinSpacing), \
119 # mm2mils100(-Overall/2 + PinHeight - PinWidth/2), \
120 # mm2mils100(-2.5 + pin * PinSpacing), \
121 # mm2mils100(PinWidth), \
122 # mm2mils100(PinSpacing - PinWidth), \
123 # mm2mils100(PinResist), \
124 # '"pin%i"' % (27+pin), '"%i"' % (27+pin), '0x0000]'
126 print ' ElementArc[',\
127 mm2mils100(-7.5 * PinSpacing), \
128 mm2mils100(PinRow/2 + PinHeight * 0.75), \
129 '500 500 0 360 1000 ]'