From: Bdale Garbee Date: Mon, 18 Mar 2013 21:55:50 +0000 (-0600) Subject: remainder of footprint generators needed for megametrum X-Git-Tag: telelco-v3.0~911 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=03c8df78904d0981ab28e886e57c2c4ce177147e;p=hw%2Faltusmetrum remainder of footprint generators needed for megametrum --- diff --git a/packages/Makefile b/packages/Makefile index e9ca92f..2d5d068 100644 --- a/packages/Makefile +++ b/packages/Makefile @@ -21,7 +21,11 @@ FOOTPRINTS= \ lqfp100.fp \ LPCC16.fp \ 0605.fp \ - MPU6000.fp + MPU6000.fp \ + UBLOX-MAX.fp \ + TI-QFN32.fp \ + NDK32.fp \ + sma-edge.fp .5c.fp: nickle $*.5c > $@ diff --git a/packages/NDK32.py b/packages/NDK32.py new file mode 100755 index 0000000..ab434d4 --- /dev/null +++ b/packages/NDK32.py @@ -0,0 +1,71 @@ +#!/usr/bin/python +# Copyright 2011 by Bdale Garbee . GPLv2 +# +# Program to emit PCB footprint for package used by NDK 32mhz crystal +# + +# dimensions in mm from abm8.pdf Abracon datasheet +PinHeight = 1.40 +PinWidth = 1.20 +HSpacing = 2.20 - 1.40 +WSpacing = 1.6 - 1.20 + +import sys + +# we're going to use the 1/100 of a mil fundamental unit form +def mm2mils100( mm ): + return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 ) + +print '# author: Bdale Garbee' +print '# email: bdale@gag.com' +print '# dist-license: GPL 2' +print '# use-license: unlimited' + +print 'Element[0x0 "NDK32" "" "" 0 0 0 0 0 100 0x0]' +print "(" +print ' Pad[',\ + mm2mils100(WSpacing/2 + PinWidth/2), \ + mm2mils100(-(HSpacing/2 + PinWidth/2)), \ + mm2mils100(WSpacing/2 + PinWidth/2), \ + mm2mils100(-(HSpacing/2 + PinHeight - PinWidth/2)), \ + mm2mils100(PinWidth), \ + mm2mils100(0), \ + mm2mils100(PinWidth)+600, \ + '"pin2" "2" 0x0100]' + +print ' Pad[',\ + mm2mils100(WSpacing/2 + PinWidth/2), \ + mm2mils100(HSpacing/2 + PinWidth/2), \ + mm2mils100(WSpacing/2 + PinWidth/2), \ + mm2mils100(HSpacing/2 + PinHeight - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(0), \ + mm2mils100(PinWidth)+600, \ + '"pin1" "1" 0x0100]' + +print ' Pad[',\ + mm2mils100(-(WSpacing/2 + PinWidth/2)), \ + mm2mils100(HSpacing/2 + PinWidth/2), \ + mm2mils100(-(WSpacing/2 + PinWidth/2)), \ + mm2mils100(HSpacing/2 + PinHeight - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(0), \ + mm2mils100(PinWidth)+600, \ + '"pin4" "4" 0x0100]' + +print ' Pad[',\ + mm2mils100(-(WSpacing/2 + PinWidth/2)), \ + mm2mils100(-(HSpacing/2 + PinWidth/2)), \ + mm2mils100(-(WSpacing/2 + PinWidth/2)), \ + mm2mils100(-(HSpacing/2 + PinHeight - PinWidth/2)), \ + mm2mils100(PinWidth), \ + mm2mils100(0), \ + mm2mils100(PinWidth)+600, \ + '"pin3" "3" 0x0100]' + +print ' ElementArc[',\ + mm2mils100(PinWidth*1.4), \ + mm2mils100(PinHeight*1.4), \ + '500 500 0 360 1000 ]' + +print ")" diff --git a/packages/TI-QFN32.py b/packages/TI-QFN32.py new file mode 100755 index 0000000..bfbe943 --- /dev/null +++ b/packages/TI-QFN32.py @@ -0,0 +1,136 @@ +#!/usr/bin/python +# Copyright 2011 by Bdale Garbee . GPLv2 +# +# Program to emit PCB footprint for QFN32 package used by TI CC1120 +# + +# dimensions in mm from the TI cc1111f32.pdf datasheet +PinWidth = 0.28 +PinResist = PinWidth + (2 * 0.07) +PinHeight = (5.8 - 4.1) / 2 +PinSpacing = 0.50 +Overall = 5.80 +GndSquare = 3.70 +CoreSquare = 3.30 # resist gaps and paste spots over ground tab +PinSquare = 4.10 + +import sys + +# we're going to use the 1/100 of a mil fundamental unit form +def mm2mils100( mm ): + return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 ) + +print '# author: Bdale Garbee' +print '# email: bdale@gag.com' +print '# dist-license: GPL 2' +print '# use-license: unlimited' + +print 'Element[0x0 "QFN36" "" "" 0 0 0 0 0 100 0x0]' +print "(" + +# pad under the chip, must be grounded +print ' Pad[',\ + mm2mils100(0), \ + mm2mils100(0), \ + mm2mils100(0), \ + mm2mils100(0), \ + mm2mils100(GndSquare), \ + 0, \ + 0, \ + '"pin33" "33" "square,nopaste"]' + +# vias in the ground pad under the chip +for viarow in range (-1,2): + for viacol in range (-1,2): + print ' Pin[',\ + mm2mils100(2 * viacol * CoreSquare / 5), \ + mm2mils100(2 * viarow * CoreSquare / 5), \ + 2900, \ + 2500, \ + 0, \ + 1500, \ + '"pin33" "33" 0x0002]' + +# break pad under chip into a grid to control the resist and paste masks +for viarow in range (-2, 3): + for viacol in range (-2, 3): + if (viarow in (-2, 0, 2)) and (viacol in (-2, 0, 2)): + # copper sub-square with resist over vias + print ' Pad[',\ + mm2mils100(viacol * CoreSquare / 5), \ + mm2mils100(viarow * CoreSquare / 5), \ + mm2mils100(viacol * CoreSquare / 5), \ + mm2mils100(viarow * CoreSquare / 5), \ + mm2mils100((CoreSquare)/5), \ + 0, \ + 0, \ + '"pin33" "33" "square,nopaste"]' + else: + # copper sub-square without resist + print ' Pad[',\ + mm2mils100(viacol * CoreSquare / 5), \ + mm2mils100(viarow * CoreSquare / 5), \ + mm2mils100(viacol * CoreSquare / 5), \ + mm2mils100(viarow * CoreSquare / 5), \ + mm2mils100((CoreSquare)/5), \ + 0, \ + mm2mils100((CoreSquare)/5), \ + '"pin33" "33" "square,nopaste"]' + # copper spot to control paste mask generation + print ' Pad[',\ + mm2mils100(viacol * CoreSquare / 5), \ + mm2mils100(viarow * CoreSquare / 5), \ + mm2mils100(viacol * CoreSquare / 5), \ + mm2mils100(viarow * CoreSquare / 5), \ + 1500, \ + 0, \ + mm2mils100((CoreSquare)/5), \ + '"pin33" "33" "square"]' + +# pins +for pin in range (1,9): + print ' Pad[',\ + mm2mils100((-4.5 + pin) * PinSpacing), \ + mm2mils100(-Overall/2 + PinWidth/2), \ + mm2mils100((-4.5 + pin) * PinSpacing), \ + mm2mils100(-Overall/2 + PinHeight - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (25-pin), '"%i"' % (25-pin), '0x0000]' + + print ' Pad[',\ + mm2mils100((-4.5 + pin) * PinSpacing), \ + mm2mils100(+Overall/2 - PinHeight + PinWidth/2), \ + mm2mils100((-4.5 + pin) * PinSpacing), \ + mm2mils100(+Overall/2 - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % pin, '"%i"' % pin, '0x0000]' + + print ' Pad[',\ + mm2mils100(Overall/2 - PinHeight + PinWidth/2), \ + mm2mils100((-4.5 + pin) * PinSpacing), \ + mm2mils100(Overall/2 - PinWidth/2), \ + mm2mils100((-4.5 + pin) * PinSpacing), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (17-pin), '"%i"' % (17-pin), '0x0000]' + + print ' Pad[',\ + mm2mils100(-Overall/2 + PinWidth/2), \ + mm2mils100((-4.5 + pin) * PinSpacing), \ + mm2mils100(-Overall/2 + PinHeight - PinWidth/2), \ + mm2mils100((-4.5 + pin) * PinSpacing), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (24+pin), '"%i"' % (24+pin), '0x0000]' + +print ' ElementArc[',\ + mm2mils100(-2.6), \ + mm2mils100(2.6), \ + '500 500 0 360 1000 ]' +print ")" diff --git a/packages/UBLOX-MAX.py b/packages/UBLOX-MAX.py new file mode 100755 index 0000000..9440612 --- /dev/null +++ b/packages/UBLOX-MAX.py @@ -0,0 +1,151 @@ +#!/usr/bin/python +# Copyright 2013 by Bdale Garbee . GPLv2 +# +# Program to emit PCB footprint for U-Blox MAX-6 GPS receiver +# + +# dimensions in mm fromL +# LEA-6_NEO-6_MAX-6_HardwareIntegrationManual_(GPS.G6-HW-09007).pdf + +BodyHeight = 10.1 +BodyWidth = 12.5 # physical is 9.7, 12.5 includes paste + +CornerPinWidth = 0.7 +MainPinWidth = 0.8 +PinHeight = 1.8 +PinSpacing = 1.1 +RowCenters = 9.7 - (1.0 - 0.8) +RowSpacing = RowCenters - PinHeight + +PasteTongueWidthDelta = 0.2 +PasteRowSpacing = 9.7 +PasteHeight = (12.5 - 9.7) / 2 +#PasteHeight = 0.8 # not quite what the manual says + +import sys + +# we're going to use the 1/100 of a mil fundamental unit form +def mm2mils100( mm ): + return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 ) + +print '# author: Bdale Garbee' +print '# email: bdale@gag.com' +print '# dist-license: GPL 2' +print '# use-license: unlimited' + +print 'Element[0x0 "UBLOX-MAX" "" "" 0 0 -10161 -12011 0 100 0x0]' +print "(" +# first, lay down the copper but with no paste mask defined +for pin in range (0,9): + if (pin == 0) or (pin == 8): + PinWidth = CornerPinWidth + else: + PinWidth = MainPinWidth + print ' Pad[',\ + mm2mils100((pin-4) * PinSpacing), \ + mm2mils100(-(RowSpacing/2 + PinWidth/2)), \ + mm2mils100((pin-4) * PinSpacing), \ + mm2mils100(-(RowSpacing/2 + PinHeight - PinWidth/2)), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin%i"' % (18 - pin), '"%i"' % (18 - pin), '"square,nopaste"]' + + print ' Pad[',\ + mm2mils100((pin-4) * PinSpacing), \ + mm2mils100(RowSpacing/2 + PinWidth/2), \ + mm2mils100((pin-4) * PinSpacing), \ + mm2mils100(RowSpacing/2 + PinHeight - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin%i"' % (1 + pin), '"%i"' % (1 + pin), '"square,nopaste"]' + +# now define the paste mask, which needs two rectangles per pad in T-shape +# the first rectangle is full pin height but narrower +for pin in range (0,9): + if (pin == 0) or (pin == 8): + PinWidth = CornerPinWidth - PasteTongueWidthDelta + else: + PinWidth = MainPinWidth - PasteTongueWidthDelta + print ' Pad[',\ + mm2mils100((pin-4) * PinSpacing), \ + mm2mils100(-(RowSpacing/2 + PinWidth/2)), \ + mm2mils100((pin-4) * PinSpacing), \ + mm2mils100(-(RowSpacing/2 + PinHeight - PinWidth/2)), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin%i"' % (18 - pin), '"%i"' % (18 - pin), '"square"]' + + print ' Pad[',\ + mm2mils100((pin-4) * PinSpacing), \ + mm2mils100(RowSpacing/2 + PinWidth/2), \ + mm2mils100((pin-4) * PinSpacing), \ + mm2mils100(RowSpacing/2 + PinHeight - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin%i"' % (1 + pin), '"%i"' % (1 + pin), '"square"]' + +# the second rectangle is partial height but full width +for pin in range (0,9): + if (pin == 0) or (pin == 8): + PinWidth = CornerPinWidth + else: + PinWidth = MainPinWidth + print ' Pad[',\ + mm2mils100((pin-4) * PinSpacing), \ + mm2mils100(-(PasteRowSpacing/2 + PinWidth/2)), \ + mm2mils100((pin-4) * PinSpacing), \ + mm2mils100(-(PasteRowSpacing/2 + PasteHeight - PinWidth/2)), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin%i"' % (18 - pin), '"%i"' % (18 - pin), '"square"]' + + print ' Pad[',\ + mm2mils100((pin-4) * PinSpacing), \ + mm2mils100(PasteRowSpacing/2 + PinWidth/2), \ + mm2mils100((pin-4) * PinSpacing), \ + mm2mils100(PasteRowSpacing/2 + PasteHeight - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin%i"' % (1 + pin), '"%i"' % (1 + pin), '"square"]' + + +print ' ElementLine[',\ + mm2mils100(-BodyHeight/2), \ + mm2mils100(-BodyWidth/2), \ + mm2mils100(-BodyHeight/2), \ + mm2mils100( BodyWidth/2), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100(-BodyHeight/2), \ + mm2mils100( BodyWidth/2), \ + mm2mils100( BodyHeight/2), \ + mm2mils100( BodyWidth/2), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100( BodyHeight/2), \ + mm2mils100( BodyWidth/2), \ + mm2mils100( BodyHeight/2), \ + mm2mils100(-BodyWidth/2), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100( BodyHeight/2), \ + mm2mils100(-BodyWidth/2), \ + mm2mils100(-BodyHeight/2), \ + mm2mils100(-BodyWidth/2), \ + '1000 ]' + +print ' ElementArc[',\ + mm2mils100(-4 * PinSpacing), \ + mm2mils100(RowSpacing/2-PinHeight/2), \ + '500 500 0 360 1000 ]' + +print ")" diff --git a/packages/sma-edge.py b/packages/sma-edge.py new file mode 100755 index 0000000..52a4f63 --- /dev/null +++ b/packages/sma-edge.py @@ -0,0 +1,70 @@ +#!/usr/bin/python +# Copyright 2007 by Bdale Garbee . GPLv2 +# +# Program to emit PCB footprint for edge-launch SMA connector +# + +# dimensions in 1/100 mil from CONSMA003.062.pdf datasheet, modified to +# accomidate a wider range of new and surplus edge-launched SMA connectors +PinWidth = 6000 # the center pin +GndWidth = 13000 # the "side" pins for the gnd "wings" +PinHeight = 19000 +PinSpacing = PinWidth / 2 + 4000 + +import sys + +print '# author: Bdale Garbee' +print '# email: bdale@gag.com' +print '# dist-license: GPL 2' +print '# use-license: unlimited' + +print 'Element[0x0 "sma-edge" "" "" 0 0 0 0 0 0 0x0]' +print "(" + +print ' Pad[',\ + (-PinSpacing - GndWidth/2), \ + (GndWidth/2), \ + (-PinSpacing - GndWidth/2), \ + (PinHeight - GndWidth/2), \ + (GndWidth), \ + 0, \ + (GndWidth + 600), \ + '"pin2"', '"2"', '"square,nopaste"]' +print ' Pad[',\ + (-PinSpacing - GndWidth/2), \ + (GndWidth/2), \ + (-PinSpacing - GndWidth/2), \ + (PinHeight - GndWidth/2), \ + (GndWidth), \ + 0, \ + (GndWidth + 600), \ + '"pin2"', '"2"', '"onsolder,square,nopaste"]' +print ' Pad[',\ + 0, \ + (PinWidth/2), \ + 0, \ + (PinHeight - PinWidth/2), \ + (PinWidth), \ + 0, \ + (PinWidth + 600), \ + '"pin1"', '"1"', '"square,nopaste"]' +print ' Pad[',\ + (PinSpacing + GndWidth/2), \ + (GndWidth/2), \ + (PinSpacing + GndWidth/2), \ + (PinHeight - GndWidth/2), \ + (GndWidth), \ + 0, \ + (GndWidth + 600), \ + '"pin2"', '"2"', '"square,nopaste"]' +print ' Pad[',\ + (PinSpacing + GndWidth/2), \ + (GndWidth/2), \ + (PinSpacing + GndWidth/2), \ + (PinHeight - GndWidth/2), \ + (GndWidth), \ + 0, \ + (GndWidth + 600), \ + '"pin2"', '"2"', '"onsolder,square,nopaste"]' + +print ")"