be6995d36de6b433ced472c42cc29cbf154a3674
[hw/altusmetrum] / packages / ZX62-B-5PA.py
1 #!/usr/bin/python2
2 # Copyright 2011 by Bdale Garbee <bdale@gag.com>.  GPLv2
3 #
4 # Program to emit PCB footprint for
5 #   Hirose Micro USB B SMD R/A connector ZX62-B-5PA(11), DigiKey H11634CT-ND
6 #
7
8 # dimensions in mm from e24200011.pdf page 4
9 PinWidth = 0.4
10 PinHeight = 1.35
11 PinSpacing = 0.65
12
13 TabWidth = 2.1
14 TabHeight = 1.6
15 TabInner = 2.05
16
17 PadWidth = 1.9
18 PadHeight = 1.9
19 PadInner = 0.25
20 PadCenter = 3.35
21
22 WingWidth = 1.8
23 WingHeight = 1.9
24 WingInner = 3.1
25
26 # draw a box around the actual connector, and a line a the PCB edge
27 # connector is 7.9mm wide and 5.6mm deep overall, but wants to stick over
28 # the board edge due to flare around opening.  The flare should be only 0.6mm
29 # deep, but the recommendation is that the connector face be 1.3mm out...
30 BoxHeight = 6.1
31 BoxWidth = 7.9
32 EdgeHeight = 4.8
33 EdgeWidth = 2 * (WingInner + WingWidth)
34
35 # freedfm.com round-off error bites us if we make this 700...
36 MinAnnular = 725
37 MinClearance = 600
38 MaskDelta = 300
39
40 import sys
41
42 # we're going to use the 1/100 of a mil fundamental unit form
43 def mm2mils100( mm ):
44         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
45
46 print '# author: Bdale Garbee'
47 print '# email: bdale@gag.com'
48 print '# dist-license: GPL 2'
49 print '# use-license: unlimited'
50
51 print 'Element[0x0 "USBmicroB" "" "" 0 0 -10161 -12011 0 100 0x0]'
52 print "("
53 print '   Pad[', \
54         mm2mils100(0), \
55         mm2mils100(PinWidth/2), \
56         mm2mils100(0), \
57         mm2mils100(PinHeight - PinWidth/2), \
58         mm2mils100(PinWidth), \
59         (MinClearance*2), \
60         mm2mils100(PinWidth)+(MaskDelta*2), \
61         '"D+" "3" 0x0100]'
62
63 print '   Pad[', \
64         mm2mils100(-PinSpacing), \
65         mm2mils100(PinWidth/2), \
66         mm2mils100(-PinSpacing), \
67         mm2mils100(PinHeight - PinWidth/2), \
68         mm2mils100(PinWidth), \
69         (MinClearance*2), \
70         mm2mils100(PinWidth)+(MaskDelta*2), \
71         '"D-" "2" 0x0100]'
72
73 print '   Pad[', \
74         mm2mils100(PinSpacing), \
75         mm2mils100(PinWidth/2), \
76         mm2mils100(PinSpacing), \
77         mm2mils100(PinHeight - PinWidth/2), \
78         mm2mils100(PinWidth), \
79         (MinClearance*2), \
80         mm2mils100(PinWidth)+(MaskDelta*2), \
81         '"HS" "4" 0x0100]'
82
83 print '   Pad[', \
84         mm2mils100(-PinSpacing*2), \
85         mm2mils100(PinWidth/2), \
86         mm2mils100(-PinSpacing*2), \
87         mm2mils100(PinHeight - PinWidth/2), \
88         mm2mils100(PinWidth), \
89         (MinClearance*2), \
90         mm2mils100(PinWidth)+(MaskDelta*2), \
91         '"VBUS" "1" 0x0100]'
92
93 print '   Pad[', \
94         mm2mils100(PinSpacing*2), \
95         mm2mils100(PinWidth/2), \
96         mm2mils100(PinSpacing*2), \
97         mm2mils100(PinHeight - PinWidth/2), \
98         mm2mils100(PinWidth), \
99         (MinClearance*2), \
100         mm2mils100(PinWidth)+(MaskDelta*2), \
101         '"GND" "5" 0x0100]'
102
103 # the two ground / mounting tabs in line with signal pins
104
105 print '   Pad[', \
106         mm2mils100(TabInner + TabHeight/2), \
107         mm2mils100(TabHeight/2), \
108         mm2mils100(TabInner + TabWidth - TabHeight/2), \
109         mm2mils100(TabHeight/2), \
110         mm2mils100(TabHeight), \
111         (MinClearance*2), \
112         mm2mils100(TabHeight)+(MaskDelta*2), \
113         '"tab1" "G" 0x0100]'
114
115 print '   Pad[', \
116         mm2mils100(-TabInner - TabHeight/2), \
117         mm2mils100(TabHeight/2), \
118         mm2mils100(-TabInner - TabWidth + TabHeight/2), \
119         mm2mils100(TabHeight/2), \
120         mm2mils100(TabHeight), \
121         (MinClearance*2), \
122         mm2mils100(TabHeight)+(MaskDelta*2), \
123         '"tab2" "G" 0x0100]'
124
125 # the two ground / mounting tabs near the center of area
126
127 print '   Pad[', \
128         mm2mils100(PadInner + PadHeight/2), \
129         mm2mils100(PadCenter), \
130         mm2mils100(PadInner + PadWidth - PadHeight/2), \
131         mm2mils100(PadCenter), \
132         mm2mils100(PadHeight), \
133         (MinClearance*2), \
134         mm2mils100(PadHeight)+(MaskDelta*2), \
135         '"tab3" "G" 0x0100]'
136
137 print '   Pad[', \
138         mm2mils100(-PadInner - PadHeight/2), \
139         mm2mils100(PadCenter), \
140         mm2mils100(-PadInner - PadWidth + PadHeight/2), \
141         mm2mils100(PadCenter), \
142         mm2mils100(PadHeight), \
143         (MinClearance*2), \
144         mm2mils100(PadHeight)+(MaskDelta*2), \
145         '"tab4" "G" 0x0100]'
146
147 # the two "wing tab" ground / mounting pads on the sides
148
149 print '   Pad[', \
150         mm2mils100(WingInner + WingWidth/2), \
151         mm2mils100(PadCenter - WingHeight/2 + WingWidth/2), \
152         mm2mils100(WingInner + WingWidth/2), \
153         mm2mils100(PadCenter + WingHeight/2 - WingWidth/2), \
154         mm2mils100(WingWidth), \
155         (MinClearance*2), \
156         mm2mils100(WingWidth)+(MaskDelta*2), \
157         '"tab5" "G" 0x0100]'
158
159 print '   Pad[', \
160         mm2mils100(-WingInner - WingWidth/2), \
161         mm2mils100(PadCenter - WingHeight/2 + WingWidth/2), \
162         mm2mils100(-WingInner - WingWidth/2), \
163         mm2mils100(PadCenter + WingHeight/2 - WingWidth/2), \
164         mm2mils100(WingWidth), \
165         (MinClearance*2), \
166         mm2mils100(WingWidth)+(MaskDelta*2), \
167         '"tab6" "G" 0x0100]'
168
169 # box around actual connector size, with line at PCB edge
170 #
171 #print '   ElementLine[',\
172 #       mm2mils100(-BoxWidth/2), \
173 #       mm2mils100(0), \
174 #       mm2mils100(-BoxWidth/2), \
175 #       mm2mils100(BoxHeight), \
176 #       '1000 ]'
177 #
178 #print '   ElementLine[',\
179 #       mm2mils100(BoxWidth/2), \
180 #       mm2mils100(0), \
181 #       mm2mils100(BoxWidth/2), \
182 #       mm2mils100(BoxHeight), \
183 #       '1000 ]'
184 #
185 #print '   ElementLine[',\
186 #       mm2mils100(-BoxWidth/2), \
187 #       mm2mils100(0), \
188 #       mm2mils100(BoxWidth/2), \
189 #       mm2mils100(0), \
190 #       '1000 ]'
191 #
192 #print '   ElementLine[',\
193 #       mm2mils100(-BoxWidth/2), \
194 #       mm2mils100(BoxHeight), \
195 #       mm2mils100(BoxWidth/2), \
196 #       mm2mils100(BoxHeight), \
197 #       '1000 ]'
198 #
199 #print '   ElementLine[',\
200 #       mm2mils100(-EdgeWidth/2), \
201 #       mm2mils100(EdgeHeight), \
202 #       mm2mils100(-BoxWidth/2), \
203 #       mm2mils100(EdgeHeight), \
204 #       '1000 ]'
205 #
206 #print '   ElementLine[',\
207 #       mm2mils100(BoxWidth/2), \
208 #       mm2mils100(EdgeHeight), \
209 #       mm2mils100(EdgeWidth/2), \
210 #       mm2mils100(EdgeHeight), \
211 #       '1000 ]'
212 #
213 print ")"