From 31d0e5098bd52ebef466c102cfccc6335faa2032 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Mon, 18 Mar 2013 15:13:41 -0600 Subject: [PATCH] add lqfp footprint generators for STM parts --- packages/Makefile | 5 ++- packages/lqfp100.py | 105 ++++++++++++++++++++++++++++++++++++++++++++ packages/lqfp48.py | 105 ++++++++++++++++++++++++++++++++++++++++++++ packages/lqfp64.py | 105 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 319 insertions(+), 1 deletion(-) create mode 100755 packages/lqfp100.py create mode 100755 packages/lqfp48.py create mode 100755 packages/lqfp64.py diff --git a/packages/Makefile b/packages/Makefile index 08b46be..9278881 100644 --- a/packages/Makefile +++ b/packages/Makefile @@ -13,7 +13,10 @@ FOOTPRINTS= \ TDK_PS12.fp \ ABM3B.fp \ 1212-8.fp \ - AN3111.fp + AN3111.fp \ + lqfp48.fp \ + lqfp64.fp \ + lqfp100.fp .5c.fp: nickle $*.5c > $@ diff --git a/packages/lqfp100.py b/packages/lqfp100.py new file mode 100755 index 0000000..991570d --- /dev/null +++ b/packages/lqfp100.py @@ -0,0 +1,105 @@ +#!/usr/bin/python +# Copyright 2011 by Bdale Garbee . GPLv2 +# +# Program to emit PCB footprint for STM32L151 LQFP100 14 x 14 mm package +# + +# dimensions in mm from STM32L151 data sheet +PinWidth = 0.3 +PinHeight = 1.2 +PinResist = PinWidth + 0.16 +PinSpacing = 0.5 +BodySize = 14 +Overall = 16.7 + +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 "LQFP100" "" "" 0 0 0 0 0 100 0x0]' +print "(" + +# pins +for pin in range (1,26): + print ' Pad[',\ + mm2mils100((pin - 13) * PinSpacing), \ + mm2mils100(-Overall/2 + PinWidth/2), \ + mm2mils100((pin - 13) * PinSpacing), \ + mm2mils100(-Overall/2 + PinHeight - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (26-pin), '"%i"' % (26-pin), '0x0100]' + + print ' Pad[',\ + mm2mils100((pin - 13) * PinSpacing), \ + mm2mils100(+Overall/2 - PinHeight + PinWidth/2), \ + mm2mils100((pin - 13) * PinSpacing), \ + mm2mils100(+Overall/2 - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (50+pin), '"%i"' % (50+pin), '0x0100]' + + print ' Pad[',\ + mm2mils100(Overall/2 - PinHeight + PinWidth/2), \ + mm2mils100((pin - 13) * PinSpacing), \ + mm2mils100(Overall/2 - PinWidth/2), \ + mm2mils100((pin - 13) * PinSpacing), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (101-pin), '"%i"' % (101-pin), '0x0100]' + + print ' Pad[',\ + mm2mils100(-Overall/2 + PinWidth/2), \ + mm2mils100((pin - 13) * PinSpacing), \ + mm2mils100(-Overall/2 + PinHeight - PinWidth/2), \ + mm2mils100((pin - 13) * PinSpacing), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (25+pin), '"%i"' % (25+pin), '0x0100]' + + +print ' ElementLine[',\ + mm2mils100(-BodySize/2), \ + mm2mils100(-BodySize/2), \ + mm2mils100(-BodySize/2), \ + mm2mils100( BodySize/2), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100(-BodySize/2), \ + mm2mils100( BodySize/2), \ + mm2mils100( BodySize/2), \ + mm2mils100( BodySize/2), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100( BodySize/2), \ + mm2mils100( BodySize/2), \ + mm2mils100( BodySize/2), \ + mm2mils100(-BodySize/2), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100( BodySize/2), \ + mm2mils100(-BodySize/2), \ + mm2mils100(-BodySize/2), \ + mm2mils100(-BodySize/2), \ + '1000 ]' + + +print ' ElementArc[',\ + mm2mils100( (BodySize/2)+0.3), \ + mm2mils100(-((BodySize/2)+0.3)), \ + '500 500 0 360 1000 ]' +print ")" diff --git a/packages/lqfp48.py b/packages/lqfp48.py new file mode 100755 index 0000000..0b51e7b --- /dev/null +++ b/packages/lqfp48.py @@ -0,0 +1,105 @@ +#!/usr/bin/python +# Copyright 2012 by Bdale Garbee . GPLv2 +# +# Program to emit PCB footprint for STM32L151 LQFP48 7 x 7 mm package +# + +# dimensions in mm from STM32L151 data sheet +PinWidth = 0.3 +PinHeight = 1.2 +PinResist = PinWidth + 0.16 +PinSpacing = 0.5 +BodySize = 7.0 +Overall = 9.7 + +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 "LQFP100" "" "" 0 0 0 0 0 100 0x0]' +print "(" + +# pins +for pin in range (1,13): + print ' Pad[',\ + mm2mils100((pin - 6.5) * PinSpacing), \ + mm2mils100(-Overall/2 + PinWidth/2), \ + mm2mils100((pin - 6.5) * PinSpacing), \ + mm2mils100(-Overall/2 + PinHeight - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (13-pin), '"%i"' % (13-pin), '0x0100]' + + print ' Pad[',\ + mm2mils100((pin - 6.5) * PinSpacing), \ + mm2mils100(+Overall/2 - PinHeight + PinWidth/2), \ + mm2mils100((pin - 6.5) * PinSpacing), \ + mm2mils100(+Overall/2 - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (24+pin), '"%i"' % (24+pin), '0x0100]' + + print ' Pad[',\ + mm2mils100(Overall/2 - PinHeight + PinWidth/2), \ + mm2mils100((pin - 6.5) * PinSpacing), \ + mm2mils100(Overall/2 - PinWidth/2), \ + mm2mils100((pin - 6.5) * PinSpacing), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (49-pin), '"%i"' % (49-pin), '0x0100]' + + print ' Pad[',\ + mm2mils100(-Overall/2 + PinWidth/2), \ + mm2mils100((pin - 6.5) * PinSpacing), \ + mm2mils100(-Overall/2 + PinHeight - PinWidth/2), \ + mm2mils100((pin - 6.5) * PinSpacing), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (12+pin), '"%i"' % (12+pin), '0x0100]' + + +print ' ElementLine[',\ + mm2mils100(-BodySize/2), \ + mm2mils100(-BodySize/2), \ + mm2mils100(-BodySize/2), \ + mm2mils100( BodySize/2), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100(-BodySize/2), \ + mm2mils100( BodySize/2), \ + mm2mils100( BodySize/2), \ + mm2mils100( BodySize/2), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100( BodySize/2), \ + mm2mils100( BodySize/2), \ + mm2mils100( BodySize/2), \ + mm2mils100(-BodySize/2), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100( BodySize/2), \ + mm2mils100(-BodySize/2), \ + mm2mils100(-BodySize/2), \ + mm2mils100(-BodySize/2), \ + '1000 ]' + + +print ' ElementArc[',\ + mm2mils100( (BodySize/2)+0.3), \ + mm2mils100(-((BodySize/2)+0.3)), \ + '500 500 0 360 1000 ]' +print ")" diff --git a/packages/lqfp64.py b/packages/lqfp64.py new file mode 100755 index 0000000..be88d6b --- /dev/null +++ b/packages/lqfp64.py @@ -0,0 +1,105 @@ +#!/usr/bin/python +# Copyright 2011 by Bdale Garbee . GPLv2 +# +# Program to emit PCB footprint for STM32L151 LQFP100 14 x 14 mm package +# + +# dimensions in mm from STM32L151 data sheet +PinWidth = 0.3 +PinHeight = 1.2 +PinResist = PinWidth + 0.16 +PinSpacing = 0.5 +BodySize = 10 +Overall = 12.7 + +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 "LQFP100" "" "" 0 0 0 0 0 100 0x0]' +print "(" + +# pins +for pin in range (1,17): + print ' Pad[',\ + mm2mils100((pin - 8.5) * PinSpacing), \ + mm2mils100(-Overall/2 + PinWidth/2), \ + mm2mils100((pin - 8.5) * PinSpacing), \ + mm2mils100(-Overall/2 + PinHeight - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (17-pin), '"%i"' % (17-pin), '0x0100]' + + print ' Pad[',\ + mm2mils100((pin - 8.5) * PinSpacing), \ + mm2mils100(+Overall/2 - PinHeight + PinWidth/2), \ + mm2mils100((pin - 8.5) * PinSpacing), \ + mm2mils100(+Overall/2 - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (32+pin), '"%i"' % (32+pin), '0x0100]' + + print ' Pad[',\ + mm2mils100(Overall/2 - PinHeight + PinWidth/2), \ + mm2mils100((pin - 8.5) * PinSpacing), \ + mm2mils100(Overall/2 - PinWidth/2), \ + mm2mils100((pin - 8.5) * PinSpacing), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (65-pin), '"%i"' % (65-pin), '0x0100]' + + print ' Pad[',\ + mm2mils100(-Overall/2 + PinWidth/2), \ + mm2mils100((pin - 8.5) * PinSpacing), \ + mm2mils100(-Overall/2 + PinHeight - PinWidth/2), \ + mm2mils100((pin - 8.5) * PinSpacing), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinResist), \ + '"pin%i"' % (16+pin), '"%i"' % (16+pin), '0x0100]' + + +print ' ElementLine[',\ + mm2mils100(-BodySize/2), \ + mm2mils100(-BodySize/2), \ + mm2mils100(-BodySize/2), \ + mm2mils100( BodySize/2), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100(-BodySize/2), \ + mm2mils100( BodySize/2), \ + mm2mils100( BodySize/2), \ + mm2mils100( BodySize/2), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100( BodySize/2), \ + mm2mils100( BodySize/2), \ + mm2mils100( BodySize/2), \ + mm2mils100(-BodySize/2), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100( BodySize/2), \ + mm2mils100(-BodySize/2), \ + mm2mils100(-BodySize/2), \ + mm2mils100(-BodySize/2), \ + '1000 ]' + + +print ' ElementArc[',\ + mm2mils100( (BodySize/2)+0.3), \ + mm2mils100(-((BodySize/2)+0.3)), \ + '500 500 0 360 1000 ]' +print ")" -- 2.30.2