def write_kicad(self, fpname, mirror=""): f = footgen.Footgen(fpname) g = f.generator g.mirror = mirror for object in self.objects: g.options = "masked" g.drill = 0 self.objects[object].generate_kicad(g) f.finish()
def pciecard(npins, name): f = footgen.Footgen(name) g = f.generator g.mask_clearance = 0.0 # mm g.clearance = 0.0 # mm x = 45.65 # mm y = -3.5 # mm for i in range(1,1+npins/2): f.add_pad(name = "B"+str(i), x = x, y = y, xsize = 0.7, # mm ysize = 4.2, # mm paste = False) f.add_pad(name = "A"+str(i), x = x, y = y, xsize = 0.7, # mm ysize = 4.2, # mm paste = False, bottom = True) if i == 11: x += 3.0 # mm, key else: x += 1.0 # mm g.silk_line(0.0, -4.5, 15.0, -4.5) g.silk_line(15.0, -4.5, 15.0, -12.75) g.silk_line(15.0, -12.75, 33.35, -12.75) g.silk_line(33.35, -12.75, 33.35, -4.5) g.silk_line(33.35, -4.5, 41.35, -4.5) # pci block lower edge g.silk_line(41.35, -4.5, 41.35, -10.925) g.silk_arc(43.175, -10.925, 41.35, -10.925, 180) g.silk_line(45.0, -10.925, 45.0, -0.7) g.silk_line(45.7, 0, 45.0, -0.7) # diagonal at 1 g.silk_line(45.7, 0, 56.2 - 0.7, 0) # lower edge contacts 1 - 11 g.silk_line(56.2 - 0.7, 0, 56.2, -0.7) # diagonal at 11 g.silk_line(56.2, -0.7, 56.2, -8.0) g.silk_arc(57.15, -8.0, 56.2, -8.0, 180) g.silk_line(58.1, -8.0, 58.1, -0.7) g.silk_line(58.1 + 0.7, 0, 58.1, -0.7) # diagonal at 12 cardedge_endx = 65.3 + 0.5*(npins-36) g.silk_line(58.1 + 0.7, 0.0, cardedge_endx - 0.7, 0.0) # lower edge 2nd contacts g.silk_line(cardedge_endx -0.7, 0.0, cardedge_endx, -0.7) g.silk_line(cardedge_endx, -0.7, cardedge_endx, -13.0) output_file = open(name + ".kicad_mod", "w") output_file.write(g.finish()) output_file.close()
def pciecard(npins, name): f = footgen.Footgen(name) g = f.generator g.mask_clearance = 0.0 # mm g.clearance = 0.0 # mm x = -11.65 # mm for i in range(1, 1 + npins / 2): odd = (i & 1) != 0 y = 1.25 if odd else 3.25 f.add_pad(name="B" + str(i), x=x, y=y, diameter=1.1, shape="circle", drill=0.7) f.add_pad(name="A" + str(i), x=x, y=-y, diameter=1.1, shape="circle", drill=0.7) if i == 11: x += 3.0 # mm, key else: x += 1.0 # mm for x in [0, 9.15 + (npins - 36) * 0.5]: f.add_pad(name="x", x=x, y=0, diameter=2.35, shape="circle", plated=False, masked=True, drill=2.35) for x in [-14.5, -14.5 + 7 + 0.5 * npins]: g.silk_line(x, -3.7, x, 5.1) output_file = open(name + ".kicad_mod", "w") output_file.write(g.finish()) output_file.close()
#!/usr/bin/python import footgen f = footgen.Footgen("r_th") f.sip(pitch=20.0, drill=0.8, pins=2, diameter=1.2, pin1shape="circle", draw_silk=False) f.silkbox(w=2.0, h=16.0, notch=None, silkwidth=0.155) f.finish() f = footgen.Footgen("c_elec") f.sip(pitch=5.0, drill=1.0, pins=2, diameter=1.6, pin1shape="square", draw_silk=False) f.generator.silk_circle(0, 0, 10.0 / 2) f.finish()
#!/usr/bin/python # R. Miloh Alexander # Use: unrestricted with attribution # This set of footgen stanzas creates footprints for WS2812 and WS2812B, # as well as a couple genericized 'plcc4' and 'plcc6' 4 and 6 pad 5mmx5mm parts # # this small family of parts is probably incorrectly termed as 'plcc' # since 'plastic leaded chip carrier' smt parts are typically leaded on four # sides, but for some reason the plcc4/plcc6 terminology stuck for use with # the popular worldsemi WS2812 and WS2812B rgb led parts. # units in mm import footgen f = footgen.Footgen("WS2812B-PLCC4") f.generator.clearance = 0.204 f.generator.mask_clearance = 0.080 f.pins = 4 f.pitch = 3.3 f.height = 3.4 f.width = 2.4 f.silkwidth = 0.254 f.padheight = 0.9 f.padwidth = 1.5 f.pinswide = 1.5 ## rowofpads(self, pos, whichway, startnum, numpads) f.rowofpads([-f.height / 2 - f.padwidth / 2, 0], "down", 1, 2) f.rowofpads([f.height / 2 + f.padwidth / 2, 0], "up", 3, 2) ## silk component outlines # silk_crop(self,w,h,pin1,croplength=0.25,silkwidth=0.155,rotate=0) # note. need pinswide & better docs on what it is doing
#!/usr/bin/python import footgen for n in range(2, 11): f = footgen.Footgen('DF3_{}'.format(n)) f.sip(pitch=2.0, drill=0.85, diameter=1.5, pins=n, draw_silk=False) silky = 1.0 + n f.box_corners(1.0, silky, -4.0, -silky) f.finish()
#!/usr/bin/python # R. Miloh Alexander # Use: unrestricted with attribution # Implements pcb mount camera sockets from molex # standard mobile imaging architecture (SMIA) compliant # camera sockets # these sockets typically come in on-board and through-board designs # http://www.molex.com/molex/products/family?key=camera_sockets&channel=products&chanName=family&pageTitle=Introduction import footgen basename = "Molex-105028-{0}" # work in progress f = footgen.Footgen(basename.format("1001")) f.pins = 32 f.pinshigh = f.pins/4 f.pinswide = f.pinshigh f.generator.clearance = 0.3048 f.generator.mask_clearance = 0.080 f.pitch = 0.90 f.width = 7.78 f.height = f.width f.padheight = 0.50 f.padwidth = 9.46-7.78 ## 8 rows of pads to create ## rowofpads(self, pos, whichway, startnum, numpads) ## pos is the center position [x,y] ## whichway is up down left or right ## inner ring of pads f.sm_pads()
import footgen format = "geda" # implements board headers for JST PH type crimping wire to board header connects # following values are from datasheet ePH.pdf available at # http://www.jst-mfg.com/product/pdf/eng/ePH.pdf # JST SMT PH Top Entry Headers PH_basename = "JST-{0}{1}B-PH-SM4-TB" PH_EntryType = {'Top':'B','Side':'S'} PH_pins = [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] PH_dimA = [2.0,4.0,6.0,8.0,10.0,12.0,14.0,16.0,18.0,20.0,22.0,24.0,26.0,28.0,30.0] PH_dimB = [7.95,9.95,11.95,13.95,15.95,17.95,19.95,21.95,23.95,25.95,27.95,29.95,31.95,33.95,35.95] for i in range(len(PH_pins)): f = footgen.Footgen(PH_basename.format(PH_EntryType['Top'],PH_pins[i]),output_format=format) f.pins = PH_pins[i] f.height = PH_dimA[i] f.generator.clearance = 0.3048 f.generator.mask_clearance = 0.080 f.pitch = 2.00 f.width = 7.5 # f.padheight = 1.0 f.padwidth = 1.0 f.padheight = 5.5 # f.padwidth = 5.5 mntpadwidth = 3.0 # increase this value for improved mechanical strength mntpadheight = 1.6 # change this as well mntpad_x_offset = 1.6 mntpad_y_offset = 3.25 #1.0 # silk box must be made in segments since the pads extend past the bounds
#!/usr/bin/python import footgen # 1 mm BGAs bga_names = ["F169", "FT256", "FBG484", "FBG676"] bga_columns = [13, 16, 22, 26] for i in range(len(bga_names)): f = footgen.Footgen(bga_names[i]) f.bga(rows=bga_columns[i], pitch=1.0, diameter=0.45) f.silkbox(w=bga_columns[i] + 1.0, notch=0.75) f.finish() # 1 mm BGA with some balls omitted f = footgen.Footgen("FF665") f.bga(rows=26, pitch=1.0, diameter=0.45, omit="A1,B1,G1,H1,N1,P1,W1,Y1,AE1,AF1,J9") f.silkbox(w=27, notch=0.75) f.finish() # 0.8 mm BGAs bga_names = ["CLG225", "CLG400"] bga_columns = [15, 20] bga_sizes = [13, 17] for i in range(len(bga_names)): f = footgen.Footgen(bga_names[i]) f.bga(rows=bga_columns[i], pitch=0.8, diameter=0.4) f.silkbox(w=bga_sizes[i], notch=0.75) f.finish()
#!/usr/bin/env python2 import footgen f = footgen.Footgen("EQFP144", output_format="geda") f.pitch = 0.5 f.pins = 144 f.width = 20 f.padheight = 0.27 f.padwidth = 2.0 f.qfn() f.silk_crop(20, pin1="circle") f.add_pad("GND", 0, 0, 5.4, 5.4) f.finish() f = footgen.Footgen("PQFP100", output_format="geda") f.pitch = 0.635 f.pins = 100 f.width = 19.05 f.padheight = 0.40 f.padwidth = 2.0 f.qfn() f.silk_crop(19.05, pin1="circle") f.finish() f = footgen.Footgen("PSOP48", output_format="geda") f.pins = 48 f.pitch = 0.5 f.width = 6.0 f.padheight = 0.3 f.padwidth = 2
#!/usr/bin/python import footgen f = footgen.Footgen("RT-01T-1.0B") f.pitch = 1.08 f.pins = 1 f.generator.clearance = 0.3048 f.generator.mask_clearance = 0.080 f.generator.diameter = 1.1 f.silkbox(1.5, circle=2.0, nosides=True) f.finish f = footgen.Footgen("RT-01T-1.3B") f.pitch = 1.38 f.pins = 1 f.generator.clearance = 0.3048 f.generator.mask_clearance = 0.080 f.generator.diameter = 1.4 f.silkbox(1.5, circle=2.0, nosides=True) f.generator._add_pin(0, 0, "", "") f.finish f = footgen.Footgen("RT-01T-1.08") f.pitch = 2.54 f.drill = 1.0 f.diameter = 1.6 f.pins = 1 f.width = 2.54 f.dih() f.finish()
# Molex SDA-74099 family of SMT 0.1" pitch pcb headers # implements SMT vertical (top) entry type only!!! # following values are from datasheet "740990604_sd.pdf # all units mm molex_74099_basename = "Molex-74099-06{0}" molex_74099_pins = [3,4,5,6,7,8,9,10,11,12,22] # more pins in the complete sheet molex_74099_dimA = [8.13,10.67,13.21,15.75,18.29,20.83,23.37,25.91,28.45,30.99,56.39] molex_74099_dimB = [5.08,7.62,10.16,12.70,15.24,17.78,20.32,22.86,25.40,27.94,53.34] molex_74099_dimC = [0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.18] contact_finish = {'tin 2.54nm':0, 'gold, 0.38um':20, 'gold, 0.76mm':40} #tin = [molex_74099_pins] #38um_gold = [molex_74099_pins+20] #76um_gold = [molex_74099_pins+40] for i in range(len(molex_74099_pins)): f = footgen.Footgen(molex_74099_basename.format(str(molex_74099_pins[i]).zfill(2))) f.pins = molex_74099_pins[i] f.height = molex_74099_dimA[i] f.generator.clearance = 0.3048 f.generator.mask_clearance = 0.080 f.pitch = 2.54 f.width = 6.60 rowlen = molex_74099_dimB[i] inner_width = 5.08 notch_width = 1.52 f.padheight = 1.27 f.padwidth = 3.18 f.silk_line(f.height/2,inner_width/2,rowlen/2,inner_width/2) f.silk_line(-f.height/2,inner_width/2,-f.height/2+0.5,inner_width/2) f.silk_line(f.height/2,inner_width/2,f.height/2,-inner_width/2) f.silk_line(f.height/2,-inner_width/2,f.height/2-0.5,-inner_width/2 )
#!/usr/bin/python import footgen mm = 1 for n in range(2,10): f = footgen.Footgen('DF13_SM_{}'.format(n)) x0 = 1.25*mm * 0.5 * (n-1) for i in range(n): f.add_pad(name = i+1, x = x0 + i*-1.25*mm, y = 2.4-0.9, xsize = 0.7*mm, ysize = 1.8*mm, shape = 'rect') for i in [-1,1]: f.add_pad(name = 'GND', x = 0.5*(3.45 + n*1.25)*i, y = -2.4 + 1.1, xsize = 1.6*mm, ysize = 2.2*mm, shape = 'rect') x = 0.5*(3.15*mm + 1.25*mm*n) y = -3 f.silk_line(-x, y, x, y, width = 0.15*mm) f.finish() for n in [10]: f = footgen.Footgen('DF13_DR_SM_{}'.format(n)) f.generator.mirror = 'x' f.soh(pitch = 1.25, width = 4.3, padwidth = 1.7, padheight = 0.7, pins = 10)
# R. Miloh Alexander # Use: unrestricted with attribution import footgen # implements SMT side entry type only!!! through hole components still needed to be added # following values are from datasheet # XH_basename = "JST-XHP-" XH_pins = [1,2,2,3,4,5,6,6,7,8,9,10,11,12,13,14,15,16,20] XH_special = ["","","(10.0)-U","","","","","(5.0)-U","","","","","","","","","","",""] XH_dimA = [None,2.5,10.0,5.0,7.5,10.0,12.5,25.0,15.0,17.5,20.0,22.5,25.0,27.5,30.0,32.5,35.0,37.5,47.5] XH_dimB = [3.2,5.7,13.2,8.2,10.7,13.2,15.7,28.2,18.2,20.7,23.2,25.7,28.2,30.7,33.2,35.7,38.2,40.7,50.7] XH_dimC = [4.8,7.3,14.8,9.8,12.3,14.8,17.3,29.8,19.8,22.3,24.8,27.3,29.8,32.3,34.8,37.3,39.8,42.3,52.3] for i in range(len(XH_pins)): f = footgen.Footgen(XH_basename + str(XH_pins[i]) + XH_special[i]) f.pins = XH_pins[i] f.height = XH_dimC[i] f.generator.clearance = 0.3048 f.generator.mask_clearance = 0.080 f.pitch = 2.50 f.width = 13.0 f.padheight = 1.30 f.padwidth = 11-6.5 f.box_corners( (f.pitch*f.pins-1)/2+2.3+1.8+1 , (f.width+2)/2 , -(f.pitch*f.pins-1)/2-2.3-1.8-1 , (-(f.width+2)/2)) # should create a function for creating a pin1 diamond f.silk_line( -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch , -((f.width+1)/2) , -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch+f.padheight/2 , -(f.width+2)/2) f.silk_line( -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch , -((f.width+1)/2) , -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch-f.padheight/2 , -(f.width+2)/2) f.silk_line( -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch , -((f.width+3)/2) , -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch+f.padheight/2 , -(f.width+2)/2) f.silk_line( -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch , -((f.width+3)/2) , -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch-f.padheight/2 , -(f.width+2)/2) #signal pads
#!/usr/bin/env python2 import footgen f = footgen.Footgen("SSOP56", output_format="geda") f.pins = 56 f.pitch = 0.635 f.width = 7.4 f.padheight = 0.4 f.padwidth = 2 f.so() f.silk_crop(11, 20, pin1="circle") f.finish()
#!/usr/bin/env python2 import footgen f = footgen.Footgen("CON351779862g", output_format="geda") f.pins = 60 f.pitch = 0.8 f.width = 2.4 f.padheight = 0.5 f.padwidth = 2 f.so() f.finish()
# This product line connects with MicroFit receptacle series 43645 # Note XX0[6-8] are obsolete and discontinued by Molex, all parts used 'snap-in platic pegs import footgen # following values are from datasheet MMF_basename = "Molex-43650-{0}{1}" MMF_pins = range(2,13) MMF_style = {'pth, horizontal, snap-in plastic peg PCB lock':[0,1,2,37],'pth, horizontal, PCB press-fit metal retention clip':[3,4,5,59],'smt, horizontal, PCB press-fit metal rentention clip':[9,10,11],'smt, horizontal, solder tab':[12,13,14],'pth, vertical, pcb polarizing peg':[15,16,17],'pth, vertical, PCB press-fit metal retention clip':[18,19,20],'smt, vertical, PCB press-fit metal retention clips':[21,22,23],'smt, vertical, solder tab':[24,25,26]} MMF_finish = {'tin 2.54nm':0, 'gold, 0.38um':1, 'gold, 0.76mm':2} # Dimensions will change for the following part groups -- MMF_dimA = [9.65,12.65,15.65,18.64,21.64,24.64,27.64,30.63,33.66,36.65,39.65] MMF_dimB = [ 3.00,6.00,9.00,12.00,15.00,18.00,21.00,24.00,27.00,30.00,33.00] MMF_dimC = [None,None,4.70,7.70,10.70,13.70,16.70,19.70,22.70,25.70,28.70] for i in range(len(MMF_pins)): f = footgen.Footgen(MMF_basename.format(str(MMF_pins[i]).zfill(2),str(MMF_style['pth, horizontal, snap-in plastic peg PCB lock'][MMF_finish['tin 2.54nm']]).zfill(2))) f.pins = MMF_pins[i] f.generator.diameter = 2.14 f.generator.drill = 1.02 f.generator.options_list = ["circle"] f.generator.clearance = 0.3048 f.generator.mask_clearance = 0.080 f.pitch = 3.00 f.width = 4.32 f.height = MMF_dimA[i] f.padheight = 1.27 f.padwidth = 2.54 #f.box_corners(MMF_dimA[i]/2,-f.width-f.generator.drill,-MMF_dimA[i]/2,4.6) f.silk_line(-f.height/2,-f.width,-f.height/2+2.41/2,-f.width) f.silk_line(-f.height/2,-f.width+f.generator.drill,-f.height/2,-f.width) f.silk_line(f.height/2,-f.width,f.height/2-2.41/2,-f.width)
#!/usr/bin/python # R. Miloh Alexander # Use: unrestricted with attribution import footgen # Implement footprint for BI technologies/TT Electronics 84PRxx 1/4" multiturn smd cermet trim pot trimpot_basename = "84{0}" trimpot_types = {'Top': 'W', 'Side': 'X', 'SideShort': 'P'} f = footgen.Footgen(trimpot_basename.format(trimpot_types['Top'])) #f = footgen.Footgen(trimpot_basename.format(trimpot_types['Side'])) f.silkwidth = 0.254 # mm f.pins = 3 f.width = 6.35 # mm f.height = 7.49 # mm f.padwidth = 1.02 # mm f.padheight = 2.8 # mm #f.box_corners( f.width/2 , f.height/2, -f.width/2, -f.width/2 ) # silk box must be made in segments since the pads extend past the bounds # left bracket f.silk_line(-(f.width + 0.5) / 2, -f.height / 2, -(f.width) / 4, -f.height / 2) f.silk_line(-(f.width + 0.5) / 2, f.height / 2, -(f.width + 0.5) / 2, -f.height / 2) f.silk_line(-(f.width + 0.5) / 2, f.height / 2, -(f.width) / 2, f.height / 2) # right bracket f.silk_line((f.width) / 4, -f.height / 2, (f.width + 0.5) / 2, -f.height / 2) f.silk_line((f.width + 0.5) / 2, f.height / 2, (f.width + 0.5) / 2, -f.height / 2) f.silk_line((f.width) / 2, f.height / 2, (f.width + 0.5) / 2, f.height / 2) f.add_pad("1", -2.54, (f.height - f.padheight) / 2, f.padwidth, f.padheight)
import footgen FI_RE_basename ="JAE-FI-R-E-{0}S-{1}" FI_RE_EntryTypes = {'Top':'VF','Side':"HF"} #HF Horizontal (side entry) and VF Vertical FI_RE_contacts = [21, 31, 41, 51] # FI_RE_VF_dimA = [16, 21, 26, 31] FI_RE_VF_dimB = [10, 15, 20, 25] FI_RE_VF_dimC = [20.35, 25.35, 30.35, 35.35] FI_RE_VF_dimD = [3, 4, 4, 5] FI_RE_VF_dimE = [None, None, 4, 5] FI_RE_VF_dimF = [20.95, 25.95, 30.95, 35.95] FI_RE_VF_dimG = [19.75, 24.75, 29.75, 34.75] FI_RE_VF_dimH = [21.85, 26.85, 31.85, 36.85] for i in range(len(FI_RE_contacts)): f = footgen.Footgen(FI_RE_basename.format(FI_RE_contacts[i],FI_RE_EntryTypes['Top'])) f.generator.clearance = 0.204 f.generator.mask_clearance = 0.080 f.pins = FI_RE_contacts[i] f.pitch = 0.5 f.height = FI_RE_VF_dimF[i] f.width = 5.1 f.silkwidth = 0.254 f.padheight = 0.25 f.padwidth = 1.55 f.rowofpads([0,0],"right",1,f.pins) #all contacts # silk component outlines # horizontal line segments constructing corners near contacts f.silk_line(-FI_RE_VF_dimF[i]/2, f.padwidth/4, -FI_RE_VF_dimG[i]/2, f.padwidth/4) f.silk_line(FI_RE_VF_dimF[i]/2, f.padwidth/4, FI_RE_VF_dimG[i]/2, f.padwidth/4) # vertical line segments constructing corners near contacts
#!/usr/bin/python import footgen f = footgen.Footgen("QFN16-TPS61090RSAR", output_format="geda") f.sm_pads( pitch=0.65, width=3.1, height=3.1, padheight=0.30, padwidth=0.800, pinswide=4, pinshigh=4, silk_xsize=4.0, silk_ysize=4.0, ) f.finish()
# Molex SDA-70634 family of SMT 0.1" pitch pcb headers # implements SMT side entry type only!!! through hole components still needed to be added # following values are from datasheet "015912045_sd.pdf # all units mm molex_70634_basename = "Molex-70634-02" molex_70634_pins = [2,3,4] # more pins in the complete sheet molex_70634_dimA = [2.54,5.08,7.62] molex_70634_dimB = [5.33,8.13,10.67] molex_70634_dimC = [8.64,11.43,13.97] molex_70634_dimD = [5.33,7.87,10.41] molex_70634_dimE = [0.13,0.13,0.13] molex_70634_dimF = [2.79,3.05,3.95] molex_70634_dimG = [4.32,4.57,4.57] for i in range(len(molex_70634_pins)): f = footgen.Footgen(molex_70634_basename + str(molex_70634_pins[i]).zfill(2) ) f.pins = molex_70634_pins[i] outer_Xedge = molex_70634_dimC[i] f.height = molex_70634_dimD[i] f.generator.clearance = 0.3048 f.generator.mask_clearance = 0.080 f.pitch = 2.54 f.width = 13.59 + 3.18 f.padheight = 1.65 f.padwidth = 5.33 f.silk_line( -outer_Xedge/2,-13.59-f.padheight/2,-outer_Xedge/2,0) f.silk_line( +outer_Xedge/2,-13.59-f.padheight/2,+outer_Xedge/2,0) f.silk_line( -outer_Xedge/2,-13.59-f.padheight/2,+outer_Xedge/2,-13.59-f.padheight/2) #f.box_corners(-f.height/2, 10.69/2,+f.height/2, #f.box_corners( (f.pitch*f.pins-1)/2+2.3+1.8+1 , (f.width+2)/2 , -(f.pitch*f.pins-1)/2-2.3-1.8-1 , (-(f.width+2)/2)) # should create a function for creating a pin1 diamond
#/usr/bin/python # R. Miloh Alexander # Use: unrestricted with attribution import footgen f = footgen.Footgen("xuntong-ptr9018") f.generator.clearance = 0.3048 f.generator.mask_clearance = 0.080 f.pins = 30 f.pitch = 1.27 # mm f.width = 23 f.padheight = 0.8128 # mm f.padwidth = 2.2 # mm #f.height = 2.16 height = 17.4244 width = 22.6568 sidepads = 6 offset_width = 4.064 offset_height = 5.5118 f.rowofpads([(offset_width+(15-1)*f.pitch)/2, height-f.padwidth/3],"left",22,15) f.rowofpads([width-f.padwidth,height/2],"down",16,sidepads) f.rowofpads([(offset_width+(15-1)*f.pitch)/2,f.padwidth/3],"right",1,15) f.finish()
#!/usr/bin/python import footgen f = footgen.Footgen("QFN16-MMA8452Q") f.mirror = True f.pitch = 0.5 f.pins = 16 f.width = 3.0 f.height = 3.0 f.padheight = 0.30 f.padwidth = 0.600 #nudged up from MMA8452Q datasheet f.pinswide = 3.0 f.silk_crop(3.3, pin1="diamond", rotate='-90') f.rowofpads([-f.height / 2 + f.padwidth / 2, 0], "up", 1, 5) f.rowofpads([0, -f.width / 2 + f.padwidth / 2], "right", 6, 3) f.rowofpads([f.width / 2 - f.padwidth / 2, 0], "down", 9, 5) f.rowofpads([0, f.width / 2 - f.padwidth / 2], "left", 14, 3) f.finish()
import footgen #Minitek unshrouded HDR # unshrouded smt headers on a 0.05" pitch #dimensions from datasheet #http://portal.fciconnect.com/Comergent//fci/drawing/20021121.pdf basename = "20021121-X0X0{0}XXLF" # import numpy for full ranges # dimN = arange ( 0,65,1.27) # and use a dict {} with the pos as the key for the dimensions DIMX = [3.81, 5.08, 6.35] DIMY = [2.54, 3.81, 5.08] DIMZ = [1.27, 2.54, 3.81] pos = range(6, 12, 2) for i in range(len(pos)): f = footgen.Footgen(basename.format(str(pos[i]).zfill(2))) if pos == 100: f = footgen.Footgen(basename.format(str(A0))) f.generator.clearance = 0.33 f.generator.mask_clearance = 0.080 f.pins = pos[i] f.pitch = 1.27 f.padheight = 0.76 # mm f.padwidth = 2.40 # mm f.width = 6.30 - 2 * f.padwidth f.soh() f.finish()
#!/usr/bin/python import footgen f = footgen.Footgen("BMI-S-230-F") for y in [18.95, -18.95]: for i in range(-3, 4): f.add_pad(name="1", x=6.0 * i, y=y, xsize=3.8, ysize=1.0) f.add_pad(name="1", x=6.0 * i, y=y, xsize=1.0, ysize=1.0, drill=0.5) for i in [-1, 1]: f.add_pad(name="1", x=i * (6.0 * 4 - 0.05), y=y, xsize=3.7, ysize=1.0) f.add_pad(name="1", x=i * (6.0 * 4 - 0.05), y=y, xsize=1.0, ysize=1.0, drill=0.5) for i in range(8): f.add_pad(name="1", x=-21.0 + i * 6.0, y=y, xsize=1.5, ysize=1.5, drill=1.0) for x in [25.3, -25.3]: for i in range(-2, 3): f.add_pad(name="1", x=x, y=6.0 * i, xsize=1.0, ysize=3.8) f.add_pad(name="1", x=x, y=6.0 * i, xsize=1.0, ysize=1.0, drill=0.5) for i in [-1, 1]: f.add_pad(name="1", x=x,
#!/usr/bin/python # R. Miloh Alexander # Use: unrestricted with attribution import footgen # package index: # d2pak (TO-263) # dpak (TO-252) # i2pak (TO-262) # ipak (TO-251) # # Implements footprints for IRF5305S from infineon # datasheet source irf5305spbf.pdf # f = footgen.Footgen("irf5305s") f.silkwidth = 0.254 f.pins = 3 f.width = 11.43 # mm f.height = 17.78 #mm f.epadwidth = f.width # mm f.epadheight = 8.89 # mm f.padwidth = 2.08 # mm f.padheight = 3.81 # mm f.add_pad( str(1), (-f.width + f.padwidth)/2, f.height-(f.padheight)/2, f.padwidth, f.padheight) f.add_pad( str(2), 0.0, f.epadheight/2, f.epadwidth, f.epadheight) f.add_pad( str(3), (f.width - f.padwidth)/2, f.height-(f.padheight)/2, f.padwidth, f.padheight) f.finish()
# R. Miloh Alexander # Use: unrestricted with attribution ### need to fix this to implement PTH as well as SMT import footgen # implements XA side entry type only!!! through hole components still needed to be added # following values are from datasheet # XA_basename = "S{:02d}B-XASK-1" XA_circuits = [2,3,4,5,6,7,8,9,10,11,12,13,14] XA_dimA = [2.5,5.0,7.5,10.0,12.5,15.0,17.5,20.0,22.5,25.0,27.5,30.0,32.5] XA_dimB = [7.5,10.0,12.5,15.0,17.5,20.0,22.5,25.0,27.5,30.0,32.5,35.0,37.5] XA_dimD = [1.25,2.50,3.75,5.00,6.25,7.50,8.75,10.00,11.25,12.50,13.75,15.00,16.25] for i in range(len(XA_circuits)): f = footgen.Footgen(XA_basename.format(XA_circuits[i])) f.pins = XA_circuits[i] f.height = 12.6 f.generator.clearance = 0.3048 f.generator.mask_clearance = 0.080 f.pitch = 2.50 f.width = XA_dimA[i] f.box_corners( (f.pitch*f.pins-1)/2+2.3+1.8+1 , (f.width+2)/2 , -(f.pitch*f.pins-1)/2-2.3-1.8-1 , (-(f.width+2)/2)) # should create a function for creating a pin1 diamond f.silk_line( -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch , -((f.width+1)/2) , -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch+f.padheight/2 , -(f.width+2)/2) f.silk_line( -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch , -((f.width+1)/2) , -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch-f.padheight/2 , -(f.width+2)/2) f.silk_line( -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch , -((f.width+3)/2) , -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch+f.padheight/2 , -(f.width+2)/2) f.silk_line( -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch , -((f.width+3)/2) , -(f.pitch*(f.pins-1))/2+(f.pins-1)*f.pitch-f.padheight/2 , -(f.width+2)/2) #signal pads f.via_array(f.pins,1,f.pitch,[ -0 , -f.width/2+f.padwidth/2],"left",1,f.pins) via_array(self, columns=None, rows=None, pitch=None, size=0.3302, pad=0.7,
#!/usr/bin/python # R. Miloh Alexander # Use: unrestricted with attribution import footgen # # Implements footprints for PTS645 from C&K # datasheet source PTS645_7jan16-523842.pdf # f = footgen.Footgen("PTS645-SMTR") f.silkwidth = 0.254 f.pins = 4 f.width = 9.5 # mm f.height = 5.8 # mm f.padwidth = (f.width - 6.4)/2 # mm f.padheight = (f.height - 3.2)/2 # mm f.add_pad( str(1), (f.width-f.padwidth)/2, (f.height-f.padheight)/2, f.padwidth, f.padheight) f.add_pad( str(2), (f.width-f.padwidth)/2, -(f.height-f.padheight)/2, f.padwidth, f.padheight) f.add_pad( str(3), -(f.width-f.padwidth)/2, -(f.height-f.padheight)/2, f.padwidth, f.padheight) f.add_pad( str(4), -(f.width-f.padwidth)/2, (f.height-f.padheight)/2, f.padwidth, f.padheight) f.finish() # Implement footprint for SKQG from ALPS f = footgen.Footgen("SKQG-SMT") f.silkwidth = 0.254 f.pins = 4 f.width = 8 # mm f.height = 4.8 # mm