You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.7 KiB
Python

#!/usr/bin/python
import sys
import os
from KicadModTree import *
# Dimensions in mm
cols = 20
rows = 12
horizontal_pitch = 1.90
vertical_pitch = 1.35
through_hole_size = 0.39
top_pad = 0.80
# Kicad doesn't seem to support pad stacks yet
#bottom_pad = 0.71
horizontal_edge_keepout = 8.5
vertical_edge_keepout = (20.8 - 14.85) / 2
horizontal_keepout = 2*horizontal_edge_keepout + horizontal_pitch*(cols-1)
vertical_keepout = 2*vertical_edge_keepout + vertical_pitch*(rows-1)
npth_x = 8.5 - 4.75
npth_y = 20.8 - vertical_edge_keepout - 11.42
npth_drill = 3.56
footprint_name = "molex_impact_85ohm_left_and_right_guided_240pin_0.39mm"
# init kicad footprint
kicad_mod = Footprint(footprint_name)
kicad_mod.setDescription("Impact 85 Ohm Plus 4 Pair Vertical Header, Right Guided, Left Endwall, 10 Columns, 120 Circuits, Pin Length 4.90mm, Plated Through Hole Dimension 0.39mm, Lead Free")
#kicad_mod.setTags("example")
# set general values
kicad_mod.append(Text(type='reference', text='REF**', at=[horizontal_keepout/2.0, -(vertical_keepout+1)], layer='F.SilkS'))
kicad_mod.append(Text(type='value', text=footprint_name, at=[horizontal_keepout/2.0, -1.2], layer='F.Fab'))
# create silkscreen
kicad_mod.append(RectLine(start=[0, 0], end=[horizontal_keepout, -vertical_keepout], layer='F.SilkS'))
# create courtyard
kicad_mod.append(RectLine(start=[0, 0], end=[horizontal_keepout, -vertical_keepout], layer='F.CrtYd'))
for col in range(cols):
for row in range(rows):
x = horizontal_edge_keepout + col * horizontal_pitch
#y = vertical_edge_keepout + row * vertical_pitch
y = vertical_keepout - (vertical_edge_keepout + row * vertical_pitch)
shape = Pad.SHAPE_CIRCLE
if row == 0 and col == 0:
shape = Pad.SHAPE_RECT
pad_nr = 1 + col*rows + row
kicad_mod.append(Pad(number=pad_nr, type=Pad.TYPE_THT, shape=shape,
# Is this the right size?
# How to get different bottom and top pad sizes
at=[x, -y], size=[top_pad, top_pad], drill=through_hole_size, layers=Pad.LAYERS_THT))
# non plated through holes
kicad_mod.append(Pad(number="", type=Pad.TYPE_NPTH, shape=Pad.SHAPE_CIRCLE,
at=[npth_x, -npth_y], size=npth_drill, drill=npth_drill, layers=Pad.LAYERS_NPTH))
kicad_mod.append(Pad(number="", type=Pad.TYPE_NPTH, shape=Pad.SHAPE_CIRCLE,
at=[horizontal_keepout-npth_x, -npth_y], size=npth_drill, drill=npth_drill, layers=Pad.LAYERS_NPTH))
# add model
#kicad_mod.append(Model(filename="example.3dshapes/example_footprint.wrl",
#at=[0, 0, 0], scale=[1, 1, 1], rotate=[0, 0, 0]))
# output kicad model
file_handler = KicadFileHandler(kicad_mod)
file_handler.writeFile('molex.kicad_mod')