-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathESeries.js
More file actions
128 lines (112 loc) · 5.15 KB
/
Copy pathESeries.js
File metadata and controls
128 lines (112 loc) · 5.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/* E-Series Standard Component Value Finder — IEC 60063
*
* Preferred values: Rₙ = 10^(n/N) · 10^decade, n = 0..N−1
* E6→N=6, E12→N=12, E24→N=24, E48→N=48, E96→N=96, E192→N=192
* Nearest value found by minimum absolute error across ±1 decade.
*/
var E_SERIES = {
E6: [1.0, 1.5, 2.2, 3.3, 4.7, 6.8],
E12: [1.0, 1.2, 1.5, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7, 5.6, 6.8, 8.2],
E24: [1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0,
3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1],
E48: [1.00,1.05,1.10,1.15,1.21,1.27,1.33,1.40,1.47,1.54,1.62,1.69,
1.78,1.87,1.96,2.05,2.15,2.26,2.37,2.49,2.61,2.74,2.87,3.01,
3.16,3.32,3.48,3.65,3.83,4.02,4.22,4.42,4.64,4.87,5.11,5.36,
5.62,5.90,6.19,6.49,6.81,7.15,7.50,7.87,8.25,8.66,9.09,9.53],
E96: [1.00,1.02,1.05,1.07,1.10,1.13,1.15,1.18,1.21,1.24,1.27,1.30,
1.33,1.37,1.40,1.43,1.47,1.50,1.54,1.58,1.62,1.65,1.69,1.74,
1.78,1.82,1.87,1.91,1.96,2.00,2.05,2.10,2.15,2.21,2.26,2.32,
2.37,2.43,2.49,2.55,2.61,2.67,2.74,2.80,2.87,2.94,3.01,3.09,
3.16,3.24,3.32,3.40,3.48,3.57,3.65,3.74,3.83,3.92,4.02,4.12,
4.22,4.32,4.42,4.53,4.64,4.75,4.87,4.99,5.11,5.23,5.36,5.49,
5.62,5.76,5.90,6.04,6.19,6.34,6.49,6.65,6.81,6.98,7.15,7.32,
7.50,7.68,7.87,8.06,8.25,8.45,8.66,8.87,9.09,9.31,9.53,9.76],
E192:[1.00,1.01,1.02,1.04,1.05,1.06,1.07,1.09,1.10,1.11,1.13,1.14,
1.15,1.17,1.18,1.20,1.21,1.23,1.24,1.26,1.27,1.29,1.30,1.32,
1.33,1.35,1.37,1.38,1.40,1.42,1.43,1.45,1.47,1.49,1.50,1.52,
1.54,1.56,1.58,1.60,1.62,1.64,1.65,1.67,1.69,1.72,1.74,1.76,
1.78,1.80,1.82,1.84,1.87,1.89,1.91,1.93,1.96,1.98,2.00,2.03,
2.05,2.08,2.10,2.13,2.15,2.18,2.21,2.23,2.26,2.29,2.32,2.34,
2.37,2.40,2.43,2.46,2.49,2.52,2.55,2.58,2.61,2.64,2.67,2.71,
2.74,2.77,2.80,2.84,2.87,2.91,2.94,2.98,3.01,3.05,3.09,3.12,
3.16,3.20,3.24,3.28,3.32,3.36,3.40,3.44,3.48,3.52,3.57,3.61,
3.65,3.70,3.74,3.79,3.83,3.88,3.92,3.97,4.02,4.07,4.12,4.17,
4.22,4.27,4.32,4.37,4.42,4.48,4.53,4.59,4.64,4.70,4.75,4.81,
4.87,4.93,4.99,5.05,5.11,5.17,5.23,5.30,5.36,5.42,5.49,5.56,
5.62,5.69,5.76,5.83,5.90,5.97,6.04,6.12,6.19,6.26,6.34,6.42,
6.49,6.57,6.65,6.73,6.81,6.90,6.98,7.06,7.15,7.23,7.32,7.41,
7.50,7.59,7.68,7.77,7.87,7.96,8.06,8.16,8.25,8.35,8.45,8.56,
8.66,8.76,8.87,8.98,9.09,9.20,9.31,9.42,9.53,9.65,9.76,9.88]
};
var UNIT_INFO = {
'ohm': { mul: 1, base: 'Ω' },
'kohm': { mul: 1e3, base: 'Ω' },
'Mohm': { mul: 1e6, base: 'Ω' },
'pF': { mul: 1e-12, base: 'F' },
'nF': { mul: 1e-9, base: 'F' },
'uF': { mul: 1e-6, base: 'F' },
'nH': { mul: 1e-9, base: 'H' },
'uH': { mul: 1e-6, base: 'H' }
};
document.getElementById('es-btn').addEventListener('click', es_calc);
function es_calc() {
clearError();
var raw = parseFloat(document.getElementById('es-val').value.trim());
var unitKey = document.getElementById('es-unit').value;
var series = document.getElementById('es-series').value;
if (!(raw > 0) || !isFinite(raw)) { showError('Enter a valid positive value.'); return; }
var info = UNIT_INFO[unitKey];
var target = raw * info.mul; // in base units (Ω / F / H)
var nearest = findNearest(target, series);
showResults(nearest, target, series, info.base);
}
function findNearest(target, series) {
var table = E_SERIES[series];
var log10 = Math.log(target) / Math.LN10;
var decade = Math.floor(log10);
var candidates = [];
for (var d = decade - 1; d <= decade + 1; d++) {
var mul = Math.pow(10, d);
table.forEach(function(v) { candidates.push(v * mul); });
}
candidates.sort(function(a, b) {
return Math.abs(a - target) - Math.abs(b - target);
});
var seen = {}, out = [];
candidates.forEach(function(v) {
var key = v.toPrecision(4);
if (!seen[key] && out.length < 5) { seen[key] = true; out.push(v); }
});
return out;
}
function showResults(vals, target, series, baseUnit) {
var container = document.getElementById('es-results');
container.innerHTML = '';
container.style.display = 'grid';
var card = document.createElement('div');
card.className = 'res-card';
card.innerHTML = '<h4>' + series + ' — Nearest 5 Values</h4>' +
'<div class="res-row" style="font-size:11px;color:#888;margin-bottom:4px;">' +
'<span class="res-lbl">Standard value</span>' +
'<span class="res-val">Error from target</span></div>';
vals.forEach(function(v, i) {
var err = (v - target) / target * 100;
var errStr = (err >= 0 ? '+' : '') + err.toFixed(2) + '%';
var label = engFmt(v, baseUnit);
var hi = (i === 0) ? ' style="font-weight:700;color:#AA77FF;"' : '';
card.innerHTML +=
'<div class="res-row">' +
'<span class="res-lbl"' + hi + '>' + label + '</span>' +
'<span class="res-val"' + hi + '>' + errStr + '</span></div>';
});
container.appendChild(card);
if (window.drawDiagram) window.drawDiagram(series, vals.length);
}
function showError(msg) {
var el = document.getElementById('es-error');
if (el) el.textContent = msg;
}
function clearError() {
var el = document.getElementById('es-error');
if (el) el.textContent = '';
}