Sign in with STEVE

steve/axial-diode

Axial leaded diodes in Vishay's DO-35, DO-41, DO-15, DO-201AD and P600 packages, with the cathode band, horizontal or vertical.

v1.0.0 Latest STEVE MIT 0
Isometric
part.py 131 lines · Python · STEVE runtime · checked
Download
1"""Axial leaded diode, Vishay's DO-35 (DO-204AH), DO-41 (DO-204AL), DO-15 (DO-204AC), DO-201AD and P600 packages, mounted horizontal or
2vertical. Lead 1, the cathode, is at the origin and lead 2, the anode, at +X by the pitch; the leads go down through the board. Horizontal: the
3body lies on the board along X, centred between the leads, its cathode band toward lead 1. Vertical: the body stands on the board over lead 1
4with the anode up (or over lead 2 with the cathode up) and the top lead comes back down beside it. Dimensions from Vishay's data sheets,
5listed in the README."""
6import math
7
8from steve import Model
9
10package = "DO-41" # DO-35, DO-41, DO-15, DO-201AD or P600
11mounting = "horizontal" # horizontal or vertical
12pitch = 10.16 # mm Lead pitch on the board
13up = "anode" # vertical only: the end on top, anode (the body over lead 1) or cathode (the body over lead 2)
14tail = 3.0 # mm Leads below the board
15detail = "full" # full: body, cathode band and leads; simple: the body only
16
17# Each entry: (body diameter (min, max), body length (min, max), lead diameter (min, max)), mm; the model uses the middle of each range (a
18# single value where the sheet gives only a maximum). The sheets' "PACKAGE OUTLINE DIMENSIONS" drawings:
19# DO-35 (DO-204AH): Vishay Semiconductors 1N4148, document 81857, Rev. 1.6, 07-Nov-2024, page 3: Ø 1.5 to 1.75, length 3.4 max, lead 0.55 max.
20# DO-41 (DO-204AL): Vishay General Semiconductor 1N4001 thru 1N4007, document 88503, revision 29-Apr-2020, page 4.
21# DO-15 (DO-204AC): Vishay General Semiconductor P6KE6.8A thru P6KE540A, document 88369, revision 27-Sep-2021, page 5.
22# DO-201AD: Vishay General Semiconductor 1N5400 thru 1N5408, document 88516, revision 19-Dec-2025, page 4.
23# P600: Vishay General Semiconductor P600A thru P600M, document 88692, revision 19-Dec-2025, page 3.
24PACKAGES = {
25 "DO-35": ((1.5, 1.75), (3.4, 3.4), (0.55, 0.55)),
26 "DO-41": ((2.0, 2.7), (4.1, 5.2), (0.71, 0.86)),
27 "DO-15": ((3.3, 3.5), (6.15, 6.55), (0.71, 0.86)),
28 "DO-201AD": ((4.8, 5.3), (7.2, 9.5), (1.22, 1.32)),
29 "P600": ((8.6, 9.1), (8.6, 9.1), (1.22, 1.32)),
30}
31
32if package not in PACKAGES:
33 raise ValueError(f"no package {package!r}: {', '.join(PACKAGES)}")
34if mounting not in ("horizontal", "vertical") or up not in ("anode", "cathode"):
35 raise ValueError("mounting: horizontal or vertical; up: anode or cathode")
36diameter, length, lead = (sum(v) / 2 for v in PACKAGES[package])
37R, r = diameter / 2, lead / 2
38glass = package == "DO-35"
39# Proportions, for looks (the sheets draw the body but dimension only its diameter and length): the body's end edges rounded by 0.25 x the
40# radius (DO-35 glass: 0.45 x); the cathode band 0.18 x the length wide, starting at the cathode end's rounding; the leads bent with a radius
41# of one lead diameter; vertical: the top lead clears the body's top end by 2 lead diameters + 1 before it turns down.
42EDGE = (0.45 if glass else 0.25) * R
43BAND = 0.18 * length
44BEND = lead
45LOOP = 2 * lead + 1.0
46horizontal = mounting == "horizontal"
47if horizontal and pitch < length + 2 * BEND:
48 raise ValueError(f"horizontal pitch: at least {length + 2 * BEND:.2f} mm for {package} (body {length:.2f} long, bends {BEND:.2f})")
49if not horizontal and pitch < max(R + r, 2 * BEND):
50 raise ValueError(f"vertical pitch must let the top lead pass the body: at least {max(R + r, 2 * BEND):.2f} mm for {package}")
51
52
53def body_profile():
54 """The body outline as (u along the axis from the cathode end, radius) and the band segment's index."""
55 pts = [(0.0, 0.0), (0.0, R - EDGE)]
56 pts += [(EDGE * (1 - math.cos(math.pi / 2 * i / 4)), R - EDGE + EDGE * math.sin(math.pi / 2 * i / 4)) for i in range(1, 5)]
57 pts.append((EDGE + BAND, R))
58 band = len(pts) - 2
59 pts.append((length - EDGE, R))
60 pts += [(length - u, v) for u, v in reversed(pts[1:5])]
61 pts.append((length, 0.0))
62 return pts, band
63
64
65model = Model()
66outline, band = body_profile()
67if horizontal:
68 x0 = pitch / 2 - length / 2
69 axis_z = R # the body rests on the board
70 points = [(x0 + u, axis_z + v) for u, v in outline]
71 axis = ((0, 0, axis_z), (1, 0, 0))
72else:
73 base = 0.0 if up == "anode" else pitch # the lead the body stands over
74 # Cathode at the bottom when the anode is up: u runs up from the cathode end; else down from the top.
75 points = [(base + v, u if up == "anode" else length - u) for u, v in outline]
76 axis = ((base, 0, 0), (0, 0, 1))
77with model.sketch("body_sketch", on="XZ", name="Body") as sk:
78 sk.polyline("body_outline", points, closed=True)
79model.revolve("body", "body_sketch", axis=axis, op="new", body="body_body", name="Body")
80bodies = ["body_body"]
81if detail == "full":
82 if horizontal:
83 legs = [(0.0, 1, x0), (pitch, -1, x0 + length)]
84 for i, (x, side, x_end) in enumerate(legs, 1):
85 with model.sketch(f"lead_{i}_path", on="XZ", name=f"Lead {i} path") as sk:
86 sk.line(f"lead_{i}_up", (x, -tail), (x, axis_z - BEND), construction=True)
87 if side > 0:
88 sk.arc(f"lead_{i}_bend", (x + BEND, axis_z - BEND), BEND, 90, 180, construction=True)
89 else:
90 sk.arc(f"lead_{i}_bend", (x - BEND, axis_z - BEND), BEND, 0, 90, construction=True)
91 sk.line(f"lead_{i}_along", (x + side * BEND, axis_z), (x_end, axis_z), construction=True)
92 model.plane(f"lead_{i}_start", on="XY", offset=-tail, name=f"Lead {i} end")
93 with model.sketch(f"lead_{i}_section", on=f"lead_{i}_start", name=f"Lead {i}") as sk:
94 sk.circle(f"lead_{i}_round", (x, 0), r)
95 model.sweep(f"lead_{i}", f"lead_{i}_section", f"lead_{i}_path", op="new", body=f"lead_{i}_body", name=f"Lead {i}")
96 bodies.append(f"lead_{i}_body")
97 else:
98 far = pitch if up == "anode" else 0.0 # where the top lead comes down
99 step = 1 if far > base else -1
100 model.plane("lead_low_start", on="XY", offset=-tail, name="Bottom lead end")
101 with model.sketch("lead_low_section", on="lead_low_start", name="Bottom lead") as sk:
102 sk.circle("lead_low_round", (base, 0), r)
103 model.extrude("lead_low", "lead_low_section", distance=tail, op="new", body="lead_low_body", name="Bottom lead")
104 top = length + LOOP
105 with model.sketch("lead_top_path", on="XZ", name="Top lead path") as sk:
106 sk.line("lead_top_up", (base, length), (base, top - BEND), construction=True)
107 if step > 0:
108 sk.arc("lead_top_bend_1", (base + BEND, top - BEND), BEND, 90, 180, construction=True)
109 sk.line("lead_top_over", (base + BEND, top), (far - BEND, top), construction=True)
110 sk.arc("lead_top_bend_2", (far - BEND, top - BEND), BEND, 0, 90, construction=True)
111 else:
112 sk.arc("lead_top_bend_1", (base - BEND, top - BEND), BEND, 0, 90, construction=True)
113 sk.line("lead_top_over", (base - BEND, top), (far + BEND, top), construction=True)
114 sk.arc("lead_top_bend_2", (far + BEND, top - BEND), BEND, 90, 180, construction=True)
115 sk.line("lead_top_down", (far, top - BEND), (far, -tail), construction=True)
116 model.plane("lead_top_start", on="XY", offset=length, name="Top lead start")
117 with model.sketch("lead_top_section", on="lead_top_start", name="Top lead") as sk:
118 sk.circle("lead_top_round", (base, 0), r)
119 model.sweep("lead_top", "lead_top_section", "lead_top_path", op="new", body="lead_top_body", name="Top lead")
120 bodies += ["lead_low_body", "lead_top_body"]
121# Materials, for looks and a rough mass: DO-35 is a glass body (the sheet's cathode band is black); the others are moulded epoxy (nylon, PA6,
122# the nearest in the list) with a light band ("color band denotes cathode end"); the leads tin-plated copper.
123if glass:
124 model.material("glass-borosilicate", bodies=["body_body"], color="#d98a3a")
125else:
126 model.material("pa6", bodies=["body_body"], color="#202022")
127if detail == "full":
128 model.material("copper", bodies=bodies[1:], color="#c9ccd1")
129 model.appearance(color="#141414" if glass else "#c8c8c8", faces=[f"body.side(body_outline.side{band})"])
130result = model.result()
131

