Source code for jitxlib.landpatterns.twopin.SMT_table

# Two-pin SMT chip case sizes. Hand-maintained: cite a datasheet for every value you
# change. tests/test_smt_table.py pins the geometry these produce.
#
# * ``length`` is the terminal-to-terminal span. For reverse-geometry ("Wide") sizes
#   that is the SHORT body dimension and ``width`` is the long one.
# * ``lead_length`` is the termination band (IPC ``T``). It feeds Smax = Lmax - 2*Tmin,
#   so it sets pad length and the gap between pads. Where a vendor publishes two bands,
#   use the bottom/solderable one: Yageo ``l2``, Vishay ``T2``, KOA ``d``, Panasonic
#   ``b``.
# * ``lead_width`` equals ``width`` for every chip. The molded tantalum 2312/6032m is
#   the sole exception.
# * Where MLCCs and resistors share a case size, the MLCC band is used: its larger Tmin
#   gives the longer pad, which covers both. MLCCs do not exist at 2010 or above, nor
#   in the wide-terminal family.
# * Metric aliases use the rotated convention -- the same axis order as the imperial
#   code, as in Vishay's ``1218 | RR 3246M``. Do not "correct" 3263m to 6332m.

from dataclasses import dataclass, replace
from jitx.toleranced import Toleranced as tol


