# ============== 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()])
Пример #9
0
        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()])
Пример #11
0
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)