steve/leaded-inductor
Axial leaded inductor, Fastron fixed choke coils (MICC, SMCC, MECC, HCCC, LACC, HBCC, VHBCC, XHBCC) and suppression coils (MISC, MESC, 77A), Vishay Dale molded IM-1 to IM-10, horizontal or vertical.
Through-hole transistor packages standing on the board: TO-220AB, TO-220AC, TO-247AC TO-92 (straight leads) and the TO-18 metal can, from Vishay's and TI's package drawings.
| 1 | """Through-hole transistor packages standing on the board: TO-220AB (3 leads), TO-220AC (2 leads), TO-247AC (3 leads) and TO-92 (straight |
| 2 | leads). Lead 1 is at the origin, the leads run along +X, the moulded front faces -Y (TO-92: the flat face) and the metal tab or pad is at the |
| 3 | back (+Y). The board is the XY plane: the leads' shoulders (TO-92: the seating plane) rest on it and the leads go down through it. |
| 4 | Dimensions from the makers' package drawings, listed in the README.""" |
| 5 | from steve import Model |
| 6 | import math |
| 7 | |
| 8 | package = "TO-220AB" # TO-220AB, TO-220AC, TO-247AC, TO-92, TO-18 or TO-18-2 |
| 9 | detail = "full" # full: body, tab and leads; simple: the body and tab only |
| 10 | |
| 11 | # Vishay Siliconix, "TO-220AB (High Voltage)", Package Information, document 92506, revision 30-Sep-2024 (DWG 6031), page 2 table; and |
| 12 | # Vishay Semiconductors, "TO-220AC", Outline Dimensions, document 95221, revision 16-Jan-2026, table: (min, max) in mm, the model uses the |
| 13 | # middle of each. A body+tab thickness, A1 tab thickness, A2 lead's back face to the tab's back, b lead width, b2 shoulder width, |
| 14 | # c lead thickness, D overall height, D1 moulded body height, D2 metal on the back (from the top), E width, E1 back metal width, E2 tab notch |
| 15 | # depth, e1 lead 1 to the last lead, H1 tab above the body, L lead length, L1 shoulder length, P hole diameter, Q hole centre below the top. |
| 16 | TO220AB = dict(A=(4.25, 4.65), A1=(1.20, 1.34), A2=(2.563, 2.92), b=(0.71, 0.91), b2=(1.14, 1.78), c=(0.46, 0.61), D=(14.32, 15.86), |
| 17 | D1=(8.39, 8.79), D2=(12.20, 12.80), E=(9.96, 10.36), E1=(8.14, 8.74), E2=(0.59, 0.69), e1=(5.08, 5.08), H1=(6.30, 6.70), |
| 18 | L=(13.40, 14.40), L1=(3.65, 4.05), P=(3.60, 3.80), Q=(2.54, 2.94)) |
| 19 | TO220AC = dict(A=(4.25, 4.65), A1=(1.14, 1.40), A2=(2.56, 2.92), b=(0.69, 1.01), b2=(1.20, 1.73), c=(0.36, 0.61), D=(14.85, 15.25), |
| 20 | D1=(8.38, 9.02), D2=(11.68, 12.88), E=(10.11, 10.51), E1=(6.86, 8.89), E2=(0.76, 0.76), e1=(4.88, 5.28), H1=(5.84, 6.86), |
| 21 | L=(13.52, 14.02), L1=(3.32, 3.82), P=(3.54, 3.73), Q=(2.60, 3.00)) |
| 22 | # Vishay Siliconix, "TO-247AC (High Voltage)", Package Information, document 91360, revision 07-Sep-2026, version 1 (facility code 9), |
| 23 | # table (nominal) in mm: A body thickness, A1 back face to the leads' back face, A2 exposed copper (drawn at the back face), b lead width, |
| 24 | # b2 outer shoulders, b4 middle shoulder, c lead thickness, D height, D1 x E1 the exposed copper, D2 its top below the top, E width, E2 side |
| 25 | # slot width, e pitch, L lead length, L1 shoulder length, P hole diameter, P1 copper ring round the hole (ref), Q hole and slots below the top. |
| 26 | TO247AC = dict(A=5.02, A1=2.41, A2=1.27, b=1.20, b2=2.00, b4=3.00, c=0.50, D=20.55, D1=16.76, D2=0.66, E=15.70, E1=14.02, E2=4.91, |
| 27 | e=5.46, L=15.15, L1=4.06, P=3.61, P1=7.19, Q=5.50) |
| 28 | # Texas Instruments, LP0003A "TO-92 - 5.34 mm max height", drawing 4215214/C 04/2025 (ti.com/lit/pdf/msot002), straight lead option: |
| 29 | # (min, max) in mm, the model uses the middle: W body width, H body height, T body depth (round back to flat face), K round back to the leads' |
| 30 | # centre line, F flat face width (min), b lead width, c lead thickness, e pitch (1.27 +/-0.13), L lead length (12.7 min), S the seating plane |
| 31 | # below the body ((1.5) typical, reference). |
| 32 | TO92 = dict(W=(4.44, 5.21), H=(4.32, 5.34), T=(3.17, 4.19), K=(2.03, 2.67), F=(3.43, 3.43), b=(0.38, 0.55), c=(0.35, 0.43), e=(1.27, 1.27), |
| 33 | L=(12.7, 12.7), S=(1.5, 1.5)) |
| 34 | # Central Semiconductor, "Package Details - TO-18" (REV: R1; R0 21-June 2004) and "TO-18 2-Lead Case" (REV: R0; 13-March 2013), table |
| 35 | # (min, max) in mm, the model uses the middle (C: its max, the only value; E: 12.70 min): A flange Ø, B can Ø, C flange thickness, D height, |
| 36 | # E lead length, F lead Ø, G lead circle Ø (3 leads) or lead spacing (2 leads), H lead 2 off the line of leads 1 and 3, I tab width, |
| 37 | # J tab length (read as beyond the flange's edge); the tab is at 45 deg, beside lead 1. |
| 38 | TO18 = dict(A=(5.31, 5.84), B=(4.52, 4.95), C=(0.76, 0.76), D=(4.32, 5.33), E=(12.70, 12.70), F=(0.41, 0.48), G=(2.54, 2.54), H=(1.27, 1.27), |
| 39 | I=(0.91, 1.17), J=(0.71, 1.22)) |
| 40 | # Proportions, for looks (README): the TO-220 tab's side notches are 1.4 high, from 1.4 to 2.8 below the top (as drawn); the TO-220AC's cut-off middle lead isn't |
| 41 | # modelled; the TO-247's side slots are half-round (Ø E2) and the copper ring P1 isn't modelled; the TO-92's flat face is cut from a round body |
| 42 | # W across; every lead's shoulder narrows to the lead in one step. |
| 43 | NOTCH = (1.4, 2.8) |
| 44 | |
| 45 | if package not in ("TO-220AB", "TO-220AC", "TO-247AC", "TO-92", "TO-18", "TO-18-2"): |
| 46 | raise ValueError("package: TO-220AB, TO-220AC, TO-247AC, TO-92, TO-18 or TO-18-2") |
| 47 | |
| 48 | |
| 49 | def mid(table): |
| 50 | return {k: (v[0] + v[1]) / 2 if isinstance(v, tuple) else v for k, v in table.items()} |
| 51 | |
| 52 | |
| 53 | model = Model() |
| 54 | |
| 55 | |
| 56 | def box(fid, x0, x1, y0, y1, z0, z1, body, op, name): |
| 57 | model.plane(f"{fid}_plane", on="XY", offset=z0, name=name) |
| 58 | with model.sketch(f"{fid}_sketch", on=f"{fid}_plane", name=name) as sk: |
| 59 | sk.rect(f"{fid}_rect", (x0, y0), (x1, y1)) |
| 60 | model.extrude(fid, f"{fid}_sketch", distance=z1 - z0, op=op, body=body, name=name) |
| 61 | |
| 62 | |
| 63 | def through_y(fid, profile, y0, y1, body, op, name): |
| 64 | """A prism of `profile` (x, z points, or a circle (x, z, r)) from y0 to y1 (y0 > y1: an XZ plane at y0 extrudes along -Y).""" |
| 65 | model.plane(f"{fid}_plane", on="XZ", offset=-y0, name=name) |
| 66 | with model.sketch(f"{fid}_sketch", on=f"{fid}_plane", name=name) as sk: |
| 67 | if len(profile) == 3 and not isinstance(profile[0], tuple): |
| 68 | sk.circle(f"{fid}_circle", (profile[0], profile[1]), profile[2]) |
| 69 | else: |
| 70 | sk.polyline(f"{fid}_outline", profile, closed=True) |
| 71 | model.extrude(fid, f"{fid}_sketch", distance=y0 - y1, op=op, body=body, name=name) |
| 72 | |
| 73 | |
| 74 | def leads(xs, b, c, L, shoulder, widths, top): |
| 75 | """Each lead: its shoulder (width from `widths`) from the body's underside `top` down `shoulder`, then the lead (b x c) to L below it.""" |
| 76 | model.plane("leads_plane", on="XY", offset=top - L, name="Leads") |
| 77 | with model.sketch("leads_sketch", on="leads_plane", name="Leads") as sk: |
| 78 | for i, x in enumerate(xs): |
| 79 | sk.rect(f"lead_{i}", (x - b / 2, -c / 2), (x + b / 2, c / 2)) |
| 80 | model.extrude("leads", "leads_sketch", distance=L - shoulder, op="new", body="leads_body", name="Leads") |
| 81 | model.plane("shoulders_plane", on="XY", offset=top - shoulder, name="Lead shoulders") |
| 82 | with model.sketch("shoulders_sketch", on="shoulders_plane", name="Lead shoulders") as sk: |
| 83 | for i, (x, w) in enumerate(zip(xs, widths)): |
| 84 | sk.rect(f"shoulder_{i}", (x - w / 2, -c / 2), (x + w / 2, c / 2)) |
| 85 | model.extrude("shoulders", "shoulders_sketch", distance=shoulder, op="join", body="leads_body", name="Lead shoulders") |
| 86 | |
| 87 | |
| 88 | bodies = {} |
| 89 | if package in ("TO-220AB", "TO-220AC"): |
| 90 | t = mid(TO220AB if package == "TO-220AB" else TO220AC) |
| 91 | xs = [0.0, t["e1"] / 2, t["e1"]] if package == "TO-220AB" else [0.0, t["e1"]] |
| 92 | cx = t["e1"] / 2 |
| 93 | back = t["c"] / 2 + t["A2"] |
| 94 | front = back - t["A"] |
| 95 | z0 = t["L1"] # the shoulders rest on the board |
| 96 | top = z0 + t["D"] |
| 97 | E, E1 = t["E"], t["E1"] |
| 98 | # Moulded body, with the back recessed where the metal shows (E1 wide, from the body's top down to D2 below the package's top). |
| 99 | box("body", cx - E / 2, cx + E / 2, front, back, z0, z0 + t["D1"], "body_body", "new", "Body") |
| 100 | box("back_recess", cx - E1 / 2, cx + E1 / 2, back - t["A1"], back, top - t["D2"], z0 + t["D1"], "body_body", "cut", "Back metal recess") |
| 101 | # Metal tab: E wide above the body, E1 wide down the back; side notches E2 deep at the hole; the hole P at Q below the top. |
| 102 | box("tab", cx - E / 2, cx + E / 2, back - t["A1"], back, z0 + t["D1"], top, "tab_body", "new", "Tab") |
| 103 | box("tab_back", cx - E1 / 2, cx + E1 / 2, back - t["A1"], back, top - t["D2"], z0 + t["D1"], "tab_body", "join", "Tab") |
| 104 | zq = top - t["Q"] |
| 105 | for side, x0 in (("left", cx - E / 2), ("right", cx + E / 2 - t["E2"])): |
| 106 | box(f"notch_{side}", x0, x0 + t["E2"], back - t["A1"], back, top - NOTCH[1], top - NOTCH[0], "tab_body", "cut", "Tab notch") |
| 107 | through_y("tab_hole", (cx, zq, t["P"] / 2), back + 0.1, back - t["A1"] - 0.1, "tab_body", "cut", "Mounting hole") |
| 108 | bodies = {"body_body": ("pa6", "#1c1c1e"), "tab_body": ("copper", "#c8ccd0")} |
| 109 | if detail == "full": |
| 110 | leads(xs, t["b"], t["c"], t["L"], t["L1"], [t["b2"]] * len(xs), z0) |
| 111 | elif package == "TO-247AC": |
| 112 | t = TO247AC |
| 113 | xs = [0.0, t["e"], 2 * t["e"]] |
| 114 | cx = t["e"] |
| 115 | back = t["c"] / 2 + t["A1"] |
| 116 | front = back - t["A"] |
| 117 | z0 = t["L1"] |
| 118 | top = z0 + t["D"] |
| 119 | E = t["E"] |
| 120 | box("body", cx - E / 2, cx + E / 2, front, back, z0, top, "body_body", "new", "Body") |
| 121 | zq = top - t["Q"] |
| 122 | for side, x in (("left", cx - E / 2), ("right", cx + E / 2)): |
| 123 | through_y(f"slot_{side}", (x, zq, t["E2"] / 2), back + 0.1, front - 0.1, "body_body", "cut", "Side slot") |
| 124 | # Exposed copper on the back, flush: D1 x E1 from D2 below the top, A2 thick, with the hole through it. |
| 125 | box("pad_recess", cx - t["E1"] / 2, cx + t["E1"] / 2, back - t["A2"], back, top - t["D2"] - t["D1"], top - t["D2"], "body_body", "cut", "Copper recess") |
| 126 | box("pad", cx - t["E1"] / 2, cx + t["E1"] / 2, back - t["A2"], back, top - t["D2"] - t["D1"], top - t["D2"], "pad_body", "new", "Exposed copper") |
| 127 | through_y("hole", (cx, zq, t["P"] / 2), back + 0.1, front - 0.1, "body_body", "cut", "Mounting hole") |
| 128 | through_y("pad_hole", (cx, zq, t["P"] / 2), back + 0.1, front - 0.1, "pad_body", "cut", "Mounting hole") |
| 129 | for side, x in (("left", cx - E / 2), ("right", cx + E / 2)): |
| 130 | through_y(f"pad_slot_{side}", (x, zq, t["E2"] / 2), back + 0.1, front - 0.1, "pad_body", "cut", "Side slot") |
| 131 | bodies = {"body_body": ("pa6", "#1c1c1e"), "pad_body": ("copper", "#c8ccd0")} |
| 132 | if detail == "full": |
| 133 | leads(xs, t["b"], t["c"], t["L"], t["L1"], [t["b2"], t["b4"], t["b2"]], z0) |
| 134 | elif package in ("TO-18", "TO-18-2"): |
| 135 | # Metal can: the flange (header) on the board, the can on it; leads on a circle round the axis (lead 1 at the origin, lead 3 or lead 2 |
| 136 | # at +X by G, the 3-lead part's lead 2 H off that line along -Y); the tab at 45 deg toward -X +Y, beside lead 1. |
| 137 | t = mid(TO18) |
| 138 | cx = t["G"] / 2 |
| 139 | xs = [(0.0, 0.0), (t["G"], 0.0)] if package == "TO-18-2" else [(0.0, 0.0), (cx, -t["H"]), (t["G"], 0.0)] |
| 140 | model.plane("flange_plane", on="XY", offset=0.0, name="Flange") |
| 141 | with model.sketch("flange_sketch", on="flange_plane", name="Flange") as sk: |
| 142 | sk.circle("flange_round", (cx, 0.0), t["A"] / 2) |
| 143 | u = (-math.sqrt(0.5), math.sqrt(0.5)) |
| 144 | v = (u[1], -u[0]) |
| 145 | r0, r1, w = t["A"] / 2 - 0.3, t["A"] / 2 + t["J"], t["I"] / 2 |
| 146 | sk.polyline("tab_outline", [(cx + u[0] * r + v[0] * s, u[1] * r + v[1] * s) for r, s in ((r0, -w), (r1, -w), (r1, w), (r0, w))], closed=True) |
| 147 | model.extrude("flange", "flange_sketch", distance=t["C"], op="new", body="header_body", name="Flange and tab") |
| 148 | model.plane("can_plane", on="XY", offset=t["C"], name="Can") |
| 149 | with model.sketch("can_sketch", on="can_plane", name="Can") as sk: |
| 150 | sk.circle("can_round", (cx, 0.0), t["B"] / 2) |
| 151 | model.extrude("can", "can_sketch", distance=t["D"] - t["C"], op="new", body="can_body", name="Can") |
| 152 | bodies = {"header_body": ("nickel", "#c9ccd1"), "can_body": ("steel-dc01", "#d5d8dc")} |
| 153 | if detail == "full": |
| 154 | model.plane("leads_plane", on="XY", offset=-t["E"], name="Leads") |
| 155 | with model.sketch("leads_sketch", on="leads_plane", name="Leads") as sk: |
| 156 | for i, (x, y) in enumerate(xs): |
| 157 | sk.circle(f"lead_{i}", (x, y), t["F"] / 2) |
| 158 | model.extrude("leads", "leads_sketch", distance=t["E"], op="new", body="leads_body", name="Leads") |
| 159 | else: |
| 160 | t = mid(TO92) |
| 161 | xs = [0.0, t["e"], 2 * t["e"]] |
| 162 | cx = t["e"] |
| 163 | R = t["W"] / 2 |
| 164 | yc = t["K"] - R # the round body's axis: K from the round back to the leads, so the back is at +K |
| 165 | flat = t["K"] - t["T"] # the flat face (-Y) |
| 166 | z0 = t["S"] |
| 167 | n = 24 |
| 168 | a0 = math.asin(max(-1.0, min(1.0, (flat - yc) / R))) |
| 169 | pts = [(cx + R * math.cos(a), yc + R * math.sin(a)) for a in (a0 + (math.pi - 2 * a0) * k / n for k in range(n + 1))] |
| 170 | model.plane("body_plane", on="XY", offset=z0, name="Body") |
| 171 | with model.sketch("body_sketch", on="body_plane", name="Body") as sk: |
| 172 | sk.polyline("body_outline", [(cx + R * math.cos(a0), flat)] + pts[1:-1] + [(cx - R * math.cos(a0), flat)], closed=True) |
| 173 | model.extrude("body", "body_sketch", distance=t["H"], op="new", body="body_body", name="Body") |
| 174 | bodies = {"body_body": ("pa6", "#1c1c1e")} |
| 175 | if detail == "full": |
| 176 | model.plane("leads_plane", on="XY", offset=z0 - t["L"], name="Leads") |
| 177 | with model.sketch("leads_sketch", on="leads_plane", name="Leads") as sk: |
| 178 | for i, x in enumerate(xs): |
| 179 | sk.rect(f"lead_{i}", (x - t["b"] / 2, -t["c"] / 2), (x + t["b"] / 2, t["c"] / 2)) |
| 180 | model.extrude("leads", "leads_sketch", distance=t["L"], op="new", body="leads_body", name="Leads") |
| 181 | if detail == "full": |
| 182 | bodies["leads_body"] = ("nickel", "#d8c58a") if package.startswith("TO-18") else ("copper", "#c9ccd1") |
| 183 | # Materials, for looks and a rough mass: the moulding is epoxy (nylon, PA6, the nearest in the list), the tab and pad copper (nickel or tin |
| 184 | # plated), the leads tinned copper. TO-18 (Central's material sheets): the header and leads Kovar (density 8.36; nickel, 8.9, is the nearest |
| 185 | # in the list), the can a nickel-plated iron alloy (steel). |
| 186 | for body, (material, colour) in bodies.items(): |
| 187 | model.material(material, bodies=[body], color=colour) |
| 188 | result = model.result() |
| 189 |
| 1 | name = "steve/to-package" |
| 2 | version = "1.0.0" |
| 3 | runtime = "steve" |
| 4 | license = "MIT" |
| 5 | summary = "Through-hole transistor packages standing on the board: TO-220AB, TO-220AC, TO-247AC TO-92 (straight leads) and the TO-18 metal can, from Vishay's and TI's package drawings." |
| 6 | description = """A through-hole transistor, regulator or diode package standing on the board, from the maker's package drawing: TO-220AB (3 leads) and TO-220AC (2 leads) with the metal tab and its hole, TO-247AC with its exposed copper and side slots, TO-92 with straight leads, and the TO-18 metal can with 2 or 3 leads. Lead 1 at the origin, the leads along +X, the moulded front toward -Y. See the README.""" |
| 7 | tags = ["to-220", "to-247", "to-92", "to-18", "transistor", "package", "through-hole", "electronics"] |
| 8 | |
| 9 | [parameters.package] |
| 10 | type = "choice" |
| 11 | default = "TO-220AB" |
| 12 | choices = ["TO-220AB", "TO-220AC", "TO-247AC", "TO-92", "TO-18", "TO-18-2"] |
| 13 | label = "Package" |
| 14 | description = "TO-220AB: 3 leads at 2.54. TO-220AC: 2 leads 5.08 apart. TO-247AC: 3 leads at 5.46. TO-92: 3 straight leads at 1.27. TO-18: metal can, 3 leads on a 2.54 circle; TO-18-2: 2 leads 2.54 apart." |
| 15 | |
| 16 | [parameters.detail] |
| 17 | type = "choice" |
| 18 | default = "full" |
| 19 | choices = ["full", "simple"] |
| 20 | label = "Detail" |
| 21 | description = "full: body, tab and leads. simple: the body and tab only, for big assemblies." |
| 22 | |
| 23 | [[presets]] |
| 24 | id = "TO-220AB" |
| 25 | title = "TO-220AB, 3 leads, 2.54 pitch, vertical (Vishay outline)" |
| 26 | params = { package = "TO-220AB" } |
| 27 | aliases = ["TO-220-3", "TO-220", "TO-220AB", "JEDEC TO-220AB", "TO220 3 lead"] |
| 28 | standard = "Vishay TO-220AB" |
| 29 | |
| 30 | [[presets]] |
| 31 | id = "TO-220AC" |
| 32 | title = "TO-220AC, 2 leads, 5.08 apart, vertical (Vishay outline)" |
| 33 | params = { package = "TO-220AC" } |
| 34 | aliases = ["TO-220-2", "TO-220AC", "JEDEC TO-220AC", "TO220 2 lead"] |
| 35 | standard = "Vishay TO-220AC" |
| 36 | |
| 37 | [[presets]] |
| 38 | id = "TO-247AC" |
| 39 | title = "TO-247AC, 3 leads, 5.46 pitch, vertical (Vishay outline)" |
| 40 | params = { package = "TO-247AC" } |
| 41 | aliases = ["TO-247-3", "TO-247", "TO-247AC", "JEDEC TO-247AC", "TO247 3 lead"] |
| 42 | standard = "Vishay TO-247AC" |
| 43 | |
| 44 | [[presets]] |
| 45 | id = "TO-92" |
| 46 | title = "TO-92, 3 straight leads, 1.27 pitch (TI LP0003A)" |
| 47 | params = { package = "TO-92" } |
| 48 | aliases = ["TO-92-3", "TO-92", "TO-226AA", "JEDEC TO-226AA", "TO92 straight leads", "LP0003A", "TO-92, 3 straight leads, 1.27 pitch (TI LP0003A)"] |
| 49 | standard = "TI LP0003A" |
| 50 | |
| 51 | [[presets]] |
| 52 | id = "TO-18" |
| 53 | title = "TO-18 metal can, 3 leads (Central Semiconductor outline)" |
| 54 | params = { package = "TO-18" } |
| 55 | aliases = ["TO-18-3", "TO-18", "TO-206AA", "JEDEC TO-206AA", "TO18 metal can 3 lead"] |
| 56 | standard = "Central TO-18" |
| 57 | |
| 58 | [[presets]] |
| 59 | id = "TO-18-2" |
| 60 | title = "TO-18 metal can, 2 leads (Central Semiconductor outline)" |
| 61 | params = { package = "TO-18-2" } |
| 62 | aliases = ["TO-18-2", "TO-18 2 lead", "TO18 metal can 2 lead"] |
| 63 | standard = "Central TO-18 2-lead" |
| 64 | |
| 65 | [[presets]] |
| 66 | id = "TO-220AB-simple" |
| 67 | title = "TO-220AB, 3 leads, 2.54 pitch, vertical (Vishay outline), simple" |
| 68 | params = { package = "TO-220AB", detail = "simple" } |
| 69 | aliases = ["TO-220AB simple"] |
| 70 | standard = "Vishay TO-220AB" |
| 71 |
A through-hole transistor, regulator or diode package standing on the board, built from the maker's package drawing. These are the JEDEC outlines that every maker builds:
package |
Leads | Body (W x thickness x height) | Source |
|---|---|---|---|
TO-220AB |
3, 2.54 pitch | 10.16 x 4.45 x 15.09 (tab included) | Vishay Siliconix 92506 |
TO-220AC |
2, 5.08 apart | 10.31 x 4.45 x 15.05 (tab included) | Vishay Semiconductors 95221 |
TO-247AC |
3, 5.46 pitch | 15.70 x 5.02 x 20.55 | Vishay Siliconix 91360 |
TO-92 |
3 straight, 1.27 pitch | 4.83 x 3.68 x 4.83 | TI LP0003A |
TO-18 |
3, on a Ø 2.54 circle | flange Ø 5.58, can Ø 4.74, 4.83 high | Central Semiconductor TO-18 |
TO-18-2 |
2, 2.54 apart | as TO-18 |
Central Semiconductor TO-18 2-Lead |
Lead 1 is at the origin and the leads run along +X. The moulded front faces -Y (on the TO-92, the flat face), and the metal tab or exposed copper is at the back (+Y).
detail = "simple" leaves out the leads.
Each table gives a minimum and a maximum. The part uses the middle of the two, except where noted. part.py holds every table as read.
How the letters are read:
Proportions, for looks only. The drawings show these but don't dimension them:
The reference models were measured against the drawings, and each falls inside the drawing's tolerances:
The reference models stand their bodies at different heights above the board: the TO-92 at 2.5 and the TO-18 at about 5. The drawings don't give these, so this part uses the drawings' own seating.
So these map: TO-220-3_Vertical (TO-220AB), TO-220-2_Vertical (TO-220AC), TO-247-3_Vertical (TO-247AC), TO-92 and TO-92_Inline (TO-92), TO-18-3 (TO-18) and TO-18-2 (TO-18-2).
These stay "no table read yet" (COVERAGE.md):
_Wide). TI's formed leads are 2.4 to 2.9 apart, with a land pattern of 2.6.| 1 | # TO package (through-hole) |
| 2 | |
| 3 | A through-hole transistor, regulator or diode package standing on the board, built from the maker's package drawing. These are the JEDEC outlines that every maker builds: |
| 4 | |
| 5 | | `package` | Leads | Body (W x thickness x height) | Source | |
| 6 | |---|---|---|---| |
| 7 | | `TO-220AB` | 3, 2.54 pitch | 10.16 x 4.45 x 15.09 (tab included) | Vishay Siliconix 92506 | |
| 8 | | `TO-220AC` | 2, 5.08 apart | 10.31 x 4.45 x 15.05 (tab included) | Vishay Semiconductors 95221 | |
| 9 | | `TO-247AC` | 3, 5.46 pitch | 15.70 x 5.02 x 20.55 | Vishay Siliconix 91360 | |
| 10 | | `TO-92` | 3 straight, 1.27 pitch | 4.83 x 3.68 x 4.83 | TI LP0003A | |
| 11 | | `TO-18` | 3, on a Ø 2.54 circle | flange Ø 5.58, can Ø 4.74, 4.83 high | Central Semiconductor TO-18 | |
| 12 | | `TO-18-2` | 2, 2.54 apart | as `TO-18` | Central Semiconductor TO-18 2-Lead | |
| 13 | |
| 14 | Lead 1 is at the origin and the leads run along +X. The moulded front faces -Y (on the TO-92, the flat face), and the metal tab or exposed copper is at the back (+Y). |
| 15 | |
| 16 | - **TO-220 and TO-247.** The leads' shoulders rest on the board (the XY plane), and the leads continue their full length L down through it. |
| 17 | - **TO-92.** The body sits 1.5 above the board (TI's reference seating plane). |
| 18 | - **TO-18.** The flange sits on the board. Leads 1 and 3 are 2.54 apart along +X, and lead 2 is 1.27 off that line along -Y. The tab is at 45°, beside lead 1. |
| 19 | |
| 20 | `detail = "simple"` leaves out the leads. |
| 21 | |
| 22 | ## Source |
| 23 | |
| 24 | Each table gives a minimum and a maximum. The part uses the middle of the two, except where noted. `part.py` holds every table as read. |
| 25 | |
| 26 | - **Vishay Siliconix, "TO-220AB (High Voltage)"**, Package Information, document 92506, revision 30-Sep-2024 (DWG 6031), from vishay.com. |
| 27 | - Page 1, drawing: front, side and back views and section F-F. |
| 28 | - Page 2, table (mm): A 4.25–4.65, A1 1.20–1.34, A2 2.563–2.92, b 0.71–0.91, b2 1.14–1.78, c 0.46–0.61, D 14.32–15.86, D1 8.39–8.79, D2 12.20–12.80, E 9.96–10.36, E1 8.14–8.74, E2 0.59–0.69, e 2.54, e1 5.08, H1 6.30–6.70, L 13.40–14.40, L1 3.65–4.05, ØP 3.60–3.80, Q 2.54–2.94. |
| 29 | - **Vishay Semiconductors, "TO-220AC"**, Outline Dimensions, document 95221, revision 16-Jan-2026, from vishay.com. The drawing and table use the same letters. Here e1 is 4.88–5.28, the spacing of the two leads, and E2 is 0.76 max. The outline conforms to JEDEC TO-220AC. |
| 30 | - **Vishay Siliconix, "TO-247AC (High Voltage)"**, Package Information, document 91360, revision 07-Sep-2026, from vishay.com. The part uses version 1 (facility code 9) with its nominal values: |
| 31 | - A 5.02, A1 2.41, A2 1.27, b 1.20, b2 2.00, b4 3.00, c 0.50, D 20.55, D1 16.76, D2 0.66, E 15.70, E1 14.02, E2 4.91, e 5.46, L 15.15, L1 4.06, ØP 3.61, ØP1 7.19 (ref), Q 5.50. |
| 32 | - The package reference is JEDEC TO-247, variation AC. |
| 33 | - **Texas Instruments, LP0003A "TO-92 - 5.34 mm max height"**, drawing 4215214/C 04/2025 (ti.com/lit/pdf/msot002), straight lead option, page 1: |
| 34 | - body 4.44–5.21 wide, 4.32–5.34 high and 3.17–4.19 deep; |
| 35 | - the round back 2.03–2.67 from the leads, and the flat face at least 3.43 wide; |
| 36 | - leads 0.38–0.55 x 0.35–0.43, at 1.27 ±0.13 pitch, 12.7 min long; |
| 37 | - the seating plane (1.5) typical below the body; |
| 38 | - reference JEDEC TO-226, variation AA. |
| 39 | - **Central Semiconductor, "Package Details - TO-18"** (REV R1, R0 21-June 2004) and **"TO-18 2-Lead Case"** (REV R0, 13-March 2013), from centralsemi.com. |
| 40 | - Table (mm): A flange Ø 5.31–5.84, B can Ø 4.52–4.95, C flange 0.76 max (used as is), D height 4.32–5.33, E lead length 12.70 min (used as is), F lead Ø 0.41–0.48, G 2.54 (the lead circle, or the 2-lead part's spacing), H 1.27 (3 leads), and tab width 0.91–1.17 and tab length 0.71–1.22 at 45° (I and J; on the 2-lead sheet, H and J). |
| 41 | - Both sheets' material sheets give a Kovar header and leads and a nickel-plated iron-alloy can. |
| 42 | |
| 43 | How the letters are read: |
| 44 | |
| 45 | - **TO-220 and TO-247.** A2 (TO-247: A1) runs from the leads' back face to the back of the package. The leads' shoulders (b2, b4) are L1 long. On the TO-220, the metal tab is A1 thick: E wide above the moulding (H1 = D - D1), and E1 wide down the back to D2 below the top. On the TO-247, the exposed copper (D1 x E1, from D2 below the top) is taken as A2 thick, the dimension drawn at the back face. The TO-247's side slots are Ø E2, at Q below the top, the same height as the hole. |
| 46 | - **TO-92.** The body is a round of Ø W, cut flat at the depth T, with the leads K in front of the round back. |
| 47 | - **TO-18.** The tab length J is read as reaching beyond the flange's edge. |
| 48 | |
| 49 | **Proportions, for looks only.** The drawings show these but don't dimension them: |
| 50 | |
| 51 | - The TO-220 tab's side notches, E2 deep, are 1.4 high, from 1.4 to 2.8 below the top, as drawn. |
| 52 | - Not modelled: the TO-220AC's cut-off middle lead, the TO-220's ejector dimple, the TO-247's copper ring ØP1, and the bodies' 5° draft and small radii. |
| 53 | - Every lead's shoulder narrows to the lead in one step. |
| 54 | - Materials are for looks and a rough mass: |
| 55 | - The mouldings are epoxy. Nylon (PA6) is the nearest material in the list. |
| 56 | - The TO-220 tab and the TO-247 pad are copper, and the leads are tinned copper. |
| 57 | - The TO-18 header and leads are Kovar (8.36), so nickel (8.9), the nearest in the list. Its can is steel. |
| 58 | |
| 59 | ## Catalogue models |
| 60 | |
| 61 | The reference models were measured against the drawings, and each falls inside the drawing's tolerances: |
| 62 | |
| 63 | - **TO-220-3_Vertical.** 10.26 wide, 4.46 thick and 15.07 high with the tab. Leads 0.86 x 0.53 with 1.46 shoulders at 2.54. The leads' back face is 2.90 from the back. |
| 64 | - **TO-220-2_Vertical.** The same body, with leads at 0 and 5.08. |
| 65 | - **TO-247-3_Vertical.** 15.90 wide (E max 15.87, so 0.03 over), 5.03 thick and 20.7 high. Leads 1.20 with shoulders 2.03 and 3.00 at 5.45. |
| 66 | - **TO-92 and TO-92_Inline.** 4.83 wide, 3.75 deep. Leads at 1.27, with the flat face 1.33 in front of the leads and the round back 2.42 behind them. |
| 67 | - **TO-18-3.** Flange Ø 5.84, can Ø 4.95 and leads Ø 0.48 (the drawing's maximums). Lead 2 is 1.27 off the line of leads 1 and 3, and the tab is at 45° beside lead 1. |
| 68 | |
| 69 | The reference models stand their bodies at different heights above the board: the TO-92 at 2.5 and the TO-18 at about 5. The drawings don't give these, so this part uses the drawings' own seating. |
| 70 | |
| 71 | So these map: TO-220-3_Vertical (TO-220AB), TO-220-2_Vertical (TO-220AC), TO-247-3_Vertical (TO-247AC), TO-92 and TO-92_Inline (TO-92), TO-18-3 (TO-18) and TO-18-2 (TO-18-2). |
| 72 | |
| 73 | These stay "no table read yet" (`COVERAGE.md`): |
| 74 | |
| 75 | - the TO-92 models with leads formed to 2.54 (`_Wide`). TI's formed leads are 2.4 to 2.9 apart, with a land pattern of 2.6. |
| 76 | - the horizontal (bent-lead) models. The drawings give straight leads only. |
| 77 | - the other packages in the family: TO-126, TO-218, TO-220F, TO-220-4/5/11, TO-251, TO-262, TO-264, TO-3, TO-3P, TO-5, TO-8, TO-11, TO-39, TO-46 and TO-52, the TO-92 variants (L, S, Mini, Flat, 2-lead), and the windowed and lensed cans. |
| 78 |
A through-hole transistor, regulator or diode package standing on the board, from the maker's package drawing: TO-220AB (3 leads) and TO-220AC (2 leads) with the metal tab and its hole, TO-247AC with its exposed copper and side slots, TO-92 with straight leads, and the TO-18 metal can with 2 or 3 leads. Lead 1 at the origin, the leads along +X, the moulded front toward -Y. See the README.
A through-hole transistor, regulator or diode package standing on the board, built from the maker's package drawing. These are the JEDEC outlines that every maker builds:
package |
Leads | Body (W x thickness x height) | Source |
|---|---|---|---|
TO-220AB |
3, 2.54 pitch | 10.16 x 4.45 x 15.09 (tab included) | Vishay Siliconix 92506 |
TO-220AC |
2, 5.08 apart | 10.31 x 4.45 x 15.05 (tab included) | Vishay Semiconductors 95221 |
TO-247AC |
3, 5.46 pitch | 15.70 x 5.02 x 20.55 | Vishay Siliconix 91360 |
TO-92 |
3 straight, 1.27 pitch | 4.83 x 3.68 x 4.83 | TI LP0003A |
TO-18 |
3, on a Ø 2.54 circle | flange Ø 5.58, can Ø 4.74, 4.83 high | Central Semiconductor TO-18 |
TO-18-2 |
2, 2.54 apart | as TO-18 |
Central Semiconductor TO-18 2-Lead |
Lead 1 is at the origin and the leads run along +X. The moulded front faces -Y (on the TO-92, the flat face), and the metal tab or exposed copper is at the back (+Y).
detail = "simple" leaves out the leads.
Each table gives a minimum and a maximum. The part uses the middle of the two, except where noted. part.py holds every table as read.
How the letters are read:
Proportions, for looks only. The drawings show these but don't dimension them:
The reference models were measured against the drawings, and each falls inside the drawing's tolerances:
The reference models stand their bodies at different heights above the board: the TO-92 at 2.5 and the TO-18 at about 5. The drawings don't give these, so this part uses the drawings' own seating.
So these map: TO-220-3_Vertical (TO-220AB), TO-220-2_Vertical (TO-220AC), TO-247-3_Vertical (TO-247AC), TO-92 and TO-92_Inline (TO-92), TO-18-3 (TO-18) and TO-18-2 (TO-18-2).
These stay "no table read yet" (COVERAGE.md):
_Wide). TI's formed leads are 2.4 to 2.9 apart, with a land pattern of 2.6.Axial leaded inductor, Fastron fixed choke coils (MICC, SMCC, MECC, HCCC, LACC, HBCC, VHBCC, XHBCC) and suppression coils (MISC, MESC, 77A), Vishay Dale molded IM-1 to IM-10, horizontal or vertical.
Single-phase bridge rectifiers in Vishay's through-hole cases: GBL, GBU, KBL and KBU in-line, KBPC1 and KBPC6 square, from Vishay's data sheets.
Axial leaded diodes in Vishay's DO-35, DO-41, DO-15, DO-201AD and P600 packages, with the cathode band, horizontal or vertical.
LQFP and TQFP packages with gull-wing leads on four sides, by TI package outline.