2 # Copyright 2022 by Bdale Garbee <bdale@gag.com>. GPLv3
4 # Program to emit PCB footprint for U-Blox NINA-W131 WIFI module
7 # dimensions in mm from:
8 # NINA_W13_Datasheet_UBX_17006694-2324218.pdf
10 BodyLength = 10.6 # (A)
11 BodyWidth = 10.0 # (B)
13 KerfTab = 0.10 # (G) depanelizing residual
15 OuterPitch = 1.00 # (H) lateral and antenna row pin pitch
16 OuterWidth = 0.70 # (I)
17 OuterHeight = 1.15 # (J)
18 OuterEdgeD = 0.45 # (D)
19 OuterEdgeE = 0.30 # (E)
20 InnerEdgeM = 1.45 # (M)
21 InnerEdgeK = 2.78 # (K)
22 InnerPitch = 1.1 # (Q)
23 GndPitch = 1.15 # (P) central area pin pitch
24 InnerSize = 0.70 # (O)
28 # we're going to use the 1/100 of a mil fundamental unit form
30 return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
32 print('# author: Bdale Garbee')
33 print('# email: bdale@gag.com')
34 print('# dist-license: GPL 3')
35 print('# use-license: unlimited')
37 print('Element[0x0 "NINA-W131" "" "" 0 0 11000 0 0 100 0x0]')
41 for pin in range (0,10):
43 mm2mils100(-BodyLength/2 + OuterEdgeD + OuterWidth/2 + pin*OuterPitch), \
44 mm2mils100(-BodyWidth/2 + OuterEdgeE + OuterWidth/2), \
45 mm2mils100(-BodyLength/2 + OuterEdgeD + OuterWidth/2 + pin*OuterPitch), \
46 mm2mils100(-BodyWidth/2 + OuterEdgeE + OuterHeight - OuterWidth/2), \
47 mm2mils100(OuterWidth), \
48 mm2mils100(OuterPitch - OuterWidth), \
49 mm2mils100(OuterWidth)+600, \
50 '"pin%i"' % (25 - pin), '"%i"' % (25 - pin), '"square"]')
53 mm2mils100(-BodyLength/2 + OuterEdgeD + OuterWidth/2 + pin*OuterPitch), \
54 mm2mils100(BodyWidth/2 - OuterEdgeE - OuterWidth/2), \
55 mm2mils100(-BodyLength/2 + OuterEdgeD + OuterWidth/2 + pin*OuterPitch), \
56 mm2mils100(BodyWidth/2 - OuterEdgeE - OuterHeight + OuterWidth/2), \
57 mm2mils100(OuterWidth), \
58 mm2mils100(OuterPitch - OuterWidth), \
59 mm2mils100(OuterWidth)+600, \
60 '"pin%i"' % (1 + pin), '"%i"' % (1 + pin), '"square"]')
63 for pin in range (0,5):
65 mm2mils100(-BodyLength/2 + OuterEdgeE + OuterWidth/2), \
66 mm2mils100((pin-2) * OuterPitch), \
67 mm2mils100(-BodyLength/2 + OuterEdgeE + OuterHeight - OuterWidth/2), \
68 mm2mils100((pin-2) * OuterPitch), \
69 mm2mils100(OuterWidth), \
70 mm2mils100(OuterPitch - OuterWidth), \
71 mm2mils100(OuterWidth)+600, \
72 '"pin%i"' % (26 + pin), '"%i"' % (26 + pin), '"square"]')
75 mm2mils100(BodyLength/2 - OuterEdgeE - OuterWidth/2), \
76 mm2mils100((pin-2) * OuterPitch), \
77 mm2mils100(BodyLength/2 - OuterEdgeE - OuterHeight + OuterWidth/2), \
78 mm2mils100((pin-2) * OuterPitch), \
79 mm2mils100(OuterWidth), \
80 mm2mils100(OuterPitch - OuterWidth), \
81 mm2mils100(OuterWidth)+600, \
82 '"pin%i"' % (15 - pin), '"%i"' % (15 - pin), '"square"]')
85 for pin in range (0,6):
87 mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeM + InnerSize/2), \
88 mm2mils100((pin-2.5) * InnerPitch), \
89 mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeM + InnerSize/2), \
90 mm2mils100((pin-2.5) * InnerPitch), \
91 mm2mils100(InnerSize), \
92 mm2mils100(InnerPitch - InnerSize), \
93 mm2mils100(InnerSize)+600, \
94 '"pin%i"' % (36 - pin), '"%i"' % (36 - pin), '"square"]')
97 for pin in range (0,2):
99 mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + InnerSize/2), \
100 mm2mils100((pin-0.5) * GndPitch), \
101 mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + InnerSize/2), \
102 mm2mils100((pin-0.5) * GndPitch), \
103 mm2mils100(InnerSize), \
104 mm2mils100(InnerPitch - InnerSize), \
105 mm2mils100(InnerSize)+600, \
106 '"pin37"', '"37"', '"square"]')
109 mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + GndPitch*2 + InnerSize/2), \
110 mm2mils100((pin-0.5) * GndPitch), \
111 mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + GndPitch*2 + InnerSize/2), \
112 mm2mils100((pin-0.5) * GndPitch), \
113 mm2mils100(InnerSize), \
114 mm2mils100(InnerPitch - InnerSize), \
115 mm2mils100(InnerSize)+600, \
116 '"pin37"', '"37"', '"square"]')
118 for pin in range (0,4):
120 mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + GndPitch + InnerSize/2), \
121 mm2mils100((pin-1.5) * GndPitch), \
122 mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + GndPitch + InnerSize/2), \
123 mm2mils100((pin-1.5) * GndPitch), \
124 mm2mils100(InnerSize), \
125 mm2mils100(InnerPitch - InnerSize), \
126 mm2mils100(InnerSize)+600, \
127 '"pin37"', '"37"', '"square"]')
130 mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + GndPitch*3 + InnerSize/2), \
131 mm2mils100((pin-1.5) * GndPitch), \
132 mm2mils100(-BodyLength/2 + OuterEdgeD + InnerEdgeK + GndPitch*3 + InnerSize/2), \
133 mm2mils100((pin-1.5) * GndPitch), \
134 mm2mils100(InnerSize), \
135 mm2mils100(InnerPitch - InnerSize), \
136 mm2mils100(InnerSize)+600, \
137 '"pin37"', '"37"', '"square"]')
139 print(' ElementLine[',\
140 mm2mils100(-BodyLength/2), \
141 mm2mils100(-BodyWidth/2), \
142 mm2mils100(-BodyLength/2), \
143 mm2mils100( BodyWidth/2), \
146 print(' ElementLine[',\
147 mm2mils100(-BodyLength/2), \
148 mm2mils100( BodyWidth/2), \
149 mm2mils100( BodyLength/2), \
150 mm2mils100( BodyWidth/2), \
153 print(' ElementLine[',\
154 mm2mils100( BodyLength/2), \
155 mm2mils100( BodyWidth/2), \
156 mm2mils100( BodyLength/2), \
157 mm2mils100(-BodyWidth/2), \
160 print(' ElementLine[',\
161 mm2mils100( BodyLength/2), \
162 mm2mils100(-BodyWidth/2), \
163 mm2mils100(-BodyLength/2), \
164 mm2mils100(-BodyWidth/2), \
167 # depanelization residuals
168 print(' ElementLine[',\
169 mm2mils100(-BodyLength/2-KerfTab), \
170 mm2mils100(-BodyWidth/2), \
171 mm2mils100(-BodyLength/2-KerfTab), \
172 mm2mils100(-BodyWidth/2+OuterHeight), \
175 print(' ElementLine[',\
176 mm2mils100(-BodyLength/2-KerfTab), \
177 mm2mils100(BodyWidth/2), \
178 mm2mils100(-BodyLength/2-KerfTab), \
179 mm2mils100(BodyWidth/2-OuterHeight), \
182 #print(' ElementArc[',\
183 # mm2mils100(-5 * PadSpacing), \
184 # mm2mils100(-5 * PadSpacing), \
185 # '500 500 0 360 1000 ]')