From 216abaa2036e551830b432ba50604ef5eba7d29f Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 2 Nov 2013 03:05:58 -0700 Subject: [PATCH] Add CR32 footprint for sumida inductors. Customize QFN32 for FTDI CR32 is the sumida series of large SMT wound inductors. The FTDI footprint has square pads instead of rounded ones; that makes cutting stencils at PSU a lot easier (it wrecks round pads somehow). Signed-off-by: Keith Packard --- packages/CR32.5c | 45 ++++++++++++++ packages/FTDI-QFN32.py | 136 +++++++++++++++++++++++++++++++++++++++++ packages/Makefile | 4 +- packages/TO39-4.fp | 33 ++++++++++ 4 files changed, 217 insertions(+), 1 deletion(-) create mode 100644 packages/CR32.5c create mode 100755 packages/FTDI-QFN32.py create mode 100644 packages/TO39-4.fp diff --git a/packages/CR32.5c b/packages/CR32.5c new file mode 100644 index 0000000..3a86bee --- /dev/null +++ b/packages/CR32.5c @@ -0,0 +1,45 @@ +/* + * Copyright © 2013 Keith Packard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +load "footprint.5c" +import Footprint; + +real land_width = 3.3; +real land_h_gap = 1.8; +real land_height = 4.0; +real land_v_gap = 1.8; + +real pad_width = (land_width - land_h_gap) / 2; +real pad_height = (land_height - land_v_gap) / 2; + +real pad_x_off = land_h_gap / 2 + pad_width / 2; + +real pad_y_off = land_v_gap / 2 + pad_height / 2; + +real package_width = 3.8; +real package_height = 3.5; + +element_start("CR32"); + +pad_mm(pad_x_off, -pad_y_off, pad_width, pad_height, "1", "1"); +pad_mm(pad_x_off, pad_y_off, pad_width, pad_height, "1", "1"); +pad_mm(-pad_x_off, pad_y_off, pad_width, pad_height, "2", "2"); +pad_mm(-pad_x_off, -pad_y_off, pad_width, pad_height, "2", "2"); + +rect(-package_width/2, -package_height/2, package_width, package_height); + +element_end(); diff --git a/packages/FTDI-QFN32.py b/packages/FTDI-QFN32.py new file mode 100755 index 0000000..568c7be --- /dev/null +++ b/packages/FTDI-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 FTDI FT232RQ +# + +# 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 "QFN32" "" "" 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), '"square"]' + + 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, '"square"]' + + 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), '"square"]' + + 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), '"square"]' + +print ' ElementArc[',\ + mm2mils100(-2.6), \ + mm2mils100(2.6), \ + '500 500 0 360 1000 ]' +print ")" diff --git a/packages/Makefile b/packages/Makefile index 494a055..2b6ad3c 100644 --- a/packages/Makefile +++ b/packages/Makefile @@ -53,7 +53,9 @@ FOOTPRINTS= \ linear-s8.fp \ PJ-037A.fp \ cx1vsm.fp \ - pklcs1212.fp + pklcs1212.fp \ + CR32.fp \ + FTDI-QFN32.fp .5c.fp: nickle $*.5c > $@ diff --git a/packages/TO39-4.fp b/packages/TO39-4.fp new file mode 100644 index 0000000..b66e0a9 --- /dev/null +++ b/packages/TO39-4.fp @@ -0,0 +1,33 @@ + Element["" "Transistor" "" "TO39" 18800 18800 6000 7000 0 100 ""] +( +# The JEDEC drawing shows a pin diameter of 16-21 mils +# +# +# ----- +# / 4 / +# TO39: | 3 1 | <-- bottom view (supposed to be a circle) +# \ 2 / +# ---- +# +# NOTE: some vendors, ST for example, number the pins +# differently. Here we follow the JEDEC drawing. +# +# the pins are arranged along a 200 mil diameter +# circle. The can outline is 315 to 335 mils (320 nom) +# for the top of the can and 350 to 370 mils (360 nom) +# for the bottom edge of thecan +# + Pin[0 -10000 5500 3000 6100 3500 "1" "1" "square"] + Pin[-10000 0 5500 3000 6100 3500 "2" "2" ""] + Pin[0 10000 5500 3000 6100 3500 "3" "3" ""] + Pin[10000 0 5500 3000 6100 3500 "4" "4" ""] +# tab is 29 to 40 mils long, 28 to 34 wide +# and comes off at an angle of 45 deg clockwise from +# pin 1 when looking at the top of the board + ElementLine [12700 -13900 14800 -16000 1000] + ElementLine [13300 -13300 15400 -15400 1000] + ElementLine [13900 -12700 16000 -14800 1000] + ElementLine [16000 -14800 14800 -16000 1000] +# x, y, width, height, start angle, delta angle, thickness + ElementArc [0 0 18300 18300 0 360 1000] + ) -- 2.47.2