12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BLM15AX601SN1D — Component Characterization</title>
<style>
@font-face { font-family: 'Familjen Grotesk'; src: url('https://adom.inc/fonts/familjen-grotesk/familjen-grotesk-latin-700-normal.woff2') format('woff2'); font-weight: 700; }
@font-face { font-family: 'Familjen Grotesk'; src: url('https://adom.inc/fonts/familjen-grotesk/familjen-grotesk-latin-500-normal.woff2') format('woff2'); font-weight: 500; }
@font-face { font-family: 'Satoshi'; src: url('https://adom.inc/fonts/satoshi/satoshi-400-normal.woff2') format('woff2'); font-weight: 400; }
@font-face { font-family: 'Satoshi'; src: url('https://adom.inc/fonts/satoshi/satoshi-500-normal.woff2') format('woff2'); font-weight: 500; }
@font-face { font-family: 'JetBrains Mono'; src: url('https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2') format('woff2'); font-weight: 400; }
:root {
--bg: #0d1117; --surface: #161b22; --elevated: #1c2128; --border: #30363d; --border-muted: #21262d;
--text: #e6edf3; --text-muted: #8b949e; --text-dim: #484f58;
--accent: #00b8b0; --accent-bright: #00e6dc; --accent-dim: rgba(0,184,176,0.12); --accent-border: rgba(0,184,176,0.25);
--green: #3fb950; --orange: #d29922; --red: #f85149; --purple: #8C6BF7; --blue: #58a6ff;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: 'Satoshi', sans-serif; background: var(--bg); color: var(--text); font-size: 13px; line-height: 1.6; overflow-y: auto; }
h1,h2,h3 { font-family: 'Familjen Grotesk', sans-serif; font-weight: 700; }
code { font-family: 'JetBrains Mono', monospace; font-size: 12px; }
a { color: var(--accent); text-decoration: none; }
a:hover { color: var(--accent-bright); text-decoration: underline; }
.header { background: var(--surface); border-bottom: 1px solid var(--border-muted); padding: 20px 24px; }
.header-top { display: flex; align-items: center; gap: 12px; margin-bottom: 4px; }
.header .brand { color: var(--accent); font-family: 'Familjen Grotesk', sans-serif; font-size: 12px; font-weight: 600; }
.header .vsep { width: 1px; height: 16px; background: var(--border); }
.header .crumb { color: var(--text-dim); font-size: 12px; }
.header h1 { font-size: 22px; margin-bottom: 2px; }
.header h1 .val { color: var(--accent); }
.header .subtitle { color: var(--text-muted); font-size: 13px; }
.header .tags { display: flex; gap: 6px; margin-top: 10px; flex-wrap: wrap; }
.tag { display: inline-flex; align-items: center; gap: 4px; padding: 3px 10px; border-radius: 12px; font-size: 11px; font-weight: 500; }
.tag.pkg { background: rgba(0,184,176,0.12); color: var(--accent); }
.tag.mfr { background: rgba(88,166,255,0.12); color: var(--blue); }
.tag.series { background: rgba(140,107,247,0.12); color: var(--purple); }
.tag.rohs { background: rgba(63,185,80,0.12); color: var(--green); }
.tag.app { background: rgba(210,153,34,0.12); color: var(--orange); }
.container { max-width: 1100px; margin: 0 auto; padding: 24px; }
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; }
@media (max-width: 800px) { .grid-2, .grid-3 { grid-template-columns: 1fr; } }
.section { margin-bottom: 28px; }
.section-title { font-size: 14px; color: var(--text); margin-bottom: 12px; padding-bottom: 6px; border-bottom: 1px solid var(--border-muted); display: flex; align-items: center; gap: 8px; }
.section-title .icon { color: var(--accent); font-size: 16px; }
.card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 16px; }
.card:hover { border-color: var(--accent-border); }
/* Key spec cards */
.spec-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; }
.spec-card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 12px 14px; text-align: center; }
.spec-card .sc-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-dim); margin-bottom: 4px; }
.spec-card .sc-value { font-size: 22px; font-weight: 700; font-family: 'Familjen Grotesk', sans-serif; }
.spec-card .sc-detail { font-size: 11px; color: var(--text-muted); margin-top: 2px; }
.spec-card.highlight { border-color: var(--accent-border); background: linear-gradient(180deg, rgba(0,184,176,0.06), var(--surface)); }
.spec-card.highlight .sc-value { color: var(--accent); }
/* Detail table */
.detail-table { width: 100%; border-collapse: collapse; }
.detail-table tr { border-bottom: 1px solid var(--border-muted); }
.detail-table tr:last-child { border-bottom: none; }
.detail-table td { padding: 8px 0; }
.detail-table td:first-child { color: var(--text-muted); font-size: 12px; width: 45%; }
.detail-table td:last-child { font-family: 'JetBrains Mono', monospace; font-size: 13px; text-align: right; }
/* SVG charts */
.chart-wrap { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 16px; }
.chart-wrap h3 { font-size: 13px; color: var(--text); margin-bottom: 12px; }
.chart-wrap .chart-note { font-size: 11px; color: var(--text-dim); margin-top: 8px; }
svg text { font-family: 'JetBrains Mono', monospace; }
/* Package drawing */
.pkg-drawing { display: flex; align-items: center; justify-content: center; padding: 20px; }
/* Family comparison */
.family-table { width: 100%; border-collapse: collapse; font-size: 12px; }
.family-table th { background: var(--elevated); padding: 8px 10px; text-align: left; font-size: 10px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-dim); border-bottom: 2px solid var(--border); }
.family-table td { padding: 7px 10px; border-bottom: 1px solid var(--border-muted); }
.family-table tr.current { background: rgba(0,184,176,0.06); }
.family-table tr.current td:first-child { border-left: 3px solid var(--accent); padding-left: 7px; }
.family-table tr:hover td { background: var(--elevated); }
/* Reflow profile */
.profile-table { width: 100%; border-collapse: collapse; font-size: 12px; margin-top: 12px; }
.profile-table th { background: var(--elevated); padding: 6px 10px; font-size: 10px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-dim); text-align: left; border-bottom: 1px solid var(--border); }
.profile-table td { padding: 6px 10px; border-bottom: 1px solid var(--border-muted); }
/* Environmental specs */
.env-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
@media (max-width: 700px) { .env-grid { grid-template-columns: 1fr; } }
.env-card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 12px 14px; }
.env-card .env-name { font-size: 12px; font-weight: 600; margin-bottom: 4px; }
.env-card .env-spec { font-size: 11px; color: var(--text-muted); }
.env-card .env-detail { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--text); margin-top: 4px; }
/* Vendor cards */
.vendor-cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
@media (max-width: 700px) { .vendor-cards { grid-template-columns: 1fr; } }
.vendor-card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 14px; }
.vendor-card .vc-name { font-size: 12px; font-weight: 600; margin-bottom: 6px; }
.vendor-card .vc-name.mouser { color: var(--blue); }
.vendor-card .vc-name.digikey { color: var(--red); }
.vendor-card .vc-name.jlcpcb { color: var(--green); }
.vendor-card .vc-price { font-size: 20px; font-weight: 700; font-family: 'Familjen Grotesk', sans-serif; }
.vendor-card .vc-detail { font-size: 11px; color: var(--text-muted); margin-top: 4px; }
.vendor-card .vc-link { display: inline-block; margin-top: 8px; font-size: 11px; color: var(--accent); }
.vendor-card.recommended { border-color: var(--accent-border); }
.vendor-card.recommended::before { content: 'RECOMMENDED'; display: block; font-size: 9px; letter-spacing: 1px; color: var(--accent); margin-bottom: 6px; font-weight: 600; }
.copy-btn { background: none; border: 1px solid var(--border); color: var(--text-muted); border-radius: 4px; padding: 2px 6px; font-size: 13px; cursor: pointer; font-family: 'JetBrains Mono', monospace; vertical-align: middle; transition: border-color 0.15s, color 0.15s; }
.copy-btn:hover { border-color: var(--accent); color: var(--accent); }
.dl-btn { display: inline-block; margin-top: 10px; padding: 6px 14px; background: var(--accent-dim); border: 1px solid var(--accent-border); border-radius: 6px; color: var(--accent); font-size: 11px; font-weight: 500; font-family: 'Satoshi', sans-serif; text-decoration: none; transition: background 0.15s, border-color 0.15s; }
.dl-btn:hover { background: rgba(0,184,176,0.2); border-color: var(--accent); text-decoration: none; color: var(--accent-bright); }
.open-full-banner { display: flex; align-items: center; justify-content: center; padding: 12px 24px; background: linear-gradient(90deg, rgba(0,184,176,0.12), rgba(0,184,176,0.06)); border-bottom: 1px solid var(--accent-border); }
.open-full-btn { display: inline-flex; align-items: center; gap: 8px; padding: 8px 20px; background: var(--accent); color: var(--bg); font-family: 'Familjen Grotesk', sans-serif; font-size: 13px; font-weight: 600; border-radius: 6px; text-decoration: none; transition: background 0.15s; }
.open-full-btn:hover { background: var(--accent-bright); text-decoration: none; color: var(--bg); }
.source { text-align: center; color: var(--text-dim); font-size: 11px; padding: 24px 0 12px; border-top: 1px solid var(--border-muted); margin-top: 20px; }
</style>
</head>
<body>
<div class="open-full-banner" id="fullPageBanner" style="display:none">
<span style="color:var(--text-muted);font-size:12px;margin-right:8px">Full page:</span>
<code style="color:var(--accent);font-size:11px;background:var(--elevated);padding:4px 8px;border-radius:4px;user-select:all">https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/blm15ax601sn1d/BLM15AX601SN1D.html</code>
<button class="open-full-btn" id="copyFullUrl" style="margin-left:8px">Copy Link</button>
</div>
<script>
if(window.self!==window.top){document.getElementById('fullPageBanner').style.display='flex'}
document.getElementById('copyFullUrl').addEventListener('click',function(){var t=document.createElement('textarea');t.value='https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/blm15ax601sn1d/BLM15AX601SN1D.html';document.body.appendChild(t);t.select();document.execCommand('copy');document.body.removeChild(t);this.textContent='Copied!';var b=this;setTimeout(function(){b.textContent='Copy Link'},1500)});
</script>
<div class="header">
<div class="header-top">
<div class="brand">Adom</div>
<div class="vsep"></div>
<div class="crumb">Components › Ferrite Beads › 0402</div>
</div>
<h1>BLM15AX601SN1D — <span class="val">600Ω @ 100MHz</span></h1>
<div class="subtitle">Murata · Chip Ferrite Bead · General Use</div>
<div class="tags">
<span class="tag pkg">0402</span>
<span class="tag mfr">Murata</span>
<span class="tag series">BLM15</span>
<span class="tag rohs">RoHS</span>
<span class="tag app">General Purpose</span>
</div>
</div>
<div class="container">
<!-- Key Specs -->
<div class="section">
<div class="spec-cards">
<div class="spec-card highlight">
<div class="sc-label">Impedance @ 100MHz</div>
<div class="sc-value">600Ω</div>
<div class="sc-detail">±25%</div>
</div>
<div class="spec-card">
<div class="sc-label">Rated Current</div>
<div class="sc-value">500mA</div>
<div class="sc-detail">@ 125°C ambient</div>
</div>
<div class="spec-card">
<div class="sc-label">DCR</div>
<div class="sc-value">0.34Ω</div>
<div class="sc-detail">initial (0.39Ω post-test)</div>
</div>
<div class="spec-card">
<div class="sc-label">Package</div>
<div class="sc-value">0402</div>
<div class="sc-detail">1.0 × 0.5 × 0.5mm</div>
</div>
<div class="spec-card">
<div class="sc-label">Application</div>
<div class="sc-value" style="font-size:16px">General Use</div>
<div class="sc-detail">General use</div>
</div>
<div class="spec-card">
<div class="sc-label">Mouser</div>
<div class="sc-value">$0.10</div>
<div class="sc-detail">6,515 in stock</div>
</div>
</div>
</div>
<div class="grid-2">
<!-- Left column -->
<div>
<!-- Electrical Characteristics -->
<div class="section">
<h2 class="section-title">Electrical Characteristics</h2>
<div class="card">
<table class="detail-table">
<tr><td>Impedance @ 100MHz</td><td>600Ω ±25%</td></tr>
<tr><td>DC Resistance (initial)</td><td>0.34Ω</td></tr>
<tr><td>DC Resistance (post-test)</td><td>0.39Ω</td></tr>
<tr><td>Rated Current</td><td>500mA</td></tr>
<tr><td>Rated Current Condition</td><td>@ 125°C ambient</td></tr>
<tr><td>Test Frequency</td><td>100 MHz ±1 MHz</td></tr>
<tr><td>Test Equipment</td><td>Keysight 4291A</td></tr>
<tr><td>Type</td><td>Chip Ferrite Bead</td></tr>
</table>
</div>
</div>
<!-- Operating Conditions -->
<div class="section">
<h2 class="section-title">Operating Conditions</h2>
<div class="card">
<table class="detail-table">
<tr><td>Operating Temp</td><td>−55°C to +125°C</td></tr>
<tr><td>Storage Temp</td><td>−55°C to +125°C</td></tr>
<tr><td>Solder Compatibility</td><td>Sn-3.0Ag-0.5Cu</td></tr>
<tr><td>Mass</td><td>0.001g</td></tr>
</table>
</div>
</div>
</div>
<!-- Right column -->
<div>
<!-- Package Drawing -->
<div class="section">
<h2 class="section-title">Package & Dimensions</h2>
<div class="card">
<div class="pkg-drawing">
<svg width="100%" height="170" viewBox="0 0 480 170">
<!-- Top view centered at x=110 -->
<text x="110" y="14" fill="#8b949e" font-size="10" text-anchor="middle">Top View</text>
<rect x="50" y="22" width="120" height="60" rx="2" fill="#1c2128" stroke="#30363d" stroke-width="1.5"/>
<rect x="50" y="22" width="25" height="60" rx="1" fill="rgba(0,184,176,0.15)" stroke="#00b8b0" stroke-width="1"/>
<rect x="145" y="22" width="25" height="60" rx="1" fill="rgba(0,184,176,0.15)" stroke="#00b8b0" stroke-width="1"/>
<!-- Width dim -->
<line x1="50" y1="94" x2="170" y2="94" stroke="#484f58" stroke-width="0.5"/>
<line x1="50" y1="90" x2="50" y2="98" stroke="#484f58" stroke-width="0.5"/>
<line x1="170" y1="90" x2="170" y2="98" stroke="#484f58" stroke-width="0.5"/>
<text x="110" y="110" fill="#e6edf3" font-size="10" text-anchor="middle">1.0 ± 0.05</text>
<!-- Depth dim -->
<line x1="180" y1="22" x2="180" y2="82" stroke="#484f58" stroke-width="0.5"/>
<line x1="176" y1="22" x2="184" y2="22" stroke="#484f58" stroke-width="0.5"/>
<line x1="176" y1="82" x2="184" y2="82" stroke="#484f58" stroke-width="0.5"/>
<text x="195" y="56" fill="#e6edf3" font-size="10">0.50 ± 0.05</text>
<!-- Terminal width -->
<line x1="50" y1="120" x2="75" y2="120" stroke="#484f58" stroke-width="0.5" stroke-dasharray="2,2"/>
<text x="62" y="132" fill="#8b949e" font-size="9" text-anchor="middle">0.25 ± 0.1</text>
<!-- Side view centered at x=370 -->
<text x="370" y="14" fill="#8b949e" font-size="10" text-anchor="middle">Side View</text>
<rect x="310" y="40" width="120" height="38" rx="2" fill="#1c2128" stroke="#30363d" stroke-width="1.5"/>
<rect x="310" y="40" width="22" height="38" rx="1" fill="rgba(0,184,176,0.15)" stroke="#00b8b0" stroke-width="1"/>
<rect x="408" y="40" width="22" height="38" rx="1" fill="rgba(0,184,176,0.15)" stroke="#00b8b0" stroke-width="1"/>
<!-- Height dim -->
<line x1="440" y1="40" x2="440" y2="78" stroke="#484f58" stroke-width="0.5"/>
<line x1="436" y1="40" x2="444" y2="40" stroke="#484f58" stroke-width="0.5"/>
<line x1="436" y1="78" x2="444" y2="78" stroke="#484f58" stroke-width="0.5"/>
<text x="450" y="63" fill="#e6edf3" font-size="10">0.50 ± 0.05</text>
<!-- Physical specs -->
<text x="110" y="156" fill="#8b949e" font-size="10" text-anchor="middle">0402 (1005 metric)</text>
<text x="370" y="100" fill="#8b949e" font-size="10" text-anchor="middle">Mass: 0.001g</text>
</svg>
</div>
</div>
</div>
<!-- Land Pattern -->
<div class="section">
<h2 class="section-title">Recommended Land Pattern</h2>
<div class="card">
<table class="detail-table">
<tr><td>Pad Width (a)</td><td>0.4mm</td></tr>
<tr><td>Pad-to-Pad (b) — Reflow</td><td>1.2 to 1.4 mm</td></tr>
<tr><td>Pad Height (c)</td><td>0.5mm</td></tr>
<tr><td>Solder Paste Thickness</td><td>100–200 µm</td></tr>
</table>
</div>
</div>
</div>
</div>
<!-- Impedance vs Frequency Chart -->
<div class="section">
<h2 class="section-title">Impedance Behavior</h2>
<div class="chart-wrap">
<h3>Impedance vs. Frequency (characteristic shape for 600Ω ferrite bead)</h3>
<svg id="impedance-chart" width="100%" height="260" viewBox="0 0 700 260">
<!-- Grid -->
<rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>
<line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>
<line x1="60" y1="191" x2="660" y2="191" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<line x1="60" y1="163" x2="660" y2="163" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<line x1="60" y1="134" x2="660" y2="134" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<line x1="60" y1="105" x2="660" y2="105" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<line x1="60" y1="77" x2="660" y2="77" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<line x1="60" y1="48" x2="660" y2="48" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>
<!-- Vertical grid lines at freq markers -->
<line x1="160" y1="20" x2="160" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<line x1="260" y1="20" x2="260" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<line x1="360" y1="20" x2="360" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<line x1="460" y1="20" x2="460" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<line x1="560" y1="20" x2="560" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<!-- Impedance curve: broad hump peaking ~200-300MHz -->
<!-- Data: 1M:5, 10M:80, 50M:400, 100M:600, 200M:700(peak), 300M:650, 500M:500, 1G:300 -->
<!-- Y scale: 0=220, 700=34 => scale = (220-34)/700 = 0.2657 per ohm -->
<!-- X log scale: 1M=60, 10M=160, 50M=280, 100M=360, 200M=460, 300M=510, 500M=580, 1G=660 -->
<!-- |Z| curve (solid) -->
<path d="M60,219 Q110,216 160,199 Q220,174 280,114 Q320,74 360,62 Q410,40 460,34 Q485,38 510,43 Q545,55 580,67 Q620,100 660,134" stroke="#00b8b0" stroke-width="2.5" fill="none"/>
<!-- R curve (dashed) -->
<path d="M60,222 Q110,220 160,210 Q220,185 280,135 Q320,85 360,70 Q410,42 460,36 Q485,38 510,44 Q545,58 580,72 Q620,108 660,142" stroke="#d29922" stroke-width="1.5" fill="none" stroke-dasharray="6,3"/>
<!-- X curve (dotted) -->
<path d="M60,219 Q110,216 160,200 Q220,175 280,145 Q360,120 460,145 Q510,165 580,190 L620,198 L660,205" stroke="#8C6BF7" stroke-width="1.5" fill="none" stroke-dasharray="3,3"/>
<!-- Peak region label -->
<rect x="400" y="22" width="120" height="20" rx="4" fill="rgba(0,184,176,0.12)"/>
<text x="460" y="36" fill="#00b8b0" font-size="10" text-anchor="middle">Resistive dominant</text>
<!-- No SRF annotation for ferrite beads -->
<!-- Y axis labels -->
<text x="55" y="223" fill="#484f58" font-size="9" text-anchor="end">0 Ω</text>
<text x="55" y="194" fill="#484f58" font-size="9" text-anchor="end">100 Ω</text>
<text x="55" y="166" fill="#484f58" font-size="9" text-anchor="end">200 Ω</text>
<text x="55" y="137" fill="#484f58" font-size="9" text-anchor="end">300 Ω</text>
<text x="55" y="108" fill="#484f58" font-size="9" text-anchor="end">400 Ω</text>
<text x="55" y="80" fill="#484f58" font-size="9" text-anchor="end">500 Ω</text>
<text x="55" y="51" fill="#484f58" font-size="9" text-anchor="end">600 Ω</text>
<text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">700 Ω</text>
<text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">|Z| impedance</text>
<!-- X axis labels -->
<text x="60" y="248" fill="#484f58" font-size="9" text-anchor="middle">1M</text>
<text x="160" y="248" fill="#484f58" font-size="9" text-anchor="middle">10M</text>
<text x="280" y="248" fill="#484f58" font-size="9" text-anchor="middle">50M</text>
<text x="360" y="248" fill="#484f58" font-size="9" text-anchor="middle">100M</text>
<text x="460" y="248" fill="#484f58" font-size="9" text-anchor="middle">200M</text>
<text x="580" y="248" fill="#484f58" font-size="9" text-anchor="middle">500M</text>
<text x="660" y="248" fill="#484f58" font-size="9" text-anchor="middle">1G</text>
<!-- 100MHz spec marker -->
<line x1="360" y1="62" x2="360" y2="230" stroke="#00b8b0" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>
<text x="360" y="240" fill="#00b8b0" font-size="9" text-anchor="middle" opacity="0.7">100 MHz spec</text>
<!-- Legend -->
<line x1="80" y1="255" x2="100" y2="255" stroke="#00b8b0" stroke-width="2.5"/>
<text x="105" y="258" fill="#8b949e" font-size="8">|Z| — Impedance</text>
<line x1="240" y1="255" x2="260" y2="255" stroke="#d29922" stroke-width="1.5" stroke-dasharray="6,3"/>
<text x="265" y="258" fill="#8b949e" font-size="8">R — Resistance</text>
<line x1="400" y1="255" x2="420" y2="255" stroke="#8C6BF7" stroke-width="1.5" stroke-dasharray="3,3"/>
<text x="425" y="258" fill="#8b949e" font-size="8">X — Reactance</text>
</svg>
<div class="chart-note">Ferrite beads exhibit a broad impedance hump rather than a sharp resonance peak. The impedance is predominantly resistive near the peak, converting RF energy to heat. Rated impedance (600Ω) is specified at 100 MHz.</div>
</div>
</div>
<!-- Reflow Soldering Profile -->
<div class="section">
<h2 class="section-title">Reflow Soldering Profile</h2>
<div class="chart-wrap">
<h3>Standard Reflow Profile</h3>
<svg id="reflow-chart" width="100%" height="260" viewBox="0 0 700 260">
<rect x="60" y="10" width="600" height="180" fill="#0d1117" rx="4"/>
<!-- Grid -->
<line x1="60" y1="190" x2="660" y2="190" stroke="#21262d" stroke-width="1"/>
<line x1="60" y1="10" x2="60" y2="190" stroke="#21262d" stroke-width="1"/>
<line x1="60" y1="140" x2="660" y2="140" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<line x1="60" y1="90" x2="660" y2="90" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<line x1="60" y1="40" x2="660" y2="40" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>
<!-- Temperature profile -->
<path d="M80,185 L200,140 L300,140 L380,90 L420,35 L460,35 L500,90 L580,140 L660,185" stroke="#d29922" stroke-width="2.5" fill="none"/>
<!-- Limit profile (dashed) -->
<path d="M80,185 L200,140 L300,140 L370,75 L410,20 L470,20 L510,75 L580,140 L660,185" stroke="#f85149" stroke-width="1.5" fill="none" stroke-dasharray="5,4" opacity="0.6"/>
<!-- Zone annotations -->
<rect x="220" y="155" width="80" height="16" rx="3" fill="rgba(210,153,34,0.15)"/>
<text x="260" y="167" fill="#d29922" font-size="9" text-anchor="middle">Pre-heat</text>
<rect x="310" y="14" width="60" height="16" rx="3" fill="rgba(248,81,73,0.15)"/>
<text x="340" y="26" fill="#f85149" font-size="9" text-anchor="middle">Peak</text>
<!-- Temperature markers -->
<text x="55" y="143" fill="#484f58" font-size="9" text-anchor="end">150°C</text>
<text x="55" y="93" fill="#484f58" font-size="9" text-anchor="end">220°C</text>
<text x="55" y="38" fill="#484f58" font-size="9" text-anchor="end">245°C</text>
<!-- Limit temp -->
<text x="480" y="17" fill="#f85149" font-size="9">260°C limit</text>
<line x1="60" y1="15" x2="660" y2="15" stroke="#f85149" stroke-width="0.5" stroke-dasharray="2,3" opacity="0.4"/>
<!-- Pre-heat duration bracket -->
<line x1="200" y1="195" x2="300" y2="195" stroke="#484f58" stroke-width="1"/>
<line x1="200" y1="191" x2="200" y2="199" stroke="#484f58" stroke-width="1"/>
<line x1="300" y1="191" x2="300" y2="199" stroke="#484f58" stroke-width="1"/>
<text x="250" y="207" fill="#8b949e" font-size="8" text-anchor="middle">90s ± 30s</text>
<!-- Heating duration bracket -->
<line x1="380" y1="95" x2="500" y2="95" stroke="#484f58" stroke-width="1"/>
<line x1="380" y1="91" x2="380" y2="99" stroke="#484f58" stroke-width="1"/>
<line x1="500" y1="91" x2="500" y2="99" stroke="#484f58" stroke-width="1"/>
<text x="440" y="107" fill="#8b949e" font-size="8" text-anchor="middle">30–60s >220°C</text>
<!-- Total time bracket -->
<line x1="80" y1="220" x2="660" y2="220" stroke="#484f58" stroke-width="0.5"/>
<line x1="80" y1="216" x2="80" y2="224" stroke="#484f58" stroke-width="0.5"/>
<line x1="660" y1="216" x2="660" y2="224" stroke="#484f58" stroke-width="0.5"/>
<!-- X axis time markers -->
<text x="80" y="234" fill="#484f58" font-size="8" text-anchor="middle">0s</text>
<text x="200" y="234" fill="#484f58" font-size="8" text-anchor="middle">~60s</text>
<text x="300" y="234" fill="#484f58" font-size="8" text-anchor="middle">~150s</text>
<text x="420" y="234" fill="#484f58" font-size="8" text-anchor="middle">~200s</text>
<text x="500" y="234" fill="#484f58" font-size="8" text-anchor="middle">~240s</text>
<text x="660" y="234" fill="#484f58" font-size="8" text-anchor="middle">~360s</text>
<!-- Legend -->
<line x1="250" y1="248" x2="270" y2="248" stroke="#d29922" stroke-width="2"/>
<text x="275" y="252" fill="#8b949e" font-size="9">Standard</text>
<line x1="360" y1="248" x2="380" y2="248" stroke="#f85149" stroke-width="1.5" stroke-dasharray="4,3"/>
<text x="385" y="252" fill="#8b949e" font-size="9">Limit</text>
</svg>
<table class="profile-table">
<thead><tr><th>Phase</th><th>Standard</th><th>Limit</th></tr></thead>
<tbody>
<tr><td>Pre-heating</td><td>150–180°C, 90s ± 30s</td><td>Same</td></tr>
<tr><td>Heating</td><td>Above 220°C, 30–60s</td><td>Above 230°C, 60s max</td></tr>
<tr><td>Peak Temperature</td><td>245°C ± 3°C</td><td>260°C, 10s</td></tr>
<tr><td>Solder Alloy</td><td colspan="2">Sn-3.0Ag-0.5Cu</td></tr>
<tr><td>Cycles</td><td colspan="2">2 times max</td></tr>
</tbody>
</table>
</div>
</div>
<!-- Environmental & Reliability -->
<div class="section">
<h2 class="section-title">Environmental & Reliability</h2>
<div class="env-grid">
<div class="env-card">
<div class="env-name">Shear Test</div>
<div class="env-spec">No damage, ΔZ @ 100MHz ≤ ±30%</div>
<div class="env-detail">5N, 5s ±1s</div>
</div>
<div class="env-card">
<div class="env-name">Bending Test</div>
<div class="env-spec">No damage, ΔZ @ 100MHz ≤ ±30%</div>
<div class="env-detail">2.0mm deflection, R340, 30s</div>
</div>
<div class="env-card">
<div class="env-name">Vibration</div>
<div class="env-spec">No damage, ΔZ ≤ ±30%</div>
<div class="env-detail">10–55Hz, 1.5mm, 6h (3×2h)</div>
</div>
<div class="env-card">
<div class="env-name">Soldering Heat</div>
<div class="env-spec">No damage, ΔZ @ 100MHz ≤ ±30%</div>
<div class="env-detail">270±5°C, 10±0.5s, Sn-3.0Ag-0.5Cu</div>
</div>
<div class="env-card">
<div class="env-name">Solderability</div>
<div class="env-spec">≥95% wetting coverage</div>
<div class="env-detail">240±5°C, 3±1s</div>
</div>
<div class="env-card">
<div class="env-name">Temperature Cycle</div>
<div class="env-spec">No damage, ΔZ @ 100MHz ≤ ±30%</div>
<div class="env-detail">−55°C ↔ +125°C, 100 cycles (30min ea.)</div>
</div>
<div class="env-card">
<div class="env-name">Humidity</div>
<div class="env-spec">No damage, ΔZ @ 100MHz ≤ ±30%</div>
<div class="env-detail">40±2°C, 90–95% RH, 1000h</div>
</div>
<div class="env-card">
<div class="env-name">Heat Life</div>
<div class="env-spec">No damage, ΔZ @ 100MHz ≤ ±30%</div>
<div class="env-detail">125±3°C, 1000h, rated current</div>
</div>
</div>
</div>
<!-- Symbol, Footprint & 3D View -->
<div class="section">
<h2 class="section-title">Symbol, Footprint & 3D Model</h2>
<div class="grid-2" style="margin-bottom:12px">
<!-- Interactive SymView -->
<div class="card" style="padding:0;overflow:hidden">
<div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);padding:12px 16px 0">Schematic Symbol</div>
<iframe src="BLM15AX601SN1D-symview.html" style="width:100%;height:340px;border:none;display:block" allow="fullscreen"></iframe>
</div>
<!-- Interactive FpView -->
<div class="card" style="padding:0;overflow:hidden">
<div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);padding:12px 16px 0">Footprint (0402) — with solder jetting layout</div>
<iframe src="BLM15AX601SN1D-fpview.html" style="width:100%;height:340px;border:none;display:block" allow="fullscreen"></iframe>
</div>
</div>
<!-- 3D Model -->
<div class="card" style="text-align:center;margin-bottom:12px">
<div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);margin-bottom:12px">3D Model (interactive)</div>
<canvas id="viewer3d" width="600" height="300" style="width:100%;height:300px;border-radius:4px;cursor:grab"></canvas>
<div style="font-size:10px;color:var(--text-dim);margin-top:6px">Click & drag to rotate · Scroll to zoom</div>
</div>
<!-- Download / Export Bar -->
<div class="card" style="display:flex;align-items:center;gap:10px;flex-wrap:wrap">
<span style="font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.5px">Export:</span>
<a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/blm15ax601sn1d/BLM15AX601SN1D.kicad_sym" download>KiCad Symbol (.kicad_sym)</a>
<a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/blm15ax601sn1d/BLM15AX601SN1D.kicad_mod" download>KiCad Footprint (.kicad_mod)</a>
<a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/blm15ax601sn1d/BLM15AX601SN1D.lbr" download>Fusion 360 (.lbr)</a>
<a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/blm15ax601sn1d/BLM15AX601SN1D.step" download>3D Model (.step)</a>
</div>
</div>
<!-- Pricing & Availability -->
<div class="section">
<h2 class="section-title">Pricing & Availability</h2>
<div class="vendor-cards">
<div class="vendor-card recommended">
<div class="vc-name mouser">Mouser Electronics</div>
<div class="vc-price">$0.10</div>
<div class="vc-detail">$0.03 @ 100 pcs</div>
<div class="vc-detail">6,515 in stock · Lead: 84 days</div>
<div class="vc-detail">PN: 81-BLM15AX601SN1D</div>
<a class="vc-link" href="https://www.mouser.com/ProductDetail/Murata-Electronics/BLM15AX601SN1D" target="_blank">View on Mouser →</a>
</div>
<div class="vendor-card">
<div class="vc-name digikey">DigiKey</div>
<div class="vc-price">$0.10</div>
<div class="vc-detail">14,519 in stock</div>
<div class="vc-detail">PN: 490-5183-2-ND</div>
<a class="vc-link" href="https://www.digikey.com/en/products/detail/murata-electronics/BLM15AX601SN1D" target="_blank">View on DigiKey →</a>
</div>
<div class="vendor-card">
<div class="vc-name jlcpcb">JLCPCB / LCSC</div>
<div class="vc-price">—</div>
<div class="vc-detail">3,303 in stock</div>
<div class="vc-detail">Extended part</div>
<a class="vc-link" href="https://jlcpcb.com/parts" target="_blank">View on JLCPCB →</a>
</div>
</div>
</div>
<!-- Datasheet -->
<div class="section">
<h2 class="section-title">Documents</h2>
<div class="card">
<table class="detail-table">
<tr><td>Datasheet</td><td><button class="copy-btn" title="Copy link to clipboard" id="ds-copy-btn">⎘</button>
<script>document.getElementById('ds-copy-btn').addEventListener('click',function(){var t=document.createElement('textarea');t.value='https://www.mouser.com/datasheet/3/76/1/ENFA0018.pdf';document.body.appendChild(t);t.select();document.execCommand('copy');document.body.removeChild(t);this.textContent='Copied!';var b=this;setTimeout(function(){b.innerHTML='⎘'},1500)})</script> <a href="https://www.mouser.com/datasheet/3/76/1/ENFA0018.pdf" target="_blank">JENF243A-0018AQ (PDF) →</a></td></tr>
<tr><td>Spec Number</td><td>JENF243A_0018AQ-01</td></tr>
<tr><td>Manufacturer</td><td>Murata Mfg. Co., Ltd</td></tr>
<tr><td>Inventory Source</td><td><a href="https://inventory-2w8z8d9ojzzl.adom.cloud" target="_blank">Adom Parts Inventory →</a></td></tr>
</table>
</div>
</div>
<!-- Molecule -->
<div class="section">
<h2 class="section-title">Molecule — Single-Passive Board</h2>
<div class="card" style="padding:0;overflow:hidden;border-radius:8px">
<div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);padding:12px 16px 0">Interactive 3D Board Viewer</div>
<iframe src="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/blm15ax601sn1d/tsci-viewer/molecule-viewer/index.html"
style="width:100%;height:500px;border:none;border-radius:0 0 8px 8px;display:block"
allow="fullscreen"></iframe>
</div>
<div style="font-size:11px;color:var(--text-dim);margin-top:8px;text-align:center">
Orbit: click & drag · Zoom: scroll · Inspect: click a component · X-ray: toggle in toolbar
</div>
</div>
<div class="source">
BLM15AX601SN1D characterization · Data from Murata datasheet JENF243A-0018AQ + adom-parts-search · 2026-06-03
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/examples/js/pmrem/PMREMGenerator.js"></script>
<script>
(function() {
// 3D Viewer — BLM15AX601SN1D (0402 ferrite bead)
const canvas = document.getElementById('viewer3d');
if (canvas && window.THREE) {
const scene = new THREE.Scene();
const renderer = new THREE.WebGLRenderer({ canvas, antialias: true, alpha: true, logarithmicDepthBuffer: true });
renderer.setSize(canvas.width, canvas.height);
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
renderer.outputEncoding = THREE.sRGBEncoding;
renderer.toneMapping = THREE.ACESFilmicToneMapping;
renderer.toneMappingExposure = 1.2;
renderer.physicallyCorrectLights = true;
canvas.style.background = 'linear-gradient(180deg, #5a6b7e 0%, #2a3340 100%)';
const camera = new THREE.PerspectiveCamera(35, canvas.width / canvas.height, 0.01, 1000);
// Procedural environment map for PBR reflections
const pmremGen = new THREE.PMREMGenerator(renderer);
pmremGen.compileEquirectangularShader();
const envScene = new THREE.Scene();
envScene.background = new THREE.Color(0x3a4550);
const envLight1 = new THREE.DirectionalLight(0xffffff, 2);
envLight1.position.set(1, 3, 2);
envScene.add(envLight1);
const envLight2 = new THREE.DirectionalLight(0x8899bb, 1);
envLight2.position.set(-2, 1, -1);
envScene.add(envLight2);
const envRT = pmremGen.fromScene(envScene, 0.04);
scene.environment = envRT.texture;
// Studio lighting
const hemi = new THREE.HemisphereLight(0xe6edf3, 0xb3a699, 0.5);
scene.add(hemi);
const keyLight = new THREE.DirectionalLight(0xffffff, 1.5);
keyLight.position.set(2, 5, 3);
scene.add(keyLight);
const fillLight = new THREE.DirectionalLight(0x8899aa, 0.5);
fillLight.position.set(-3, 2, -2);
scene.add(fillLight);
const rimLight = new THREE.DirectionalLight(0x00b8b0, 0.3);
rimLight.position.set(0, -1, 3);
scene.add(rimLight);
const S = 2.0; // Slightly larger scale for small 0402
// PBR Materials — dark ferrite color for body
const bodyMat = new THREE.MeshStandardMaterial({ color: 0x1a1a1a, metalness: 0.0, roughness: 0.5 });
const termMat = new THREE.MeshStandardMaterial({ color: 0xc8ccd1, metalness: 1.0, roughness: 0.25,
polygonOffset: true, polygonOffsetFactor: -1, polygonOffsetUnits: -1 });
const padMat = new THREE.MeshStandardMaterial({ color: 0xc9a04c, metalness: 1.0, roughness: 0.22 });
const pcbMat = new THREE.MeshStandardMaterial({ color: 0x0a2a0a, metalness: 0.0, roughness: 0.6 });
// Body: 1.0 x 0.5 x 0.5 mm
const bodyW = 1.0, bodyD = 0.5, bodyH = 0.5;
const termW = 0.25;
const innerW = bodyW - termW * 2 + 0.02;
const body = new THREE.Mesh(new THREE.BoxGeometry(innerW*S, bodyH*S, bodyD*S), bodyMat);
body.position.y = bodyH*S/2;
scene.add(body);
// Terminals as L-shaped wraps
const termH = bodyH;
function makeTerminal(xSign) {
const group = new THREE.Group();
const front = new THREE.Mesh(new THREE.BoxGeometry(termW*S, termH*S, bodyD*S*0.99), termMat);
front.position.set(xSign*(bodyW/2 - termW/2)*S, termH*S/2, 0);
group.add(front);
const bot = new THREE.Mesh(new THREE.BoxGeometry((termW+0.04)*S, 0.05*S, bodyD*S*0.99), termMat);
bot.position.set(xSign*(bodyW/2 - termW/2)*S, 0.025*S, 0);
group.add(bot);
const top = new THREE.Mesh(new THREE.BoxGeometry((termW+0.04)*S, 0.05*S, bodyD*S*0.99), termMat);
top.position.set(xSign*(bodyW/2 - termW/2)*S, (bodyH-0.025)*S, 0);
group.add(top);
return group;
}
scene.add(makeTerminal(-1));
scene.add(makeTerminal(1));
// PCB
const pcb = new THREE.Mesh(new THREE.BoxGeometry(12*S, 0.08*S, 10*S), pcbMat);
pcb.position.y = -0.04*S;
scene.add(pcb);
// Gold ENIG pads
const pad1 = new THREE.Mesh(new THREE.BoxGeometry(0.4*S, 0.025*S, 0.5*S), padMat);
pad1.position.set(-0.4*S, 0.005*S, 0);
scene.add(pad1);
const pad2 = new THREE.Mesh(new THREE.BoxGeometry(0.4*S, 0.025*S, 0.5*S), padMat);
pad2.position.set(0.4*S, 0.005*S, 0);
scene.add(pad2);
// Subtle grid
const gridMat2 = new THREE.LineBasicMaterial({ color: 0x0d3d0d, transparent: true, opacity: 0.3 });
for (let i = -10; i <= 10; i++) {
const pts1 = [new THREE.Vector3(i*0.5*S, 0.045*S, -5*S), new THREE.Vector3(i*0.5*S, 0.045*S, 5*S)];
scene.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(pts1), gridMat2));
const pts2 = [new THREE.Vector3(-5*S, 0.045*S, i*0.5*S), new THREE.Vector3(5*S, 0.045*S, i*0.5*S)];
scene.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(pts2), gridMat2));
}
// Camera orbit
let isDragging = false, prevX = 0, prevY = 0;
let theta = Math.PI/4, phi = Math.PI/5.5, radius = 4.5;
const target = new THREE.Vector3(0, 0.3, 0);
function updateCamera() {
camera.position.x = radius * Math.sin(theta) * Math.cos(phi);
camera.position.y = radius * Math.sin(phi) + target.y;
camera.position.z = radius * Math.cos(theta) * Math.cos(phi);
camera.lookAt(target);
}
updateCamera();
canvas.addEventListener('mousedown', e => { isDragging = true; prevX = e.clientX; prevY = e.clientY; canvas.style.cursor = 'grabbing'; });
window.addEventListener('mouseup', () => { isDragging = false; canvas.style.cursor = 'grab'; });
canvas.addEventListener('mousemove', e => {
if (!isDragging) return;
theta -= (e.clientX - prevX) * 0.008;
phi = Math.max(0.05, Math.min(Math.PI/2.2, phi + (e.clientY - prevY) * 0.008));
prevX = e.clientX; prevY = e.clientY;
updateCamera();
});
canvas.addEventListener('wheel', e => {
e.preventDefault();
radius = Math.max(2, Math.min(10, radius + e.deltaY * 0.004));
updateCamera();
}, { passive: false });
function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); }
animate();
}
function setupChartTooltip(svgId, dataPoints, color, formatX, formatY) {
const svg = document.getElementById(svgId);
if (!svg) return;
const ns = 'http://www.w3.org/2000/svg';
const dot = document.createElementNS(ns, 'circle');
dot.setAttribute('r', '5');
dot.setAttribute('fill', color);
dot.setAttribute('stroke', '#0d1117');
dot.setAttribute('stroke-width', '2');
dot.style.display = 'none';
dot.style.pointerEvents = 'none';
svg.appendChild(dot);
const tipGroup = document.createElementNS(ns, 'g');
tipGroup.style.display = 'none';
tipGroup.style.pointerEvents = 'none';
const tipBg = document.createElementNS(ns, 'rect');
tipBg.setAttribute('rx', '4');
tipBg.setAttribute('fill', '#161b22');
tipBg.setAttribute('stroke', '#30363d');
tipBg.setAttribute('stroke-width', '1');
const tipLine1 = document.createElementNS(ns, 'text');
tipLine1.setAttribute('font-family', 'JetBrains Mono, monospace');
tipLine1.setAttribute('font-size', '10');
tipLine1.setAttribute('fill', '#e6edf3');
const tipLine2 = document.createElementNS(ns, 'text');
tipLine2.setAttribute('font-family', 'JetBrains Mono, monospace');
tipLine2.setAttribute('font-size', '10');
tipLine2.setAttribute('fill', color);
tipGroup.appendChild(tipBg);
tipGroup.appendChild(tipLine1);
tipGroup.appendChild(tipLine2);
svg.appendChild(tipGroup);
const vLine = document.createElementNS(ns, 'line');
vLine.setAttribute('stroke', color);
vLine.setAttribute('stroke-width', '0.5');
vLine.setAttribute('stroke-dasharray', '3,3');
vLine.setAttribute('opacity', '0.5');
vLine.style.display = 'none';
vLine.style.pointerEvents = 'none';
svg.appendChild(vLine);
function lerp(pts, svgX) {
if (svgX <= pts[0].sx) return pts[0];
if (svgX >= pts[pts.length-1].sx) return pts[pts.length-1];
for (let i = 0; i < pts.length - 1; i++) {
if (svgX >= pts[i].sx && svgX <= pts[i+1].sx) {
const t = (svgX - pts[i].sx) / (pts[i+1].sx - pts[i].sx);
return {
sx: svgX,
sy: pts[i].sy + t * (pts[i+1].sy - pts[i].sy),
vx: pts[i].vx + t * (pts[i+1].vx - pts[i].vx),
vy: pts[i].vy + t * (pts[i+1].vy - pts[i].vy),
};
}
}
return pts[0];
}
svg.addEventListener('mousemove', function(e) {
const pt = svg.createSVGPoint();
pt.x = e.clientX;
pt.y = e.clientY;
const svgPt = pt.matrixTransform(svg.getScreenCTM().inverse());
const minX = dataPoints[0].sx;
const maxX = dataPoints[dataPoints.length-1].sx;
if (svgPt.x < minX - 10 || svgPt.x > maxX + 10) {
dot.style.display = 'none';
tipGroup.style.display = 'none';
vLine.style.display = 'none';
return;
}
const p = lerp(dataPoints, svgPt.x);
dot.setAttribute('cx', p.sx);
dot.setAttribute('cy', p.sy);
dot.style.display = '';
vLine.setAttribute('x1', p.sx);
vLine.setAttribute('y1', p.sy);
vLine.setAttribute('x2', p.sx);
vLine.setAttribute('y2', 220);
vLine.style.display = '';
const xLabel = formatX(p.vx);
const yLabel = formatY(p.vy);
tipLine1.textContent = xLabel;
tipLine2.textContent = yLabel;
const tipX = p.sx + 12;
const tipY = p.sy - 28;
const boxW = Math.max(xLabel.length, yLabel.length) * 7 + 16;
const boxH = 32;
const adjustedX = tipX + boxW > 660 ? p.sx - boxW - 12 : tipX;
const adjustedY = tipY < 10 ? p.sy + 12 : tipY;
tipBg.setAttribute('x', adjustedX);
tipBg.setAttribute('y', adjustedY);
tipBg.setAttribute('width', boxW);
tipBg.setAttribute('height', boxH);
tipLine1.setAttribute('x', adjustedX + 8);
tipLine1.setAttribute('y', adjustedY + 13);
tipLine2.setAttribute('x', adjustedX + 8);
tipLine2.setAttribute('y', adjustedY + 26);
tipGroup.style.display = '';
});
svg.addEventListener('mouseleave', function() {
dot.style.display = 'none';
tipGroup.style.display = 'none';
vLine.style.display = 'none';
});
}
// Impedance chart data for 600 ohm ferrite bead
// Broad hump peaking ~200MHz at ~700 ohms
// Y: 0=220, 700=34 => scale factor = (220-34)/700 = 0.2657
const impedanceZ = [
{sx:60, sy:219, vx:1e6, vy:5},
{sx:110, sy:216, vx:5e6, vy:20},
{sx:160, sy:199, vx:10e6, vy:80},
{sx:220, sy:167, vx:25e6, vy:200},
{sx:280, sy:114, vx:50e6, vy:400},
{sx:360, sy:62, vx:100e6, vy:600},
{sx:410, sy:45, vx:150e6, vy:665},
{sx:460, sy:34, vx:200e6, vy:700},
{sx:485, sy:38, vx:250e6, vy:685},
{sx:510, sy:43, vx:300e6, vy:650},
{sx:545, sy:55, vx:400e6, vy:575},
{sx:580, sy:67, vx:500e6, vy:500},
{sx:620, sy:100, vx:700e6, vy:390},
{sx:660, sy:134, vx:1e9, vy:300},
];
const impedanceR = [
{sx:60, sy:222, vx:1e6, vy:1},
{sx:110, sy:220, vx:5e6, vy:8},
{sx:160, sy:210, vx:10e6, vy:40},
{sx:220, sy:185, vx:25e6, vy:120},
{sx:280, sy:135, vx:50e6, vy:300},
{sx:360, sy:70, vx:100e6, vy:550},
{sx:410, sy:48, vx:150e6, vy:640},
{sx:460, sy:36, vx:200e6, vy:690},
{sx:485, sy:38, vx:250e6, vy:680},
{sx:510, sy:44, vx:300e6, vy:640},
{sx:545, sy:58, vx:400e6, vy:560},
{sx:580, sy:72, vx:500e6, vy:480},
{sx:620, sy:108, vx:700e6, vy:370},
{sx:660, sy:142, vx:1e9, vy:280},
];
const impedanceX = [
{sx:60, sy:219, vx:1e6, vy:4.9},
{sx:110, sy:216, vx:5e6, vy:18},
{sx:160, sy:200, vx:10e6, vy:69},
{sx:220, sy:175, vx:25e6, vy:160},
{sx:280, sy:145, vx:50e6, vy:265},
{sx:360, sy:120, vx:100e6, vy:220},
{sx:410, sy:130, vx:150e6, vy:180},
{sx:460, sy:145, vx:200e6, vy:110},
{sx:510, sy:165, vx:300e6, vy:85},
{sx:580, sy:190, vx:500e6, vy:50},
{sx:660, sy:205, vx:1e9, vy:20},
];
function fmtFreq(f) {
if (f >= 1e9) return (f/1e9).toFixed(1) + ' GHz';
if (f >= 1e6) return (f/1e6).toFixed(1) + ' MHz';
return (f/1e3).toFixed(0) + ' kHz';
}
function fmtZ(z) {
if (z >= 1000) return (z/1000).toFixed(2) + ' kΩ';
if (z >= 1) return z.toFixed(1) + ' Ω';
return (z*1000).toFixed(0) + ' mΩ';
}
// Multi-curve impedance chart with click-to-switch
const impedanceCurves = [
{ data: impedanceZ, color: '#00b8b0', label: '|Z| — Impedance' },
{ data: impedanceR, color: '#d29922', label: 'R — Resistance' },
{ data: impedanceX, color: '#8C6BF7', label: 'X — Reactance' },
];
(function setupImpedanceMultiCurve() {
const svg = document.getElementById('impedance-chart');
if (!svg) return;
const ns = 'http://www.w3.org/2000/svg';
let activeIdx = 0;
const dot = document.createElementNS(ns, 'circle');
dot.setAttribute('r', '5'); dot.setAttribute('stroke', '#0d1117'); dot.setAttribute('stroke-width', '2');
dot.style.display = 'none'; dot.style.pointerEvents = 'none'; svg.appendChild(dot);
const vLine = document.createElementNS(ns, 'line');
vLine.setAttribute('stroke-width', '0.5'); vLine.setAttribute('stroke-dasharray', '3,3');
vLine.setAttribute('opacity', '0.5'); vLine.style.display = 'none'; vLine.style.pointerEvents = 'none'; svg.appendChild(vLine);
const tipGroup = document.createElementNS(ns, 'g');
tipGroup.style.display = 'none'; tipGroup.style.pointerEvents = 'none';
const tipBg = document.createElementNS(ns, 'rect');
tipBg.setAttribute('rx', '4'); tipBg.setAttribute('fill', '#161b22'); tipBg.setAttribute('stroke', '#30363d'); tipBg.setAttribute('stroke-width', '1');
const tipLine1 = document.createElementNS(ns, 'text');
tipLine1.setAttribute('font-family', 'JetBrains Mono, monospace'); tipLine1.setAttribute('font-size', '10'); tipLine1.setAttribute('fill', '#e6edf3');
const tipLine2 = document.createElementNS(ns, 'text');
tipLine2.setAttribute('font-family', 'JetBrains Mono, monospace'); tipLine2.setAttribute('font-size', '10');
const tipLine3 = document.createElementNS(ns, 'text');
tipLine3.setAttribute('font-family', 'JetBrains Mono, monospace'); tipLine3.setAttribute('font-size', '9'); tipLine3.setAttribute('fill', '#484f58');
tipGroup.appendChild(tipBg); tipGroup.appendChild(tipLine1); tipGroup.appendChild(tipLine2); tipGroup.appendChild(tipLine3); svg.appendChild(tipGroup);
function setActive(idx) { activeIdx = idx; var c = impedanceCurves[idx]; dot.setAttribute('fill', c.color); vLine.setAttribute('stroke', c.color); tipLine2.setAttribute('fill', c.color); }
setActive(0);
function lerp(pts, svgX) {
if (svgX <= pts[0].sx) return pts[0]; if (svgX >= pts[pts.length-1].sx) return pts[pts.length-1];
for (var i = 0; i < pts.length - 1; i++) { if (svgX >= pts[i].sx && svgX <= pts[i+1].sx) { var t = (svgX - pts[i].sx) / (pts[i+1].sx - pts[i].sx); return { sx: svgX, sy: pts[i].sy + t * (pts[i+1].sy - pts[i].sy), vx: pts[i].vx + t * (pts[i+1].vx - pts[i].vx), vy: pts[i].vy + t * (pts[i+1].vy - pts[i].vy) }; } }
return pts[0];
}
svg.addEventListener('click', function() { setActive((activeIdx + 1) % impedanceCurves.length); });
svg.addEventListener('mousemove', function(e) {
var pt = svg.createSVGPoint(); pt.x = e.clientX; pt.y = e.clientY;
var svgPt = pt.matrixTransform(svg.getScreenCTM().inverse());
var c = impedanceCurves[activeIdx]; var minX = c.data[0].sx, maxX = c.data[c.data.length-1].sx;
if (svgPt.x < minX - 10 || svgPt.x > maxX + 10) { dot.style.display = 'none'; tipGroup.style.display = 'none'; vLine.style.display = 'none'; return; }
var p = lerp(c.data, svgPt.x);
dot.setAttribute('cx', p.sx); dot.setAttribute('cy', p.sy); dot.style.display = '';
vLine.setAttribute('x1', p.sx); vLine.setAttribute('y1', p.sy); vLine.setAttribute('x2', p.sx); vLine.setAttribute('y2', 220); vLine.style.display = '';
var xLabel = fmtFreq(p.vx); var yLabel = fmtZ(p.vy); var curveLabel = 'Click to switch • ' + c.label;
tipLine1.textContent = xLabel; tipLine2.textContent = yLabel; tipLine3.textContent = curveLabel;
var tipX = p.sx + 12, tipY = p.sy - 38; var boxW = Math.max(xLabel.length, yLabel.length, curveLabel.length) * 6.5 + 16; var boxH = 44;
var adjustedX = tipX + boxW > 660 ? p.sx - boxW - 12 : tipX; var adjustedY = tipY < 10 ? p.sy + 12 : tipY;
tipBg.setAttribute('x', adjustedX); tipBg.setAttribute('y', adjustedY); tipBg.setAttribute('width', boxW); tipBg.setAttribute('height', boxH);
tipLine1.setAttribute('x', adjustedX + 8); tipLine1.setAttribute('y', adjustedY + 13);
tipLine2.setAttribute('x', adjustedX + 8); tipLine2.setAttribute('y', adjustedY + 26);
tipLine3.setAttribute('x', adjustedX + 8); tipLine3.setAttribute('y', adjustedY + 39);
tipGroup.style.display = '';
});
svg.addEventListener('mouseleave', function() { dot.style.display = 'none'; tipGroup.style.display = 'none'; vLine.style.display = 'none'; });
svg.style.cursor = 'pointer';
})();
// Reflow chart data
const reflowData = [
{sx:80, sy:185, vx:0, vy:25},
{sx:200, sy:140, vx:60, vy:150},
{sx:300, sy:140, vx:150, vy:150},
{sx:380, sy:90, vx:195, vy:220},
{sx:420, sy:35, vx:210, vy:245},
{sx:460, sy:35, vx:225, vy:245},
{sx:500, sy:90, vx:240, vy:220},
{sx:580, sy:140, vx:280, vy:150},
{sx:660, sy:185, vx:360, vy:25},
];
function fmtTime(t) { return t.toFixed(0) + 's'; }
function fmtTemp(t) { return t.toFixed(0) + '°C'; }
const reflowLimit = [
{sx:80, sy:185, vx:0, vy:25},
{sx:200, sy:140, vx:60, vy:150},
{sx:300, sy:140, vx:150, vy:150},
{sx:370, sy:75, vx:190, vy:230},
{sx:410, sy:15, vx:205, vy:270},
{sx:470, sy:15, vx:230, vy:270},
{sx:510, sy:75, vx:250, vy:230},
{sx:580, sy:140, vx:280, vy:150},
{sx:660, sy:185, vx:360, vy:25},
];
const reflowCurves = [
{ data: reflowData, color: '#d29922', label: 'Standard' },
{ data: reflowLimit, color: '#f85149', label: 'Limit' },
];
(function setupReflowMultiCurve() {
const svg = document.getElementById('reflow-chart');
if (!svg) return;
const ns = 'http://www.w3.org/2000/svg';
let activeIdx = 0;
const dot = document.createElementNS(ns, 'circle');
dot.setAttribute('r', '5');
dot.setAttribute('stroke', '#0d1117');
dot.setAttribute('stroke-width', '2');
dot.style.display = 'none';
dot.style.pointerEvents = 'none';
svg.appendChild(dot);
const vLine = document.createElementNS(ns, 'line');
vLine.setAttribute('stroke-width', '0.5');
vLine.setAttribute('stroke-dasharray', '3,3');
vLine.setAttribute('opacity', '0.5');
vLine.style.display = 'none';
vLine.style.pointerEvents = 'none';
svg.appendChild(vLine);
const tipGroup = document.createElementNS(ns, 'g');
tipGroup.style.display = 'none';
tipGroup.style.pointerEvents = 'none';
const tipBg = document.createElementNS(ns, 'rect');
tipBg.setAttribute('rx', '4');
tipBg.setAttribute('fill', '#161b22');
tipBg.setAttribute('stroke', '#30363d');
tipBg.setAttribute('stroke-width', '1');
const tipLine1 = document.createElementNS(ns, 'text');
tipLine1.setAttribute('font-family', 'JetBrains Mono, monospace');
tipLine1.setAttribute('font-size', '10');
tipLine1.setAttribute('fill', '#e6edf3');
const tipLine2 = document.createElementNS(ns, 'text');
tipLine2.setAttribute('font-family', 'JetBrains Mono, monospace');
tipLine2.setAttribute('font-size', '10');
const tipLine3 = document.createElementNS(ns, 'text');
tipLine3.setAttribute('font-family', 'JetBrains Mono, monospace');
tipLine3.setAttribute('font-size', '9');
tipLine3.setAttribute('fill', '#484f58');
tipGroup.appendChild(tipBg);
tipGroup.appendChild(tipLine1);
tipGroup.appendChild(tipLine2);
tipGroup.appendChild(tipLine3);
svg.appendChild(tipGroup);
function setActive(idx) {
activeIdx = idx;
const c = reflowCurves[idx];
dot.setAttribute('fill', c.color);
vLine.setAttribute('stroke', c.color);
tipLine2.setAttribute('fill', c.color);
}
setActive(0);
function lerp(pts, svgX) {
if (svgX <= pts[0].sx) return pts[0];
if (svgX >= pts[pts.length-1].sx) return pts[pts.length-1];
for (let i = 0; i < pts.length - 1; i++) {
if (svgX >= pts[i].sx && svgX <= pts[i+1].sx) {
const t = (svgX - pts[i].sx) / (pts[i+1].sx - pts[i].sx);
return {
sx: svgX,
sy: pts[i].sy + t * (pts[i+1].sy - pts[i].sy),
vx: pts[i].vx + t * (pts[i+1].vx - pts[i].vx),
vy: pts[i].vy + t * (pts[i+1].vy - pts[i].vy),
};
}
}
return pts[0];
}
svg.addEventListener('click', function() {
setActive((activeIdx + 1) % reflowCurves.length);
});
svg.addEventListener('mousemove', function(e) {
const pt = svg.createSVGPoint();
pt.x = e.clientX; pt.y = e.clientY;
const svgPt = pt.matrixTransform(svg.getScreenCTM().inverse());
const c = reflowCurves[activeIdx];
const minX = c.data[0].sx, maxX = c.data[c.data.length-1].sx;
if (svgPt.x < minX - 10 || svgPt.x > maxX + 10) {
dot.style.display = 'none'; tipGroup.style.display = 'none'; vLine.style.display = 'none';
return;
}
const p = lerp(c.data, svgPt.x);
dot.setAttribute('cx', p.sx); dot.setAttribute('cy', p.sy); dot.style.display = '';
vLine.setAttribute('x1', p.sx); vLine.setAttribute('y1', p.sy);
vLine.setAttribute('x2', p.sx); vLine.setAttribute('y2', 195); vLine.style.display = '';
const xLabel = fmtTime(p.vx);
const yLabel = 'Temp = ' + fmtTemp(p.vy);
const curveLabel = 'Click to switch • ' + c.label;
tipLine1.textContent = xLabel;
tipLine2.textContent = yLabel;
tipLine3.textContent = curveLabel;
const tipX = p.sx + 12, tipY = p.sy - 38;
const boxW = Math.max(xLabel.length, yLabel.length, curveLabel.length) * 6.5 + 16;
const boxH = 44;
const adjustedX = tipX + boxW > 660 ? p.sx - boxW - 12 : tipX;
const adjustedY = tipY < 10 ? p.sy + 12 : tipY;
tipBg.setAttribute('x', adjustedX); tipBg.setAttribute('y', adjustedY);
tipBg.setAttribute('width', boxW); tipBg.setAttribute('height', boxH);
tipLine1.setAttribute('x', adjustedX + 8); tipLine1.setAttribute('y', adjustedY + 13);
tipLine2.setAttribute('x', adjustedX + 8); tipLine2.setAttribute('y', adjustedY + 26);
tipLine3.setAttribute('x', adjustedX + 8); tipLine3.setAttribute('y', adjustedY + 39);
tipGroup.style.display = '';
});
svg.addEventListener('mouseleave', function() {
dot.style.display = 'none'; tipGroup.style.display = 'none'; vLine.style.display = 'none';
});
svg.style.cursor = 'pointer';
})();
})();
</script>
</div>
</body>
</html>