[docs] @dataclass(frozen=True) class SMTChipDef: name: str length: tol width: tol lead_length: tol lead_width: tol
_IMPERIAL: dict[str, SMTChipDef] = { # Yageo RC0075 (RC_L V.14), sole source for this size. "009005": SMTChipDef( "009005", tol(0.3, 0.01), tol(0.15, 0.01), tol(0.08, 0.03), tol(0.15, 0.01) ), # Yageo RC0100 / Vishay CRCW01005 / Panasonic ERJXG / KOA 1F. "01005": SMTChipDef( "01005", tol(0.4, 0.02), tol(0.2, 0.02), tol(0.1, 0.03), tol(0.2, 0.02) ), # Kyocera-AVX MLCC (t). "0201": SMTChipDef( "0201", tol(0.6, 0.03), tol(0.3, 0.03), tol(0.15, 0.05), tol(0.3, 0.03) ), # KOA WK73R1E, bottom electrode d. Reverse geometry. "0204": SMTChipDef( "0204", tol(0.5, 0.05), tol(1.0, 0.05), tol(0.15, 0.05), tol(1.0, 0.05) ), # KOA WK73R1J, bottom electrode d. Reverse geometry. "0306": SMTChipDef( "0306", tol(0.8, 0.1), tol(1.6, 0.1), tol(0.2, 0.1), tol(1.6, 0.1) ), # Kyocera-AVX MLCC (t). "0402": SMTChipDef( "0402", tol(1.0, 0.1), tol(0.5, 0.1), tol(0.25, 0.15), tol(0.5, 0.1) ), # Kyocera AVX AQ11 porcelain. "0505": SMTChipDef( "0505", tol(1.4, 0.38), tol(1.4, 0.38), tol(0.25, 0.15), tol(1.4, 0.38) ), # Yageo AC0508 wide terminal, I2. Panasonic ERJ-B3 says 0.40. "0508": SMTChipDef( "0508", tol(1.25, 0.15), tol(2.0, 0.15), tol(0.35, 0.2), tol(2.0, 0.15) ), # Kyocera-AVX MLCC (t), deliberately 0.05 above every resistor vendor. # Body stays 1.6 x 0.8 (IEC); Vishay alone says 1.55 x 0.85. "0603": SMTChipDef( "0603", tol(1.6, 0.15), tol(0.8, 0.15), tol(0.35, 0.15), tol(0.8, 0.15) ), # Yageo AC0612 wide terminal, I2. Panasonic ERJ-B2 says 0.50, Vishay RCL0612 0.35. "0612": SMTChipDef( "0612", tol(1.6, 0.2), tol(3.2, 0.2), tol(0.4, 0.15), tol(3.2, 0.2) ), # Kyocera-AVX MLCC (t). Width 1.25 is unanimous across 8 vendors. "0805": SMTChipDef( "0805", tol(2.0, 0.2), tol(1.25, 0.2), tol(0.5, 0.25), tol(1.25, 0.2) ), # Yageo AC1020 wide terminal, I2. Panasonic ERJ-B1 says 0.90; Vishay RCL1020's # 0.38 is a 2x low outlier and is not used. "1020": SMTChipDef( "1020", tol(2.5, 0.2), tol(5.0, 0.2), tol(0.75, 0.2), tol(5.0, 0.2) ), # Kyocera AVX AQ13 porcelain. Vishay VJ1111 says L = 2.98; AVX's 2.79 is kept. "1111": SMTChipDef( "1111", tol(2.79, 0.38), tol(2.79, 0.38), tol(0.38, 0.25), tol(2.79, 0.38) ), # Yageo RC1206 I2. Body stays 3.2 x 1.6 (IEC/EIA, and what 3216m decodes from); # Yageo alone says 3.10. "1206": SMTChipDef( "1206", tol(3.2, 0.2), tol(1.6, 0.2), tol(0.45, 0.2), tol(1.6, 0.2) ), # Kyocera-AVX MLCC (t). Width stays 2.5 (IEC); Yageo and KOA say 2.6. "1210": SMTChipDef( "1210", tol(3.2, 0.2), tol(2.5, 0.2), tol(0.5, 0.25), tol(2.5, 0.2) ), # Vishay CRCW1218 e3 (RR3246M), T1. Reverse geometry. "1218": SMTChipDef( "1218", tol(3.2, 0.1), tol(4.6, 0.15), tol(0.45, 0.2), tol(4.6, 0.15) ), # Vishay RCL1225 e3 (RR3263M), T1. Reverse geometry. "1225": SMTChipDef( "1225", tol(3.2, 0.2), tol(6.3, 0.2), tol(0.8, 0.2), tol(6.3, 0.2) ), # Ohmite FCSL76, blanket +/-0.20. Bottom-terminated; 1 mOhm variant band is 1.35. "1530": SMTChipDef( "1530", tol(3.8, 0.2), tol(7.6, 0.2), tol(0.6, 0.2), tol(7.6, 0.2) ), # Vishay VJ1808 MLCC, P midpoint. 4.57 = 0.180" is the EIA nominal. "1808": SMTChipDef( "1808", tol(4.57, 0.3), tol(2.03, 0.25), tol(0.575, 0.325), tol(2.03, 0.25) ), # KEMET C-series 1812/4532, B. "1812": SMTChipDef( "1812", tol(4.5, 0.3), tol(3.2, 0.3), tol(0.6, 0.35), tol(3.2, 0.3) ), # KEMET C-series 1825/4564, B. "1825": SMTChipDef( "1825", tol(4.5, 0.3), tol(6.4, 0.4), tol(0.6, 0.35), tol(6.4, 0.4) ), # Ohmite FCSL90, blanket +/-0.20. Bottom-terminated. "1835": SMTChipDef( "1835", tol(4.5, 0.2), tol(8.9, 0.2), tol(0.7, 0.2), tol(8.9, 0.2) ), # Metric 5020 MLCC size. Inherited from the original table, not datasheet-verified. "2008": SMTChipDef( "2008", tol(5.0, 0.2), tol(2.0, 0.2), tol(0.5, 0.2), tol(2.0, 0.2) ), # Yageo RC2010 (RC_L V.14), bottom band I2; Vishay CRCW2010 and Panasonic ERJ12Z # say 0.60 on both faces. Pre-V12 Yageo revisions are stale for this size. "2010": SMTChipDef( "2010", tol(5.0, 0.1), tol(2.5, 0.15), tol(0.55, 0.2), tol(2.5, 0.15) ), # Ohmite FCSL110, blanket +/-0.20. Wrap-around terminals, unlike 1530 and 1835. "2043": SMTChipDef( "2043", tol(5.0, 0.2), tol(11.0, 0.2), tol(0.8, 0.2), tol(11.0, 0.2) ), # KEMET C-series 2220/5650, B. Vishay VJ2220 agrees on the band but says 5.59 x # 5.08; KEMET's nominals are kept, and TDK C5750 agrees with them. "2220": SMTChipDef( "2220", tol(5.7, 0.4), tol(5.0, 0.4), tol(0.6, 0.35), tol(5.0, 0.4) ), # Vishay VJ2225 MLCC, P midpoint. KEMET says 5.60 x 6.40. "2225": SMTChipDef( "2225", tol(5.59, 0.25), tol(6.35, 0.25), tol(0.6, 0.35), tol(6.35, 0.25) ), # MOLDED TANTALUM, EIA case C / 6032-28 -- not a chip. Kyocera AVX TAJ / KEMET T491 # / Vishay 593D. lead_width 2.2 is the inset termination width (AVX W1), the one # row where it differs from width -- do not normalise it. This part's 2.5mm height # and polarity are not expressible in SMTChipDef. "2312": SMTChipDef( "2312", tol(6.0, 0.3), tol(3.2, 0.3), tol(1.3, 0.3), tol(2.2, 0.1) ), # Vishay CRCW2512 e3 (RR6332M), T1 = T2. Matches IPC's RESC6332X65 body descriptor. # Yageo RC2512 is the alternative: 6.35 +/-0.10 x 3.10 +/-0.15, same band. "2512": SMTChipDef( "2512", tol(6.3, 0.2), tol(3.15, 0.15), tol(0.6, 0.2), tol(3.15, 0.15) ), # Stackpole CSS2725, T1 = T2 for 5 of 8 resistance variants; the rest span # 1.30-1.80, which a single row cannot express. "2725": SMTChipDef( "2725", tol(6.81, 0.25), tol(6.45, 0.25), tol(2.16, 0.25), tol(6.45, 0.25) ), # Stackpole CSS2728 / CSSH2728, T1 = T2, same for every resistance value. "2728": SMTChipDef( "2728", tol(6.71, 0.25), tol(7.19, 0.25), tol(1.14, 0.25), tol(7.19, 0.25) ), # Vishay WSL2816, T over the 4-100 mOhm range; 2-3.99 mOhm parts use 2.49. "2816": SMTChipDef( "2816", tol(7.1, 0.254), tol(4.2, 0.254), tol(1.57, 0.254), tol(4.2, 0.254) ), # Stackpole CSRF2817, bottom termination; 3-4 mOhm parts use 1.10. TE/CGS Type 3540 # agrees on the body but states a 1.80 bottom band. "2817": SMTChipDef( "2817", tol(7.1, 0.2), tol(4.2, 0.2), tol(1.0, 0.3), tol(4.2, 0.2) ), # Ohmite FCSL150, blanket +/-0.20. Bottom-terminated. 7.5 x 15.0 mm = 0.295" x # 0.591", hence the imperial code 2959. "2959": SMTChipDef( "2959", tol(7.5, 0.2), tol(15.0, 0.2), tol(1.1, 0.2), tol(15.0, 0.2) ), # TT Electronics LRMAP3920, D. The only row where 2.0 +/-0.5 is correct -- do not # copy it to other sizes or "fix" it here. Bourns CSS2H-3920 uses a different # construction with a 0.43-1.20 sense terminal. "3920": SMTChipDef( "3920", tol(10.0, 0.3), tol(5.2, 0.3), tol(2.0, 0.5), tol(5.2, 0.3) ), } # Aliases, mainly metric. _ALIASES: dict[str, tuple[str, ...]] = { "009005": ("03015m",), "01005": ("0402m",), "0201": ("0603m",), "0204": ("0510m", "Wide 0402"), "0306": ("0816m", "Wide 0603"), "0402": ("1005m",), "0505": ("1414m",), "0508": ("1220m", "Wide 0805"), "0603": ("1608m",), "0612": ("1632m", "Wide 1206"), "0805": ("2012m",), "1020": ("2550m",), "1111": ("2828m",), "1206": ("3216m",), "1210": ("3225m",), "1218": ("3246m",), "1225": ("3263m", "Wide 2512"), "1530": ("3876m", "Wide 3015"), "1808": ("4520m",), "1812": ("4532m",), "1825": ("4564m",), "1835": ("4589m", "Wide 3518"), "2008": ("5020m",), "2010": ("5025m",), "2043": ("11050m", "Wide 4320"), "2220": ("5650m",), "2225": ("5664m",), "2312": ("6032m",), "2512": ("6332m",), # 6966m and 7071m do not decode from their dimensions and no source settles them; # DigiKey says 6863 and 7067. Left as-is. "2725": ("6966m",), "2728": ("7071m", "Wide 2827"), "2816": ("7142m",), "2817": ("7143m",), "2959": ("15075m", "Wide 5929"), "3920": ("10052m",), } SMT_CHIP_DEFS: dict[str, SMTChipDef] = { **_IMPERIAL, **{ alias: replace(row, name=alias) for name, row in _IMPERIAL.items() for alias in _ALIASES.get(name, ()) }, }