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
75 lines
2.7 KiB
Python
4 years ago
|
#!/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')
|