From 34076cbd100c360f508ffd78fda93c6475980ca8 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Sat, 19 Nov 2011 11:06:29 -0600 Subject: [PATCH] footprint generator for Freescale MMA6556, et al, that use AN3111.pdf specs --- pkg/newlib/AN3111.py | 141 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100755 pkg/newlib/AN3111.py diff --git a/pkg/newlib/AN3111.py b/pkg/newlib/AN3111.py new file mode 100755 index 0000000..b523a7b --- /dev/null +++ b/pkg/newlib/AN3111.py @@ -0,0 +1,141 @@ +#!/usr/bin/python +# Copyright 2007 by Bdale Garbee . GPLv2 +# +# Program to emit PCB footprint for 16-lead QFN, 6x6mm +# used by Freescale acceleromters like the MMA6556 +# + +# dimensions in mm from AN3111.pdf from Freescale, the Wettable Flank variant +PinWidth = 0.50 +PinHeight = 0.85 +PinSpacing = 1.00 +Overall = 6.0 +CoreSquare = 4.00 +CornerSquare = 0.55 +MaskAdd = 0.15 + +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 "AN3111" "" "" 0 0 0 0 0 100 0x0]' +print "(" +# pad under the chip, no overall paste so we can control subset that gets paste +print ' Pad[',\ + mm2mils100(0), \ + mm2mils100(0), \ + mm2mils100(0), \ + mm2mils100(0), \ + mm2mils100(CoreSquare), \ + mm2mils100(0), \ + mm2mils100(CoreSquare + MaskAdd), \ + '"G" "G" "square,nopaste"]' + +# copper sub-squares in a grid to set paste area +for viarow in range (-1, 2): + for viacol in range (-1, 2): + print ' Pad[',\ + mm2mils100(viacol * 1.4), \ + mm2mils100(viarow * 1.4), \ + mm2mils100(viacol * 1.4), \ + mm2mils100(viarow * 1.4), \ + mm2mils100(1.0), \ + 0, \ + mm2mils100(1.0), \ + '"G" "G" "square"]' + + +# corner mounting squares .. not connected to anything +print ' Pad[',\ + mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \ + mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \ + mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \ + mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \ + mm2mils100(CornerSquare), \ + mm2mils100(0), \ + mm2mils100(CornerSquare + MaskAdd), \ + '"NC" "NC" 0x0100]' + +print ' Pad[',\ + mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \ + mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \ + mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \ + mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \ + mm2mils100(CornerSquare), \ + mm2mils100(0), \ + mm2mils100(CornerSquare + MaskAdd), \ + '"NC" "NC" 0x0100]' + +print ' Pad[',\ + mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \ + mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \ + mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \ + mm2mils100(CoreSquare/2 + 0.37 + CornerSquare/2), \ + mm2mils100(CornerSquare), \ + mm2mils100(0), \ + mm2mils100(CornerSquare + MaskAdd), \ + '"NC" "NC" 0x0100]' + +print ' Pad[',\ + mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \ + mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \ + mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \ + mm2mils100(-(CoreSquare/2 + 0.37 + CornerSquare/2)), \ + mm2mils100(CornerSquare), \ + mm2mils100(0), \ + mm2mils100(CornerSquare + MaskAdd), \ + '"NC" "NC" 0x0100]' + +for pin in range (1,5): + print ' Pad[',\ + mm2mils100(-2.5 + pin * PinSpacing), \ + mm2mils100(-Overall/2 - 0.30 + PinWidth/2), \ + mm2mils100(-2.5 + pin * PinSpacing), \ + mm2mils100(-Overall/2 + 0.55 - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(0), \ + mm2mils100(PinWidth + MaskAdd), \ + '"pin%i"' % (13-pin), '"%i"' % (13-pin), '0x0100]' + + print ' Pad[',\ + mm2mils100(-2.5 + pin * PinSpacing), \ + mm2mils100(+Overall/2 - 0.55 + PinWidth/2), \ + mm2mils100(-2.5 + pin * PinSpacing), \ + mm2mils100(+Overall/2 + 0.30 - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(0), \ + mm2mils100(PinWidth + MaskAdd), \ + '"pin%i"' % pin, '"%i"' % pin, '0x0100]' + + print ' Pad[',\ + mm2mils100(Overall/2 - 0.55 + PinWidth/2), \ + mm2mils100(-2.5 + pin * PinSpacing), \ + mm2mils100(Overall/2 + 0.30 - PinWidth/2), \ + mm2mils100(-2.5 + pin * PinSpacing), \ + mm2mils100(PinWidth), \ + mm2mils100(0), \ + mm2mils100(PinWidth + MaskAdd), \ + '"pin%i"' % (9-pin), '"%i"' % (9-pin), '0x0100]' + + print ' Pad[',\ + mm2mils100(-Overall/2 - 0.30 + PinWidth/2), \ + mm2mils100(-2.5 + pin * PinSpacing), \ + mm2mils100(-Overall/2 + 0.55 - PinWidth/2), \ + mm2mils100(-2.5 + pin * PinSpacing), \ + mm2mils100(PinWidth), \ + mm2mils100(0), \ + mm2mils100(PinWidth + MaskAdd), \ + '"pin%i"' % (12+pin), '"%i"' % (12+pin), '0x0100]' + +print ' ElementArc[',\ + mm2mils100(-3.2), \ + mm2mils100(3.2), \ + '500 500 0 360 1000 ]' +print ")" -- 2.30.2