by adom
Murata Electronics Ferrite Beads, 0402. Pinout cross-checked by two models against the datasheet, KiCad symbol/footprint/3D.
master
John Lauer
Laser mark by the planner (adom-aiflow 0.1.49): re-etched, outlines regenerated, GLB / hero / outline symbol rebuilt; l…
786773c
16d ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
"""Murata BLM15 (1005 / 0402) chip ferrite bead 3D model built from Murata's own drawing (AI-generated, 2026-10-04).
Murata's 3D model for this part is only served through SnapEDA, which refused the download, so the STEP is built with
OpenCascade (OCP) from Murata's product page for BLM15AX601SN1# (pim.murata.com, "Appearance & Shape" drawing
SE0_1700): body L 1.0 +/- 0.05, W 0.5 +/- 0.05, T 0.5 +/- 0.05 mm; electrode 0.25 +/- 0.1 mm at each end, covering the
whole end and wrapping all four sides; edges slightly rounded in the end view. Colours are sampled from Murata's
product photo (PE0_1700): ferrite body sRGB (26, 26, 26), electrodes (179, 179, 179).
Frame: mm, Z up, seated on z = 0, origin at the part centre, length along X (pad 1 at -X).
Usage: build_blm15.py OUT.step REPORT.json [--name MPN]"""
import sys, json
from OCP.STEPCAFControl import STEPCAFControl_Writer
from OCP.STEPControl import STEPControl_AsIs
from OCP.TDocStd import TDocStd_Document
from OCP.TCollection import TCollection_ExtendedString
from OCP.XCAFDoc import XCAFDoc_DocumentTool, XCAFDoc_ColorType
from OCP.TDataStd import TDataStd_Name
from OCP.Quantity import Quantity_Color, Quantity_TOC_sRGB
from OCP.BRepPrimAPI import BRepPrimAPI_MakeBox
from OCP.BRepAlgoAPI import BRepAlgoAPI_Common
from OCP.BRepFilletAPI import BRepFilletAPI_MakeFillet
from OCP.TopExp import TopExp_Explorer
from OCP.TopAbs import TopAbs_EDGE
from OCP.TopoDS import TopoDS
from OCP.gp import gp_Pnt
from OCP.TopLoc import TopLoc_Location
from OCP.Interface import Interface_Static
out, rp = sys.argv[1:3]
NAME = sys.argv[sys.argv.index('--name') + 1] if '--name' in sys.argv else 'BLM15'
L, W, T, E, R = 1.0, 0.5, 0.5, 0.25, 0.04 # Murata drawing; R = edge rounding (drawing shows rounded corners)
BODY, ELECTRODE = (26 / 255, 26 / 255, 26 / 255), (179 / 255, 179 / 255, 179 / 255)
def box(x0, y0, z0, x1, y1, z1): return BRepPrimAPI_MakeBox(gp_Pnt(x0, y0, z0), x1 - x0, y1 - y0, z1 - z0).Shape()
def common(a, b): return BRepAlgoAPI_Common(a, b).Shape()
outer = box(-L / 2, -W / 2, 0, L / 2, W / 2, T)
mk = BRepFilletAPI_MakeFillet(outer); e = TopExp_Explorer(outer, TopAbs_EDGE)
while e.More(): mk.Add(R, TopoDS.Edge(e.Current())); e.Next()
outer = mk.Shape()
parts = [
('ferrite_body', common(outer, box(-L / 2 + E, -W, -1, L / 2 - E, W, 2)), BODY),
('electrode_1', common(outer, box(-L, -W, -1, -L / 2 + E, W, 2)), ELECTRODE),
('electrode_2', common(outer, box(L / 2 - E, -W, -1, L, W, 2)), ELECTRODE),
]
doc = TDocStd_Document(TCollection_ExtendedString("d"))
st = XCAFDoc_DocumentTool.ShapeTool_s(doc.Main()); ct = XCAFDoc_DocumentTool.ColorTool_s(doc.Main())
asm = st.NewShape(); TDataStd_Name.Set_s(asm, TCollection_ExtendedString(NAME))
for name, shp, rgb in parts:
lab = st.AddShape(shp, False); TDataStd_Name.Set_s(lab, TCollection_ExtendedString(name))
q = Quantity_Color(rgb[0], rgb[1], rgb[2], Quantity_TOC_sRGB)
ct.SetColor(lab, q, XCAFDoc_ColorType.XCAFDoc_ColorGen); ct.SetColor(lab, q, XCAFDoc_ColorType.XCAFDoc_ColorSurf)
comp = st.AddComponent(asm, lab, TopLoc_Location()); TDataStd_Name.Set_s(comp, TCollection_ExtendedString(name))
st.UpdateAssemblies()
Interface_Static.SetCVal_s("write.step.schema", "AP214IS"); Interface_Static.SetCVal_s("write.step.unit", "MM")
wr = STEPCAFControl_Writer(); wr.SetColorMode(True); wr.SetNameMode(True); wr.SetLayerMode(True)
wr.Transfer(doc, STEPControl_AsIs); assert wr.Write(out) == 1
hdr = ("/* %s (Murata BLM15 chip ferrite bead, 1005) 3D model - AI-generated (Claude, Adom) from Murata's product-page drawing\n"
" (L 1.0, W 0.5, T 0.5 mm, electrode 0.25 mm) with colours sampled from Murata's product photo, with OpenCascade (OCP).\n"
" Not Murata's model file. mm, Z up, seated on z = 0, pad 1 at -X. */" % NAME)
t = open(out, encoding='latin-1').read().replace('HEADER;', 'HEADER;\n' + hdr, 1); open(out, 'w', encoding='latin-1').write(t)
json.dump(dict(tool='build_blm15.py', name=NAME, doc=__doc__,
source=dict(drawing="https://pim.murata.com/asset/pim4/ferriteBeadInductortypefilter/SE0_1700_GIF_FERRITEBEADINDUCTORTYPEFILTER",
photo="https://pim.murata.com/asset/pim4/ferriteBeadInductortypefilter/PE0_1700_GIF_FERRITEBEADINDUCTORTYPEFILTER",
page="https://www.murata.com/en-us/products/productdetail?partno=BLM15AX601SN1%23"),
dims_mm=dict(L=L, W=W, T=T, electrode=E, edge_round=R), colours_srgb=dict(body=[26, 26, 26], electrode=[179, 179, 179])),
open(rp, 'w'), indent=1)
print(json.dumps(dict(out=out, name=NAME)))