071a3c0025b7262db9e90ec93856c6e4b9d1564c
[hw/altusmetrum] / packages / PDFN33.py
1 #!/usr/bin/python2
2 # Copyright 2022 by Bdale Garbee <bdale@gag.com>.  GPLv2
3 #
4 # Program to emit PCB footprint for Taiwan Semiconductor PDFN33 dual FETs
5 #
6
7 # dimensions in mm from TSM200N03D_B1710-1918822.pdf
8 PinWidth = 0.40
9 PinHeight = 0.60
10 PinSpacing = 0.65
11 RowOuter = 3.55
12
13 DrainWidth = 1.29
14 DrainHeight = 2.35
15 DrainSpacing = 0.25
16 DrainGap = 0.35
17
18 BodyWidth = 3.3
19 BodyHeight = 3.35
20
21 import sys
22
23 # we're going to use the 1/100 of a mil fundamental unit form
24 def mm2mils100( mm ):
25         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
26
27 print '# author: Bdale Garbee'
28 print '# email: bdale@gag.com'
29 print '# dist-license: GPL 2'
30 print '# use-license: unlimited'
31
32 print 'Element[0x0 "1212-8" "" "" 0 0 -10161 -12011 0 100 0x0]'
33 print "("
34 for pin in range (0,4):
35     print '   Pad[',\
36         mm2mils100((pin-1.5) * PinSpacing), \
37         mm2mils100(-(RowOuter/2 - PinWidth/2)), \
38         mm2mils100((pin-1.5) * PinSpacing), \
39         mm2mils100(-(RowOuter/2 - PinHeight + PinWidth/2)), \
40         mm2mils100(PinWidth), \
41         mm2mils100(PinSpacing - PinWidth), \
42         mm2mils100(PinWidth)+600, \
43         '"pin%i"' % (8 - pin), '"%i"' % (8 - pin), '0x0100]'
44
45     print '   Pad[',\
46         mm2mils100((pin-1.5) * PinSpacing), \
47         mm2mils100(RowOuter/2 - PinWidth/2), \
48         mm2mils100((pin-1.5) * PinSpacing), \
49         mm2mils100(RowOuter/2 - PinHeight + PinWidth/2), \
50         mm2mils100(PinWidth), \
51         mm2mils100(PinSpacing - PinWidth), \
52         mm2mils100(PinWidth)+600, \
53         '"pin%i"' % (1 + pin), '"%i"' % (1 + pin), '0x0100]'
54
55 print '   Pad[',\
56     mm2mils100(-(DrainSpacing/2 + DrainWidth/2)), \
57     mm2mils100(RowOuter/2 - PinHeight - DrainGap - DrainWidth/2), \
58     mm2mils100(-(DrainSpacing/2 + DrainWidth/2)), \
59     mm2mils100(RowOuter/2 - PinHeight - DrainGap - DrainHeight + DrainWidth/2), \
60     mm2mils100(DrainWidth), \
61     mm2mils100(DrainSpacing - DrainWidth), \
62     mm2mils100(DrainWidth)+600, \
63     '"pin8" "8" 0x0100]'
64
65 print '   Pad[',\
66     mm2mils100(DrainSpacing/2 + DrainWidth/2), \
67     mm2mils100(RowOuter/2 - PinHeight - DrainGap - DrainWidth/2), \
68     mm2mils100(DrainSpacing/2 + DrainWidth/2), \
69     mm2mils100(RowOuter/2 - PinHeight - DrainGap - DrainHeight + DrainWidth/2), \
70     mm2mils100(DrainWidth), \
71     mm2mils100(DrainSpacing - DrainWidth), \
72     mm2mils100(DrainWidth)+600, \
73     '"pin5" "5" 0x0100]'
74
75 print '   ElementLine[',\
76         mm2mils100(-BodyHeight/2), \
77         mm2mils100(-BodyWidth/2), \
78         mm2mils100(-BodyHeight/2), \
79         mm2mils100( BodyWidth/2), \
80         '1000 ]'
81
82 print '   ElementLine[',\
83         mm2mils100(-BodyHeight/2), \
84         mm2mils100( BodyWidth/2), \
85         mm2mils100( BodyHeight/2), \
86         mm2mils100( BodyWidth/2), \
87         '1000 ]'
88
89 print '   ElementLine[',\
90         mm2mils100( BodyHeight/2), \
91         mm2mils100( BodyWidth/2), \
92         mm2mils100( BodyHeight/2), \
93         mm2mils100(-BodyWidth/2), \
94         '1000 ]'
95
96 print '   ElementLine[',\
97         mm2mils100( BodyHeight/2), \
98         mm2mils100(-BodyWidth/2), \
99         mm2mils100(-BodyHeight/2), \
100         mm2mils100(-BodyWidth/2), \
101         '1000 ]'
102
103 print '   ElementArc[',\
104         mm2mils100(-2 * PinSpacing), \
105         mm2mils100(0.60 * RowOuter), \
106         '500 500 0 360 1000 ]'
107
108 print ")"