# ============== STM32 LQFP64 ============== pinNames=[ [None,"14","15","16","17","20","21","22","23","41","42","43","44","45","46","49","50",None,"54"], [None,"26","27","28","55","56","57","58","59","61","62","29","30","33","34","35","36"], ["7","60",None,"1",None,"13",None,"32","64","48","19",None,None,"12",None,"31","63","47","18",], ["8","9","10","11","24","25","37","38","39","40","51","52","53","2","3","4",None,"5","6"] ] footprints = [footprintQfp(64, 0.5, density=density) for density in ["N", "L", "M"]] path=os.path.join(os.path.dirname(__file__),"STM32_LQFP64.ods") #generate symbols configured by pinNames self.parts.extend(icGenerator.generate(path,pinNames,footprints,size=3000)) #generate quad pin-by-pin symbols self.parts.extend(icGenerator.generate(path,pinNames=None,\ footprints=footprints,symbolType="quad",namePosfix="_q",size=3100)) # ============== STM32 TSSOP20 ============== pinNames=[ ["4","1",None,"16","5",None,None,None,None,"2","3",None,"15"], ["6","7","8","9","10","11","12","13","17","18","19","20","14"] ] footprints = [footprintTssop(20, density=density) for density in ["N", "L", "M"]] path=os.path.join(os.path.dirname(__file__),"STM32_TSSOP20.ods") #generate symbols configured by pinNames self.parts.extend(icGenerator.generate(path,pinNames,footprints,size=2000)) # ============== STM32 LQFP48 ============== path=os.path.join(os.path.dirname(__file__),"STM32_LQFP48.ods") self.parts.extend(icGenerator.generate_advanced(path)) if __name__ == "__main__": generateLibraries([librarySTM32()])
self.addCylinder3Dbody([0,0,0], [3.5,3.5,height]) self.renamePads([1,2,2,1]) class footprintMicroswitchSmt6x4(footprintSmdDualRow): """ SMT microswitch 6x4mm """ def __init__(self, density, name="", alternativeLibName="niceSwitches"): """ density: "L" - least, "N" - nominal, "M" - most """ if not name: name="MicroswitchSmd6x4_%s" % ( density) # pads padSizes={"L":[1.2,1.3], "N":[1.4,1.5], "M":[1.6,1.7]} padSpan={"L":7.7, "N":7.8, "M":7.9} super().__init__(name, alternativeLibName,\ pinCount= 2,\ pitch=4.5,\ padSpan=padSpan[density],\ padDimensions=padSizes[density],\ bodyDimensions=[3.9,6.3,2],\ originMarkSize=defaults.originMarkSize, leadDimensions=[1, 0.6, 1],\ court=defaults.court[density],\ firstPinMarker=False) self.addSimple3Dbody([0,0,0], [1.2,2.6,2.5],file="cube_metal") if __name__ == "__main__": generateLibraries([librarySwitches()])
super().__init__(1, rows, pitch, dim[pitch][density], shape[density], drill[pitch],\ name=name, alternativeLibName=alternativeLibName, court=court[density],\ bodySize=[bodyXSize[pitch], pitch*rows], bodyOffset=[bodyXOffset[pitch],0],\ keySize=-1, bodyHeight=bodyHeight[pitch], pinDimensions=pinDimensions[pitch],\ pinZOffset=-pinDimensions[pitch][2], bodyStyle="cube_green") self.valueObject.position[0]+=0.5 # drawing x=-bodyXSize[pitch]/2+bodyXOffset[pitch]-plugXsize[pitch]/2 self.addSimple3Dbody([x,0], [plugXsize[pitch], pitch*rows, plugHeight[pitch]], file="cube_green") if rows>2: locks=[-1,1] else: locks=[0] for y in locks: self.addSimple3Dbody([bodyXOffset[pitch]-bodyXSize[pitch]/2+lockSizes[pitch][0]/2,\ (rows-2)/2*pitch*y,bodyHeight[pitch]], lockSizes[pitch], file="cube_green") for i in range(rows): y=(rows/2-1/2-i)*pitch # front size markers self.primitives.append(pcbRectangle(pcbLayer.topAssembly, defaults.documentationWidth,\ dimensions=[1, pitch*0.8], position=[x-plugXsize[pitch]/2+0.5, y])) # screw drawing self.primitives.append(pcbCircle(pcbLayer.topAssembly, defaults.documentationWidth,\ [x, y], pitch*0.35)) k=pitch*0.35*sqrt(2)/2 self.primitives.append(pcbLine(pcbLayer.topAssembly,defaults.documentationWidth,\ x-k, y-k, x+k, y+k)) if __name__ == "__main__": generateLibraries([libraryTerminalBlocks()])
['GND', 5, pinType.pwrIn], ['GND', 10, pinType.pwrIn] ] pinsRight = [ ['VDDIO', 8, pinType.pwrIn], None, None, None, ['SCL', 7, pinType.input], ['SDA', 6, pinType.IO], ['INT1', 9, pinType.output] ] super().__init__(name, pinsLeft=pinsLeft, pinsRight=pinsRight, width=1000) class footprintFreescaleDfnCol10(footprintSmdDualRow): """ Freescale DFN_COL 10pin """ def __init__(self, density): name="Freescale_DFN-COL-10_%s"%density padLen={"L":0.6,"N":0.6,"M":0.8} super().__init__(name, alternativeLibName="niceSemiconductors",\ pinCount=10, pitch=0.4, padSpan=1.8,padDimensions=[0.225,padLen[density]],\ bodyDimensions=[2.2,2.2,0.9],leadDimensions=[0.01,0.25,0.2],\ court = defaults.court[density], leadStyle="cube_metal") if __name__ == "__main__": # generate libraries generateLibraries([librarySensors()])
self.pins.append(symbolPin(pinNames[4], pinNumbers[4], [0,200], 50,\ pinType.input,270)) self.primitives.append(symbolLine(defaults.symbolLineWidth,75,125,25,125)) self.primitives.append(symbolLine(defaults.symbolLineWidth,50,150,50,100)) self.primitives.append(symbolLine(6,0,112,0,150)) class symbolOpampPower(symbol): """ Opamp power symbol """ def __init__(self, name="", refDes=defaults.icRefDes, pinNumbers=[4,8],\ pinNames=["GND","VCC",]): """ param pinNumbers: pin numbers for GNC, VCC, like: [4, 8] param pinNames: pin names for GNC, VCC, like: ["GND","VCC"] """ super().__init__(name, refDes=refDes, showPinNames=False, showPinNumbers=True) self.primitives.append(symbolRectangle(defaults.symbolLineWidth,position=[0,0],\ dimensions=[100,300], filled=fillType.background)) # power pins self.pins.append(symbolPin(pinNames[0], pinNumbers[0], [0,-200], 50,\ pinType.input,90)) self.primitives.append(symbolLine(defaults.symbolLineWidth,25,-100,-25,-100)) self.pins.append(symbolPin(pinNames[1], pinNumbers[1], [0,200], 50,\ pinType.input,270)) self.primitives.append(symbolLine(defaults.symbolLineWidth,25,100,-25,100)) self.primitives.append(symbolLine(defaults.symbolLineWidth,0,125,0,75)) if __name__ == "__main__": generateLibraries([libraryOpamps()])
[[200,100],[50,100],[0,50],[-50,100]])) self.primitives.append(symbolPolyline(defaults.symbolLineWidth,\ [[200,-100],[-150,-100],[-150,100],[-100,100],[-100,0],[-150,0]])) class footprintJackNarrow(footprint): """Narrow 3.5 jack THT """ def __init__(self, density ="N", name="", smd=True,\ alternativeLibName="niceConectorsOther"): if not name: name = "Jack_Narrow_%s_%s" % ("smd" if smd else "tht", density) super().__init__(name, alternativeLibName) #body self.addSimple3Dbody([0.8,0,0],[11.6,6.3,5.1],silk=True) self.addSimple3Dbody([-6.3,0,0],[2.6,5.1,5.1],silk=True) # pads posx={0:-3.2,1:0,2:3.5} for x in range(3): for y in [-1,1]: if smd: self.primitives.append(pcbSmtPad(pcbLayer.topCopper,\ [posx[x],3.325*y],[2,-2.85],str(x+1))) self.addSimple3Dbody([posx[x],3.55*y,0],[1,0.9,0.3],file="cube_metal") else: self.primitives.append(pcbThtPad(\ [posx[x],2.875*y],[2.7,2.2],1.7,str(x+1))) self.addSimple3Dbody([posx[x],2.875*y,-3],[1,0.8,3],file="cube_metal") if __name__ == "__main__": generateLibraries([libraryConnectorsOther()])
extStr, "_plastic" if plastic else "") super().__init__(name, alternativeLibName) hexSizes={2:4, 2.5:5, 3:5.5, 4:7, 5:8} cylinderSizes={2:4, 2.5:5, 3:6, 4:8, 5:10} hexBody="hex" if plastic else "hex_metal" cylinderBody="cylinder" if plastic else "cylinder_metal" if threaded: self.addSimple3Dbody([0,0,0], [hexSizes[size], hexSizes[size], length],\ draw=False, file=hexBody) self.primitives.append(pcbCircle(pcbLayer.topAssembly, defaults.documentationWidth,\ [0,0], hexSizes[size]/sqrt(3))) else: self.addCylinder3Dbody([0,0,0], [cylinderSizes[size], cylinderSizes[size], length],\ draw=True, file=cylinderBody) if lengthExt: self.addCylinder3Dbody([0,0,-lengthExt], [size, size, lengthExt],\ draw=False, file=cylinderBody) class footprintDummy(footprint): """ dummy footprint for mechanical only parts """ def __init__(self, name="dummy", alternativeLibName="niceMechanical"): super().__init__(name, alternativeLibName) self.primitives.append(pcbRectangle(pcbLayer.topAssembly,\ defaults.documentationWidth,position=[0,0], dimensions=[10,5])) if __name__ == "__main__": # generate libraries generateLibraries([libraryMechanical()])
""" """ def __init__(self, name="", alternativeLibName="", density="N"): if not name: name="SOD-323_%s"%(density) if not alternativeLibName: alternativeLibName="niceSemiconductors" bodyDimensions=[1.35, 1.8, 1.1] super().__init__(name, alternativeLibName, pinCount=2, pitch=1,\ padSpan=2.4,padDimensions=[0.6,0.8], bodyDimensions=bodyDimensions,\ leadDimensions=[0.45,0.4,0.8], court = defaults.court[density]) class footprintAvagoPLCC4(footprintSmdDualRow): """ """ def __init__(self, name="", alternativeLibName="", density="N"): if not name: name="Avago_PLCC4_%s"%(density) if not alternativeLibName: alternativeLibName="niceSemiconductors" super().__init__(name, alternativeLibName, pinCount=4, pitch=1.7,\ padSpan=3, padDimensions=[1.1,1.5], \ bodyDimensions=[3,3.4,2.1], bodyStyle="cube_metal",\ leadDimensions=[0.15,0.7,1.3], leadStyle="cube_metal", \ court = defaults.court[density]) if __name__ == "__main__": generateLibraries([libraryDiodes()])
super().__init__(name, alternativeLibName,\ pinCount=60, pitch=0.5,\ padSpan=4.6,padDimensions=[0.25,2.2],\ bodyDimensions=[18.40,4.8,3.05],\ leadDimensions=[0.4,0.2,0.18],\ court = defaults.court[density],\ leadStyle="cube_metal") pads=["%d"%(2*i+1) for i in range(30)]+["%d"%(60-2*i) for i in range(30)] self.renamePads(pads) class footprintAXK6S60447YG(footprintSmdDualRow): """ Panasonic Narrow Pitch Connector P5KS Header 60 pin For mated height 4.0 mm, 4.5 mm and 7.0 mm Without positioning boss/with direction for protection from reverse mating """ def __init__(self, name="AXK6S60447YG", alternativeLibName="niceConectorsOther", density="N", wide=False): super().__init__(name, alternativeLibName,\ pinCount=60, pitch=0.5,\ padSpan=4.2,padDimensions=[0.25,2.2],\ bodyDimensions=[18.40,4.4,0.95],\ leadDimensions=[0.4,0.2,0.23],\ court = defaults.court[density],\ leadStyle="cube_metal") pads=["%d"%(2*i+1) for i in range(30)]+["%d"%(60-2*i) for i in range(30)] self.renamePads(pads) self.addSimple3Dbody([0,0],[16.5,1.72,3.3]) if __name__ == "__main__": generateLibraries([libraryTest()])
super().__init__(name, pinsLeft, pinsRight, 400, refDes, showPinNames, showPinNumbers) class footprintPinheader(footprintConnectorTht): """Pinheader footprint """ def __init__(self, cols, rows, density ="N", name=None, alternativeLibName="nicePinheaders",\ originMarkSize=0, textOnSilk=True, pinLength=-1, bodyHeight=-1, angled=False, gender = "M", alternative=False): dim={"L":[1.3, 1.3],"N":[1.8, 1.4],"M":[2,2]} shape={"L":padShape.round, "N":padShape.roundRect, "M":padShape.round} if bodyHeight<0: if gender=="F": bodyHeight=8.5 else: bodyHeight=2.5 if pinLength<0: if gender=="F": pinLength=3 else: pinLength=11.75 if not name: name = "PIN-%dx%d%s%s_%s" % (cols, rows, "_F" if gender=="F" else "",\ "_angled" if angled else "", density) super().__init__(cols, rows, mil(100), dim[density], shape[density], 1.0,\ name=name, alternativeLibName=alternativeLibName, court=defaults.courtConn[density],\ bodyHeight=bodyHeight, pinDimensions=[0.64, 0.64, pinLength], pinZOffset=-3,\ angled=angled, angledOffset=-1.4,gender=gender) if __name__ == "__main__": generateLibraries([libraryPinheaders()])
from symbols.symbolsIC import symbolICquad from libraryManager.symbolPrimitive import pinType from libraryManager.generateLibraries import generateLibraries class _libraryTest(libraryClass): def __init__(self): super().__init__("_test_") self.parts.append(_partTest()) class _partTest(part): def __init__(self): super().__init__("_test_","TEST") pins=[[["%d"%(i+j*7),"%d"%(i+j*4),pinType.IO] for i in range(7)] for j in range(4)] self.symbols.append(symbolICquad("_test_",pins)) if __name__ == "__main__": # generate libraries if True: libs = [libraryModules.libraryModules()] else: libs = [libraryTerminalBlocks.libraryTerminalBlocks(), libraryRLC.libraryRLC(),\ librarySwitches.librarySwitches(),\ libraryAVR.libraryAVR(), libraryPinheaders.libraryPinheaders(),\ libraryMosfets.libraryMosfets(), libraryPowerSupplies.libraryPowerSupplies(),\ libraryModules.libraryModules(), libraryResonators.libraryResonators(),\ libraryDiodes.libraryDiodes(), libraryMechanical.libraryMechanical(),\ libraryLogic.libraryLogic(), libraryCommunicationIC.libraryCommunicationIC(),\ libraryConnectorsOther.libraryConnectorsOther(), librarySTM32.librarySTM32()] generateLibraries(libs)