Generate Lattice QFN48 footprint TODO add custom stencil shape
This commit is contained in:
parent
e65a76d408
commit
379c64f4bb
Binary file not shown.
|
@ -0,0 +1,135 @@
|
|||
(module Lattice_QFN-48UP (layer F.Cu) (tedit 5DE350A8)
|
||||
(fp_text reference REF** (at 0.0 0.0) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text user %R (at 0.0 0.0) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value %V (at 0 -0.5) (layer F.Fab) hide
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
|
||||
(fp_line (start -3.7 -3.0700000000000003) (end -3.0700000000000003 -3.7) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -3.7 3.7) (end -3.7 3.0700000000000003) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -3.0700000000000003 3.7) (end -3.7 3.7) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 3.0700000000000003 3.7) (end 3.7 3.7) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 3.7 3.7) (end 3.7 3.0700000000000003) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 3.7 -3.0700000000000003) (end 3.7 -3.7) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 3.7 -3.7) (end 3.0700000000000003 -3.7) (layer F.SilkS) (width 0.15))
|
||||
(fp_circle (center -3.7 -3.7) (end -3.7 -3.85) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -3.25 -3.55) (end -3.55 -3.25) (layer F.Fab) (width 0.15))
|
||||
(fp_line (start 3.55 -3.55) (end -3.25 -3.55) (layer F.Fab) (width 0.15))
|
||||
(fp_line (start 3.55 3.55) (end 3.55 -3.55) (layer F.Fab) (width 0.15))
|
||||
(fp_line (start -3.55 3.55) (end 3.55 3.55) (layer F.Fab) (width 0.15))
|
||||
(fp_line (start -3.55 -3.25) (end -3.55 3.55) (layer F.Fab) (width 0.15))
|
||||
(fp_line (start -3.8 -3.02) (end -3.8 -3.8) (layer F.CrtYd) (width 0.15))
|
||||
(fp_line (start -3.8 -3.8) (end 3.8 -3.8) (layer F.CrtYd) (width 0.15))
|
||||
(fp_line (start 3.8 -3.8) (end 3.8 -3.02) (layer F.CrtYd) (width 0.15))
|
||||
(fp_line (start 3.8 -3.02) (end 4.05 -3.02) (layer F.CrtYd) (width 0.15))
|
||||
(fp_line (start 4.05 -3.02) (end 4.05 3.02) (layer F.CrtYd) (width 0.15))
|
||||
(fp_line (start 4.05 3.02) (end 3.8 3.02) (layer F.CrtYd) (width 0.15))
|
||||
(fp_line (start 3.8 3.02) (end 3.8 3.8) (layer F.CrtYd) (width 0.15))
|
||||
(fp_line (start 3.8 3.8) (end -3.8 3.8) (layer F.CrtYd) (width 0.15))
|
||||
(fp_line (start -3.8 3.8) (end -3.8 3.02) (layer F.CrtYd) (width 0.15))
|
||||
(fp_line (start -3.8 3.02) (end -4.05 3.02) (layer F.CrtYd) (width 0.15))
|
||||
(fp_line (start -4.05 3.02) (end -4.05 -3.02) (layer F.CrtYd) (width 0.15))
|
||||
(fp_line (start -4.05 -3.02) (end -3.8 -3.02) (layer F.CrtYd) (width 0.15))
|
||||
(pad 1 smd roundrect (at -3.5 -2.75) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 2 smd roundrect (at -3.5 -2.25) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 3 smd roundrect (at -3.5 -1.75) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 4 smd roundrect (at -3.5 -1.25) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 5 smd roundrect (at -3.5 -0.75) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 6 smd roundrect (at -3.5 -0.25) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 7 smd roundrect (at -3.5 0.25) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 8 smd roundrect (at -3.5 0.75) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 9 smd roundrect (at -3.5 1.25) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 10 smd roundrect (at -3.5 1.75) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 11 smd roundrect (at -3.5 2.25) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 12 smd roundrect (at -3.5 2.75) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 13 smd roundrect (at -2.75 3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 14 smd roundrect (at -2.25 3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 15 smd roundrect (at -1.75 3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 16 smd roundrect (at -1.25 3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 17 smd roundrect (at -0.75 3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 18 smd roundrect (at -0.25 3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 19 smd roundrect (at 0.25 3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 20 smd roundrect (at 0.75 3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 21 smd roundrect (at 1.25 3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 22 smd roundrect (at 1.75 3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 23 smd roundrect (at 2.25 3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 24 smd roundrect (at 2.75 3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 25 smd roundrect (at 3.5 2.75) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 26 smd roundrect (at 3.5 2.25) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 27 smd roundrect (at 3.5 1.75) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 28 smd roundrect (at 3.5 1.25) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 29 smd roundrect (at 3.5 0.75) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 30 smd roundrect (at 3.5 0.25) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 31 smd roundrect (at 3.5 -0.25) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 32 smd roundrect (at 3.5 -0.75) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 33 smd roundrect (at 3.5 -1.25) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 34 smd roundrect (at 3.5 -1.75) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 35 smd roundrect (at 3.5 -2.25) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 36 smd roundrect (at 3.5 -2.75) (size 0.7999999999999998 0.24) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 37 smd roundrect (at 2.75 -3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 38 smd roundrect (at 2.25 -3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 39 smd roundrect (at 1.75 -3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 40 smd roundrect (at 1.25 -3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 41 smd roundrect (at 0.75 -3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 42 smd roundrect (at 0.25 -3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 43 smd roundrect (at -0.25 -3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 44 smd roundrect (at -0.75 -3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 45 smd roundrect (at -1.25 -3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 46 smd roundrect (at -1.75 -3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 47 smd roundrect (at -2.25 -3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 48 smd roundrect (at -2.75 -3.5) (size 0.24 0.7999999999999998) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.625) (solder_mask_margin 0.07))
|
||||
(pad 0 smd roundrect (at 0.0 0.0) (size 5.5 5.5) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio 0.02727272727272727) (solder_mask_margin 0.07))
|
||||
)
|
|
@ -1,4 +1,4 @@
|
|||
16918992665384721
|
||||
16920567844714721
|
||||
Battery
|
||||
BatteryHolder_Bulgin_BX0036_1xC
|
||||
Bulgin Battery Holder, BX0036, Battery Type C (https://www.bulgin.com/products/pub/media/bulgin/data/Battery_holders.pdf)
|
||||
|
@ -75208,6 +75208,13 @@ Infineon_PG-TDSON-8-33
|
|||
10
|
||||
8
|
||||
bldc-parts
|
||||
Lattice_QFN-48UP
|
||||
|
||||
|
||||
0
|
||||
49
|
||||
49
|
||||
bldc-parts
|
||||
Maxim_TQFN-28
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,304 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# QFN/QFP-style packages with ground plane
|
||||
# version 0.0.7
|
||||
|
||||
# added solder mask parameter
|
||||
# added optional indicator circle
|
||||
# added ground pad
|
||||
# made ground pad optional
|
||||
# fix silkscreen pin 1 marker
|
||||
# added rounded pads option
|
||||
# added reference designator to fab layer
|
||||
# make fab layer pin drawing optional
|
||||
# added TI's weird ground pad extensions
|
||||
# v0.0.5
|
||||
# added indicator marker to fab layer
|
||||
# v0.0.6
|
||||
# removed TI extensions
|
||||
# converted for use in QFN/QFP packages
|
||||
# - add pads for QFN/QFP
|
||||
# - add fab pad drawings for QFN/QFP
|
||||
# - fix silkscreen
|
||||
# v0.0.7
|
||||
# - add ground pad offset
|
||||
# - add rotation
|
||||
|
||||
PARTNAME = "Lattice_QFN-48UP"
|
||||
|
||||
total_pins = 48
|
||||
num_per_edge = total_pins // 4
|
||||
|
||||
M1 = 0.2 # silkscreen margin
|
||||
M2 = 0.05 # fab outline margin
|
||||
M3 = 0.3 # courtyard margin
|
||||
|
||||
Z = 7.0 + 0.80 # distance across outer edges of pads
|
||||
G = 7.0 - 0.80 # distance across inner edges of pads
|
||||
|
||||
X = (Z+G)/2. # distance between pad centers
|
||||
C = 0.5 # footprint pad spacing
|
||||
w = 0.24 # footprint pad width
|
||||
h = (Z-G)/2. # footprint pad length
|
||||
|
||||
show_fab_pads = False
|
||||
H = 7.0 # distance from physical pad end to opposite pad end
|
||||
e = C # physical pad spacing, same as above
|
||||
b = 0.24 # physical pad width
|
||||
L1 = -0.4 # physical pad length
|
||||
|
||||
D1 = 7.0 # package width
|
||||
E1 = 7.0 # package height
|
||||
|
||||
has_ground_pad = True
|
||||
G1 = 5.5 # ground pad width
|
||||
H1 = 5.5 # ground pad height
|
||||
I1 = 0.0 # ground pad x offset
|
||||
J1 = 0.0 # ground pad y offset
|
||||
ground_pad_num = 0
|
||||
|
||||
# NOTE: need to test with SMD footprints
|
||||
# need to make sure pad size adjustment works
|
||||
# nsmd = positive
|
||||
solder_mask_margin = 0.07
|
||||
indicator_circle_dia = 0.3
|
||||
|
||||
pad_radius = 0.15
|
||||
|
||||
rotation = 0
|
||||
|
||||
if solder_mask_margin < 0.0:
|
||||
w -= 2.0*solder_mask_margin
|
||||
h -= 2.0*solder_mask_margin
|
||||
G1 -= 2.0*solder_mask_margin
|
||||
H1 -= 2.0*solder_mask_margin
|
||||
|
||||
import math
|
||||
def _x(x, y):
|
||||
return x*math.cos(rotation*math.pi/180.) - y*math.sin(rotation*math.pi/180.)
|
||||
def _y(x, y):
|
||||
return x*math.sin(rotation*math.pi/180.) + y*math.cos(rotation*math.pi/180.)
|
||||
def xy(x, y):
|
||||
return (_x(x, y), _y(x, y))
|
||||
def xyxy(x1, y1, x2, y2):
|
||||
return (_x(x1, y1), _y(x1, y1), _x(x2, y2), _y(x2, y2))
|
||||
|
||||
if rotation == 90 or rotation == 270:
|
||||
h, w = w, h
|
||||
H1, G1 = G1, H1
|
||||
|
||||
import time
|
||||
gen_time = hex(int(time.time()))[2:].upper()
|
||||
|
||||
|
||||
prologue = """(module {} (layer F.Cu) (tedit {})
|
||||
(fp_text reference REF** (at 0.0 0.0) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text user %R (at 0.0 0.0) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value %V (at 0 -0.5) (layer F.Fab) hide
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
"""
|
||||
|
||||
prologue = prologue.format(PARTNAME, gen_time, PARTNAME)
|
||||
epilogue = """)"""
|
||||
|
||||
print(prologue)
|
||||
|
||||
# print silkscreen outline
|
||||
inner_edge = C*(num_per_edge/2 - 0.5) + w/2 + M1
|
||||
x = D1/2 + M1
|
||||
y = E1/2 + M1
|
||||
for x, y, nx, ny in [
|
||||
(-x, -inner_edge, -inner_edge, -y),
|
||||
|
||||
(-x, y, -x, inner_edge), (-inner_edge, y, -x, y),
|
||||
(inner_edge, y, x, y), (x, y, x, inner_edge),
|
||||
(x, -inner_edge, x, -y), (x, -y, inner_edge, -y)]:
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.SilkS) (width 0.15))""".
|
||||
format(*xyxy(x, y, nx, ny)))
|
||||
|
||||
if indicator_circle_dia is not None:
|
||||
x = D1/2 + M1 #+ 0.5*indicator_circle_dia
|
||||
y = E1/2 + M1 #+ 0.5*indicator_circle_dia
|
||||
# add indicator circle
|
||||
print(""" (fp_circle (center {} {}) (end {} {}) (layer F.SilkS) (width 0.15))""".
|
||||
format(*xyxy(-x, -y, -x, -y - indicator_circle_dia/2.0)))
|
||||
|
||||
|
||||
# draw package outline in fab layer
|
||||
FC = 0.3
|
||||
fab_points = [(-D1/2 - M2 + FC, -E1/2 - M2),
|
||||
(D1/2 + M2, -E1/2 - M2),
|
||||
(D1/2 + M2, E1/2 + M2),
|
||||
(-D1/2 + -M2, E1/2 + M2),
|
||||
(-D1/2 + -M2, -E1/2 - M2 + FC)]
|
||||
|
||||
nx, ny = fab_points[-1]
|
||||
for x, y in fab_points:
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.Fab) (width 0.15))""".
|
||||
format(*xyxy(x, y, nx, ny)))
|
||||
nx, ny = x, y
|
||||
|
||||
if show_fab_pads:
|
||||
for i in range(num_per_edge):
|
||||
x_pos = -D1/2 - M2
|
||||
y_pos = C*(i-(num_per_edge/2-0.5))
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.Fab) (width 0.15))""".
|
||||
format(*xyxy(x_pos, y_pos - b/2 - M2, x_pos - L1, y_pos - b/2 - M2)))
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.Fab) (width 0.15))""".
|
||||
format(*xyxy(x_pos - L1, y_pos - b/2 - M2, x_pos - L1, y_pos + b/2 + M2)))
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.Fab) (width 0.15))""".
|
||||
format(*xyxy(x_pos - L1, y_pos + b/2 + M2, x_pos, y_pos + b/2 + M2)))
|
||||
|
||||
for i in range(num_per_edge):
|
||||
x_pos = C*(i-(num_per_edge/2-0.5))
|
||||
y_pos = E1/2 + M2
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.Fab) (width 0.15))""".
|
||||
format(*xyxy(x_pos - b/2 - M2, y_pos, x_pos - b/2 - M2, y_pos + L1)))
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.Fab) (width 0.15))""".
|
||||
format(*xyxy(x_pos - b/2 - M2, y_pos + L1, x_pos + b/2 + M2, y_pos + L1)))
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.Fab) (width 0.15))""".
|
||||
format(*xyxy(x_pos + b/2 + M2, y_pos + L1, x_pos + b/2 + M2, y_pos)))
|
||||
|
||||
for i in range(num_per_edge):
|
||||
x_pos = D1/2 + M2
|
||||
y_pos = -C*(i-(num_per_edge/2-0.5))
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.Fab) (width 0.15))""".
|
||||
format(*xyxy(x_pos, y_pos + b/2 + M2, x_pos + L1, y_pos + b/2 + M2)))
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.Fab) (width 0.15))""".
|
||||
format(*xyxy(x_pos + L1, y_pos + b/2 + M2, x_pos + L1, y_pos - b/2 - M2)))
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.Fab) (width 0.15))""".
|
||||
format(*xyxy(x_pos + L1, y_pos - b/2 - M2, x_pos, y_pos - b/2 - M2)))
|
||||
|
||||
for i in range(num_per_edge):
|
||||
x_pos = -C*(i-(num_per_edge/2-0.5))
|
||||
y_pos = -E1/2 - M2
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.Fab) (width 0.15))""".
|
||||
format(*xyxy(x_pos + b/2 + M2, y_pos, x_pos + b/2 + M2, y_pos - L1)))
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.Fab) (width 0.15))""".
|
||||
format(*xyxy(x_pos + b/2 + M2, y_pos - L1, x_pos - b/2 - M2, y_pos - L1)))
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.Fab) (width 0.15))""".
|
||||
format(*xyxy(x_pos - b/2 - M2, y_pos - L1, x_pos - b/2 - M2, y_pos)))
|
||||
|
||||
|
||||
# print courtyard outline
|
||||
inner_x = D1/2 + M3
|
||||
outer_x = X/2 + h/2 + M3/2
|
||||
inner_y = C*(num_per_edge/2-0.5) + b/2 + M3/2
|
||||
outer_y = E1/2 + M3
|
||||
pts = [
|
||||
(-inner_x, -outer_y),
|
||||
(inner_x, -outer_y),
|
||||
(inner_x, -inner_y),
|
||||
(outer_x, -inner_y),
|
||||
(outer_x, inner_y),
|
||||
(inner_x, inner_y),
|
||||
(inner_x, outer_y),
|
||||
(-inner_x, outer_y),
|
||||
(-inner_x, inner_y),
|
||||
(-outer_x, inner_y),
|
||||
(-outer_x, -inner_y),
|
||||
(-inner_x, -inner_y)
|
||||
]
|
||||
nx, ny = pts[-1]
|
||||
for px, py in pts:
|
||||
x, y, nx, ny = nx, ny, px, py
|
||||
print(""" (fp_line (start {} {}) (end {} {}) (layer F.CrtYd) (width 0.15))""".
|
||||
format(*xyxy(x, y, nx, ny)))
|
||||
|
||||
|
||||
padtype = "rect"
|
||||
padext = ""
|
||||
if pad_radius is not None:
|
||||
padtype = "roundrect"
|
||||
padext = "(roundrect_rratio {})".format(pad_radius/min(h, w))
|
||||
|
||||
for i in range(0, num_per_edge):
|
||||
tx, ty = xy(-X/2, C*(i-(num_per_edge/2-0.5)))
|
||||
print(""" (pad {} smd {} (at {} {}) (size {} {}) (layers F.Cu F.Paste F.Mask)
|
||||
{} (solder_mask_margin {}))""".
|
||||
format(
|
||||
i+1,
|
||||
padtype,
|
||||
tx,
|
||||
ty,
|
||||
h,
|
||||
w,
|
||||
padext,
|
||||
solder_mask_margin))
|
||||
|
||||
for i in range(0, num_per_edge):
|
||||
tx, ty = xy(C*(i-(num_per_edge/2-0.5)), X/2)
|
||||
print(""" (pad {} smd {} (at {} {}) (size {} {}) (layers F.Cu F.Paste F.Mask)
|
||||
{} (solder_mask_margin {}))""".
|
||||
format(
|
||||
i+1+1*num_per_edge,
|
||||
padtype,
|
||||
tx,
|
||||
ty,
|
||||
w,
|
||||
h,
|
||||
padext,
|
||||
solder_mask_margin))
|
||||
|
||||
for i in range(0, num_per_edge):
|
||||
tx, ty = xy(X/2, -C*(i-(num_per_edge/2-0.5)))
|
||||
print(""" (pad {} smd {} (at {} {}) (size {} {}) (layers F.Cu F.Paste F.Mask)
|
||||
{} (solder_mask_margin {}))""".
|
||||
format(
|
||||
i+1+2*num_per_edge,
|
||||
padtype,
|
||||
tx,
|
||||
ty,
|
||||
h,
|
||||
w,
|
||||
padext,
|
||||
solder_mask_margin))
|
||||
|
||||
for i in range(0, num_per_edge):
|
||||
tx, ty = xy(-C*(i-(num_per_edge/2-0.5)), -X/2)
|
||||
print(""" (pad {} smd {} (at {} {}) (size {} {}) (layers F.Cu F.Paste F.Mask)
|
||||
{} (solder_mask_margin {}))""".
|
||||
format(
|
||||
i+1+3*num_per_edge,
|
||||
padtype,
|
||||
tx,
|
||||
ty,
|
||||
w,
|
||||
h,
|
||||
padext,
|
||||
solder_mask_margin))
|
||||
|
||||
|
||||
if has_ground_pad:
|
||||
tx, ty = xy(I1, J1)
|
||||
if pad_radius is None:
|
||||
# add ground pad
|
||||
print(""" (pad {} smd {} (at {} {}) (size {} {}) (layers F.Cu F.Paste F.Mask)
|
||||
(solder_mask_margin {}))""".
|
||||
format(
|
||||
ground_pad_num,
|
||||
"rect",
|
||||
tx,
|
||||
ty,
|
||||
G1,
|
||||
H1,
|
||||
solder_mask_margin))
|
||||
else:
|
||||
print(""" (pad {} smd {} (at {} {}) (size {} {}) (layers F.Cu F.Paste F.Mask)
|
||||
(roundrect_rratio {}) (solder_mask_margin {}))""".
|
||||
format(
|
||||
ground_pad_num,
|
||||
"roundrect",
|
||||
tx,
|
||||
ty,
|
||||
G1,
|
||||
H1,
|
||||
pad_radius/min(G1, H1),
|
||||
solder_mask_margin))
|
||||
|
||||
print(epilogue)
|
Loading…
Reference in New Issue