pads.py


1
#!/usr/bin/python
2
import math
3
4
#Parameter zum einstellen:
5
6
#Pad-Masse
7
pad_length = '1.2mm'
8
pad_width = '0.3mm'
9
10
#Pads pro Seite
11
pads_per_side = 44
12
13
#Abstand der gegenueberliegenden Pad-Reihen (Mitte der Pads)
14
pad_row_distance = 26.7 - 1.2
15
16
#Abstand zwischen den mitten der aeusseren Pads einer Seite
17
pads_side_length = 21.8 - 0.3
18
19
#Siehe Eagle-Doku zu 'SMD'
20
pad_roundness = '0'
21
22
# 4 fuer TQFP etc, 2 fuer SO
23
sides = 4 # oder 2
24
25
26
#finger weg_
27
_pad_counter = 1
28
29
def smd(pos, orientation, name):
30
    return "SMD %s %s -%s R%f '%s' (%fmm %fmm)" % (pad_length, pad_width, pad_roundness, orientation, name, pos[0], pos[1])
31
32
def rad2deg(a):
33
    return 180.0 * a / math.pi
34
35
def pad_name(i):
36
    return '%d' % i
37
38
def pad_line(start, end, num):
39
    global _pad_counter
40
    res = list()
41
    x_delta = end[0] - start[0]
42
    y_delta = end[1] - start[1]
43
    angle = rad2deg(math.atan2(y_delta, x_delta)) + 90.0
44
    for i in range(num):
45
        x = start[0] + (end[0] - start[0]) * float(i) / float(num -1 )
46
        y = start[1] + (end[1] - start[1]) * float(i) / float(num -1 )
47
        res.append(smd((x,y), angle, pad_name(_pad_counter)))
48
        _pad_counter += 1
49
    return res
50
51
def create_footprint():
52
    res = []
53
    if sides == 4:
54
        left = ((-pad_row_distance / 2.0, pads_side_length / 2.0), (-pad_row_distance / 2.0, -pads_side_length / 2.0))
55
        bot =  ((-pads_side_length / 2.0, -pad_row_distance / 2.0), (+pads_side_length / 2.0, -pad_row_distance / 2.0))
56
        right =((pad_row_distance / 2.0, -pads_side_length / 2.0), (pad_row_distance / 2.0, pads_side_length / 2.0))
57
        top =  ((pads_side_length / 2.0, pad_row_distance / 2.0), (-pads_side_length / 2.0, pad_row_distance / 2.0))
58
        res.extend(pad_line(left[0], left[1], pads_per_side))
59
        res.extend(pad_line(bot[0], bot[1], pads_per_side))
60
        res.extend(pad_line(right[0], right[1], pads_per_side))
61
        res.extend(pad_line(top[0], top[1], pads_per_side))
62
    elif sides == 2:
63
        left = ((-pad_row_distance / 2.0, pads_side_length / 2.0), (-pad_row_distance / 2.0, -pads_side_length / 2.0))
64
        right =((pad_row_distance / 2.0, -pads_side_length / 2.0), (pad_row_distance / 2.0, pads_side_length / 2.0))
65
        res.extend(pad_line(left[0], left[1], pads_per_side))
66
        res.extend(pad_line(right[0], right[1], pads_per_side))
67
    return '\n'.join(res)
68
69
70
if __name__ == '__main__':
71
    print create_footprint()