41af8d083f609052cba124b5ad23f4245fca55ac
[hw/altusmetrum] / packages / ZX62-B-5PA.py
1 #!/usr/bin/python3
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 3')
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 print(")")