component
FTSH-107-01-L-DV-K-A
Public Made by Adomby adom
Samtec 1.27 mm pitch 2 x 7 SMT header (FTSH) with -K key and -A alignment pins. Footprint per Samtec's recommended PCB layout; 3D built from the Samtec print.
main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
#!/usr/bin/env python3
"""Footprint for Samtec FTSH-107-01-L-DV-K-A from Samtec's RECOMMENDED PCB LAYOUT FOR FTSH-1XX-XX-XXX-DV-XXX, Rev H
(8/27/2019, ECN-364793), sheet 1 Fig 1 + Table 1 (https://suddendocs.samtec.com/prints/ftsh-1xx-xx-xxx-dv-xxx-footprint.pdf).
Pads .029 [0.74] x .110 [2.79], pitch .050 [1.27], outer span .270 [6.86]; -A option: two "A" = .040 [1.02] holes
(NO OF POS - 2) x .050 [1.27] apart on the centreline (plating not stated; molded plastic pins -> NPTH).
Layout rotated 90 deg clockwise into KiCad's PinHeader_2x07 orientation (pin 1 top-left, odd contacts left).
usage: make_fp.py <out.kicad_mod>"""
import sys, uuid
N, P = 7, 1.27
PAD_W, PAD_L, SPAN = 0.74, 2.79, 6.86
PX = SPAN / 2 - PAD_L / 2 # 2.035
HOLE = 1.02
HOLE_Y = (N - 2) * P / 2 # 3.175
BODY_W, BODY_L = 3.43, N * P # connector outline from the layout / print
KEY = 5.08 # -K key, 5.08 x 5.08 plan (print sheet 2 Fig 2)
u = lambda: str(uuid.uuid4())
def line(x1, y1, x2, y2, layer, w):
return f'\t(fp_line\n\t\t(start {x1:g} {y1:g})\n\t\t(end {x2:g} {y2:g})\n\t\t(stroke (width {w:g}) (type solid))\n\t\t(layer "{layer}")\n\t\t(uuid "{u()}")\n\t)\n'
def rect(x1, y1, x2, y2, layer, w):
return f'\t(fp_rect\n\t\t(start {x1:g} {y1:g})\n\t\t(end {x2:g} {y2:g})\n\t\t(stroke (width {w:g}) (type solid))\n\t\t(fill no)\n\t\t(layer "{layer}")\n\t\t(uuid "{u()}")\n\t)\n'
def prop(name, val, x, y, layer, hide=False, size=1.0, th=0.15):
h = '\t\t(hide yes)\n' if hide else ''
return (f'\t(property "{name}" "{val}"\n\t\t(at {x:g} {y:g} 0)\n\t\t(layer "{layer}")\n{h}\t\t(uuid "{u()}")\n'
f'\t\t(effects\n\t\t\t(font (size {size:g} {size:g}) (thickness {th:g}))\n\t\t)\n\t)\n')
s = '(footprint "FTSH-107-01-L-DV-K-A"\n\t(version 20241229)\n\t(generator "adom")\n\t(generator_version "1.0")\n\t(layer "F.Cu")\n'
s += ('\t(descr "Samtec FTSH-107-01-L-DV-K-A, 2x07 1.27 mm SMT terminal strip with -K key and -A molded alignment pins; '
'land pattern per Samtec recommended PCB layout FTSH-1XX-XX-XXX-DV-XXX Rev H (pads 0.74 x 2.79, span 6.86, two 1.02 mm alignment holes)")\n')
s += '\t(tags "Samtec FTSH 1.27mm 2x07 SMT header alignment pin key")\n'
s += prop('Reference', 'REF**', 0, -5.9, 'F.SilkS')
s += prop('Value', 'FTSH-107-01-L-DV-K-A', 0, 5.9, 'F.Fab')
s += prop('Datasheet', 'https://suddendocs.samtec.com/prints/ftsh-1xx-xx-xxx-dv-xxx-xxx-mkt.pdf', 0, 0, 'F.Fab', hide=True, size=1.27, th=0.15)
s += prop('Description', 'Samtec FTSH-107-01-L-DV-K-A 1.27 mm 2x7 SMT header, -K key, -A alignment pins', 0, 0, 'F.Fab', hide=True, size=1.27, th=0.15)
s += '\t(attr smd)\n'
# F.Fab: body outline with pin-1 chamfer, key outline
bx, by = BODY_W / 2, BODY_L / 2
c = 0.6
fab = [(-bx + c, -by), (bx, -by), (bx, by), (-bx, by), (-bx, -by + c), (-bx + c, -by)]
for (x1, y1), (x2, y2) in zip(fab, fab[1:]):
s += line(x1, y1, x2, y2, 'F.Fab', 0.1)
s += rect(-KEY / 2, -KEY / 2, KEY / 2, KEY / 2, 'F.Fab', 0.1)
s += (f'\t(fp_text user "${{REFERENCE}}"\n\t\t(at 0 0 90)\n\t\t(layer "F.Fab")\n\t\t(uuid "{u()}")\n'
'\t\t(effects\n\t\t\t(font (size 0.8 0.8) (thickness 0.12))\n\t\t)\n\t)\n')
# F.SilkS: top and bottom body edges clear of the pads, pin-1 mark at pad 1
sy = by + 0.11
s += line(-1.2, -sy, 1.2, -sy, 'F.SilkS', 0.12)
s += line(-1.2, sy, 1.2, sy, 'F.SilkS', 0.12)
s += (f'\t(fp_poly\n\t\t(pts (xy {-SPAN/2 - 0.25:g} {-3.81:g}) (xy {-SPAN/2 - 0.75:g} {-3.81 - 0.35:g}) (xy {-SPAN/2 - 0.75:g} {-3.81 + 0.35:g}))\n'
f'\t\t(stroke (width 0.12) (type solid))\n\t\t(fill yes)\n\t\t(layer "F.SilkS")\n\t\t(uuid "{u()}")\n\t)\n')
# F.CrtYd: pads + body + key, 0.25 clearance, on a 0.01 grid
cx = SPAN / 2 + 0.25
cy = round(max(by, (N - 1) / 2 * P + PAD_W / 2) + 0.25 + 0.004, 2)
s += rect(-cx, -cy, cx, cy, 'F.CrtYd', 0.05)
# pads
for k in range(N):
y = -(N - 1) / 2 * P + k * P
for n, x in ((2 * k + 1, -PX), (2 * k + 2, PX)):
s += (f'\t(pad "{n}" smd rect\n\t\t(at {x:g} {y:g})\n\t\t(size {PAD_L:g} {PAD_W:g})\n'
f'\t\t(layers "F.Cu" "F.Mask" "F.Paste")\n\t\t(uuid "{u()}")\n\t)\n')
for y in (-HOLE_Y, HOLE_Y):
s += (f'\t(pad "" np_thru_hole circle\n\t\t(at 0 {y:g})\n\t\t(size {HOLE:g} {HOLE:g})\n\t\t(drill {HOLE:g})\n'
f'\t\t(layers "*.Cu" "*.Mask")\n\t\t(uuid "{u()}")\n\t)\n')
s += ('\t(model "${KIPRJMOD}/ftsh-107-01-l-dv-k-a.step"\n\t\t(offset\n\t\t\t(xyz 0 0 0)\n\t\t)\n\t\t(scale\n\t\t\t(xyz 1 1 1)\n'
'\t\t)\n\t\t(rotate\n\t\t\t(xyz 0 0 0)\n\t\t)\n\t)\n')
s += ')\n'
open(sys.argv[1], 'w').write(s)