Axial leaded diode with formed leads, lying on the board or standing up: Vishay's DO-35 (DO-204AH, glass), DO-41 (DO-204AL), DO-15 (DO-204AC), DO-201AD and P600 package outlines, from Vishay's data sheets. Lead 1 (the cathode, by the band) at the origin, lead 2 along +X. See the README.

Axial diode

An axial leaded diode with formed leads, lying on the board or standing up. The package outlines are Vishay's: DO-35 (DO-204AH, a glass body), DO-41 (DO-204AL), DO-15 (DO-204AC), DO-201AD and P600, each from a Vishay data sheet.

Lead 1, the cathode at the band, is at the origin. Lead 2, the anode, is at +X by pitch, and both leads go down through the board, tail below it.

  • Horizontal. The body lies on the board along X, centred between the leads, with its band toward lead 1.
  • Vertical. The body stands on the board. With up = "anode" it stands over lead 1, and with up = "cathode" over lead 2. The top lead clears the body's top, turns over and comes back down at the other hole.
Package Body Ø Body length Lead Ø Sheet
DO-35 (DO-204AH) 1.5–1.75 3.4 max 0.55 max 1N4148
DO-41 (DO-204AL) 2.0–2.7 4.1–5.2 0.71–0.86 1N4001
DO-15 (DO-204AC) 3.3–3.5 6.15–6.55 0.71–0.86 P6KE6.8A
DO-201AD 4.8–5.3 7.2–9.5 1.22–1.32 1N5400
P600 8.6–9.1 8.6–9.1 1.22–1.32 P600A

