From 6a242723fb7367db442e58f6f387ed19fab2c1ed Mon Sep 17 00:00:00 2001 From: Werner Almesberger Date: Tue, 29 May 2012 01:29:49 -0300 Subject: [PATCH] modules/qfp-gen.fpd: QFP modules generated from IPC-7351 formulas (WIP) Known issues: - the dimensions don't look quite right yet. Especially clearance between pads is insufficient. - results need rounding - the design is a bit too efficient for its own good: several measurements aren't possible. Maybe split sides into different frames. --- modules/qfp-gen.fpd | 84 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 modules/qfp-gen.fpd diff --git a/modules/qfp-gen.fpd b/modules/qfp-gen.fpd new file mode 100644 index 0000000..b050098 --- /dev/null +++ b/modules/qfp-gen.fpd @@ -0,0 +1,84 @@ +/* MACHINE-GENERATED ! */ + +frame land { + table + { dx, dy, n } + { 0, -1, i } + { 1, 0, i+N/4 } + { 0, 1, i+N/2 } + { -1, 0, i+3*N/4 } + + set side = e*(i-N/8-0.5) + + table + { sx, sy } + { side*-dy, side*dx } + + table + { ix, iy, ox, oy, wx, wy } + { Gmin/2*dx, Gmin/2*dy, Zmax/2*dx, Zmax/2*dy, Xmax*-dy, Xmax*dx } + + loop i = 1, N/4 + + __0: vec @(ix, iy) + __1: vec .(sx, sy) + __2: vec .(ox-ix, oy-iy) + __4: vec .(wx/2, wy/2) + __3: vec __1(-wx/2, -wy/2) + pad "?" . __4 + __5: vec @((ix+ox)/2, (iy+oy)/2) +} + +package "QFP$N-$pkg-$dens" +unit mm + +table + { pkg, N, Dmin, Dmax, D1max, Lmin, Lmax, e, narrow, bmin, bmax, b1min, b1max } + { "MS026BBA", 32, 8.9mm, 9.1mm, 7.1mm, 0.45mm, 0.75mm, 0.8mm, 0, 0.3mm, 0.45mm, 0.3mm, 0.4mm } + { "MS026BBC", 48, 8.9mm, 9.1mm, 7.1mm, 0.45mm, 0.75mm, 0.5mm, 1, 0.17mm, 0.27mm, 0.17mm, 0.23mm } + +table + { Dtol, Ltol } + { Dmax-Dmin, Lmax-Lmin } + +table + { Smin, Cs, Smax } + { Dmin-2*Lmax, sqrt(Dtol*Dtol+Ltol*Ltol), Smin+Cs } + +set Cl = Dmax-Dmin + +set Cw = b1max-b1min + +table + { dens, ?narrow, Jt, Jh, Js, Court } + { "A", 0, 0.55mm, 0.45mm, 0.05mm, 0.5mm } + { "B", 0, 0.35mm, 0.35mm, 0.03mm, 0.25mm } + { "C", 0, 0.15mm, 0.25mm, 0.01mm, 0.1mm } + { "A", 1, 0.55mm, 0.45mm, 0.01mm, 0.5mm } + { "B", 1, 0.35mm, 0.35mm, -0.02mm, 0.25mm } + { "C", 1, 0.15mm, 0.25mm, -0.04mm, 0.1mm } + +table + { ?narrow, Jt_round, Jh_round, Js_round } + { 0, 0.02mm, 0.02mm, 0.01mm } + { 1, 0.02mm, 0.1mm, 0.01mm } + +set pcb_tolerance = 0.1mm + +set placement_tolerance = 0.1mm + +table + { F, P } + { pcb_tolerance, placement_tolerance } + +set Zmax = Dmin+2*Jt+sqrt(Cl*Cl+F*F+P*P) + +set Gmin = Smax-2*Jh-sqrt(Cs*Cs+F*F+P*P) + +set Xmax = b1min+2*Js+sqrt(Cw*Cw+F*F+P*P) + +frame land @ +measy land.__2 -> land.__1 1mm +measy land.__0 >> land.__0 +measy land.__2 >> land.__4 4mm +measy land.__5 >> land.__5 6mm