"""Thin film chip fuse, Vishay MFU series, sizes 0402 to 1206. Centred on the origin, lying on the XY plane with its length along X: the substrate, the protective coat on top between the terminations, and a wrap-around termination at each end (each its own solid). Dimensions from Vishay's data sheet; see the README.""" from steve import Model size = "0603" # case size, inch code # size: (length L, width W, height H, bottom band (the sheet's T2), top band (T1), mass in mg), nominal values in mm. # Vishay Beyschlag, "MFU Series, Thin Film Chip Fuses", document 28747, revision 11-Mar-13 (https://www.vishay.com/doc?28747), page 3, # "DIMENSIONS - Chip fuse types, mass and relevant physical dimensions": H 0.32 +/-0.07, 0.45 +0.1/-0.05, 0.45 +0.1/-0.05, 0.55 +/-0.1; # L 1.0 +/-0.05, 1.55 +/-0.05, 2.0 +/-0.1, 3.2 +0.1/-0.2; W 0.5 +/-0.05, 0.85 +/-0.1, 1.25 +/-0.15, 1.6 +/-0.15; T1 and T2 0.2, 0.3, # 0.4, 0.5; the termination width WT is "> 75 % of W". The model uses the nominal values. SIZES = { "0402": (1.0, 0.5, 0.32, 0.2, 0.2, 0.65), "0603": (1.55, 0.85, 0.45, 0.3, 0.3, 1.9), "0805": (2.0, 1.25, 0.45, 0.4, 0.4, 4.7), "1206": (3.2, 1.6, 0.55, 0.5, 0.5, 9.5), } # Proportion, for looks: the terminations' and the coat's thickness, 0.1 x H (the data sheet doesn't dimension it); the terminations run # the full width (the sheet gives their width only as more than 75 % of W). SKIN = 0.1 # The coat's top stands this far below the terminations' top bands (half the coat at most), so the renderer draws the bands' edges. PROUD = 0.03 L, W, H, T1, T2, _mass = SIZES[size] t = SKIN * H model = Model() # The alumina body inside the terminations and under the overcoat. model.box("body", L - 2 * t, W, H - 2 * t, at=(0, 0, H / 2), op="new", body="body_body", name="Body") # The coat on top between the terminations' top bands, a little below them. coat = t - min(PROUD, t / 2) model.box("overcoat", L - 2 * T2, W, coat, at=(0, 0, H - t + coat / 2), op="new", body="overcoat_body", name="Overcoat") # Each termination: its section in the XZ plane (bottom band T1 long, the end face, the top band T2 long), extruded across the width. for tag, side in (("left", -1), ("right", 1)): x_end = side * L / 2 section = [(x_end, 0.0), (x_end - side * T1, 0.0), (x_end - side * T1, t), (x_end - side * t, t), (x_end - side * t, H - t), (x_end - side * T2, H - t), (x_end - side * T2, H), (x_end, H)] # The XZ plane's normal is -Y: offset -W/2 puts it on the +Y face, and the extrusion runs across the width to -Y. model.plane(f"{tag}_plane", on="XZ", offset=-W / 2, name="Terminations") with model.sketch(f"{tag}_sketch", on=f"{tag}_plane", name="Terminations") as sk: sk.polyline(f"{tag}_section", section, closed=True) model.extrude(f"{tag}_term", f"{tag}_sketch", distance=W, op="new", body=f"{tag}_body", name="Terminations") # Materials, for looks and a rough mass (the sheet names no materials): the substrate shown as alumina, the coat as ptfe and the # terminations as tin, as the library's chip resistor; the mass is checked against the sheet's in the README. model.material("alumina", bodies=["body_body"], color="#f2efe6") model.material("ptfe", bodies=["overcoat_body"], color="#3a5a40") model.material("tin", bodies=["left_body", "right_body"], color="#c9ccd1") result = model.result()