The part uses the middle of each range. Where the sheet gives only a maximum (DO-35's length and lead), it uses that value.

Source

Vishay data sheets, from vishay.com:

  • Vishay Semiconductors, 1N4148, document 81857, Rev. 1.6, 07-Nov-2024, page 3, "PACKAGE DIMENSIONS in millimeters (inches): DO-35 (DO-204AH)". The cathode band is black, according to page 1.
  • Vishay General Semiconductor, 1N4001 thru 1N4007, document 88503, revision 29-Apr-2020, page 4, "PACKAGE OUTLINE DIMENSIONS: DO-41 (DO-204AL)".
  • Vishay General Semiconductor, P6KE6.8A thru P6KE540A, document 88369, revision 27-Sep-2021, page 5, "DO-15 (DO-204AC)".
  • Vishay General Semiconductor, 1N5400 thru 1N5408, document 88516, revision 19-Dec-2025, page 4, "DO-201AD".
  • Vishay General Semiconductor, P600A thru P600M, document 88692, revision 19-Dec-2025, page 3, "P600".

The moulded packages carry a colour band at the cathode end ("color band denotes cathode end"). The leads are 25.4 min long before forming.

Proportions, for looks only. The sheets draw the body but dimension only its diameter and length:

  • The body's end edges are rounded by 0.25 x the radius, or 0.45 x on the DO-35's glass.
  • The cathode band is 0.18 x the length wide, starting at the cathode end's rounding.
  • The leads are bent with a radius of one lead diameter. On a vertical part, the top lead rises 2 lead diameters + 1 above the body before it turns.
  • Materials are for looks and a rough mass:
    • DO-35 is borosilicate glass in amber, with a black band.
    • The moulded packages are epoxy. Nylon (PA6) is the nearest in the list. They are black with a light band.
    • The leads are tin-plated copper.

Catalogue models

The catalogue's D_<package>_P<pitch>mm_<Horizontal|Vertical_AnodeUp|Vertical_CathodeUp> models name a JEDEC package (or the P600 / R-6 case) and a pitch, and 29 of them map.

On the reference models, lead 1 is at the origin. A horizontal body lies between the leads. A vertical body stands over lead 1 when the anode is up and over lead 2 when the cathode is up. The pitch is the named one.

Measured on six reference models (body Ø x length, lead Ø):

Model Measured Vishay's sheet
DO-41 P7.62 horizontal 2.72 x 5.2, 0.80 2.0–2.7 x 4.1–5.2, 0.71–0.86
DO-35 P7.62 horizontal 2.02 x 4.0, 0.50 1.5–1.75 x 3.4 max, 0.55 max
DO-15 P10.16 horizontal 3.62 x 7.6, 0.90 3.3–3.5 x 6.15–6.55, 0.71–0.86
DO-201AD P12.70 horizontal 5.22 x 9.5, 1.30 4.8–5.3 x 7.2–9.5, 1.22–1.32
P600 P12.70 horizontal 9.12 x 9.1, 1.30 8.6–9.1 x 8.6–9.1, 1.22–1.32
DO-41 P2.54 vertical, anode up / cathode up 2.72 x 5.2 as above

The models are drawn at or beyond the largest body that each package allows. The DO-35 and DO-15 models are larger than Vishay's maximums: the DO-35 by 0.27 in diameter and 0.6 in length, and the DO-15 by 0.12 in diameter and 1.05 in length.

The names name the package, so they map to Vishay's outline of that package, and the pitch and lead order are as named. The bodies lie on the board, where the models raise them about 0.6.

Left as "no table read yet" until a sheet is read: 5KP, 5KPW, 5W, A-405, DO-201, DO-201AE, DO-27, DO-34, T-1, DO-247 and the bridge rectifiers.

  1. 1.0.0 Latest
More #diode
STEVEMIT

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.

0 63 sizes 0 3 hours ago v1.1.0
STEVEMIT

steve/axial-resistor

Axial leaded metal film resistor, Vishay Beyschlag MBA/SMA 0204, MBB/SMA 0207 and MBE/SMA 0414, with colour rings, horizontal or vertical.

0 9 sizes 0 3 hours ago v1.0.0
STEVEMIT

steve/bridge-rectifier

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.

0 7 sizes 0 1 hour ago v1.0.0
STEVEMIT

steve/radial-inductor

Radial leaded inductor, Fastron pin type coils: 07M shielded, 07P and 11P with tube, 07HCP, 09HCP and 07HVP open or with tube.

0 10 sizes 0 2 hours ago v1.0.0