kopia lustrzana https://github.com/miguelvaca/vk3cpu
rodzic
c43f663be1
commit
3196e6098e
278
magloop.html
278
magloop.html
|
@ -7,7 +7,7 @@
|
||||||
<link rel="stylesheet" href="magloop.css">
|
<link rel="stylesheet" href="magloop.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>Miguel <a href="mailto:vk3cpu@gmail.com">VK3CPU</a> - Magloop Antenna Calculator V10.2</header>
|
<header>Miguel <a href="mailto:vk3cpu@gmail.com">VK3CPU</a> - Magloop Antenna Calculator V10.3</header>
|
||||||
<section class="gridLayoutClass">
|
<section class="gridLayoutClass">
|
||||||
<div class="chart-container" style="position: relative;">
|
<div class="chart-container" style="position: relative;">
|
||||||
<canvas id="chartCanvas" class="chartCanvasClass">
|
<canvas id="chartCanvas" class="chartCanvasClass">
|
||||||
|
@ -45,9 +45,9 @@
|
||||||
<label>Imp</label>
|
<label>Imp</label>
|
||||||
<input type="radio" name="unit_radio" id="imperial_radio" value="imperial"/>
|
<input type="radio" name="unit_radio" id="imperial_radio" value="imperial"/>
|
||||||
<label>Cu</label>
|
<label>Cu</label>
|
||||||
<input type="radio" name="metal_radio" id="copper_radio" value="copper" checked/>
|
<input type="radio" name="metal_radio" id="copper_radio" value="Cu" checked/>
|
||||||
<label>Al</label>
|
<label>Al</label>
|
||||||
<input type="radio" name="metal_radio" id="aluminium_radio" value="aluminium"/>
|
<input type="radio" name="metal_radio" id="aluminium_radio" value="Al"/>
|
||||||
<label>Circ</label>
|
<label>Circ</label>
|
||||||
<input type="radio" name="shape_radio" id="circle_radio" value="circle" checked/>
|
<input type="radio" name="shape_radio" id="circle_radio" value="circle" checked/>
|
||||||
<label>Oct</label>
|
<label>Oct</label>
|
||||||
|
@ -136,6 +136,8 @@
|
||||||
[3]: F W Grover, <b>"Formulas and Tables for the Calculation of the Inductance of Coils of Polygonal Form"</b> <i>Scientific Papers of the Bureau of Standards, Vol 18, p753</i> <br>
|
[3]: F W Grover, <b>"Formulas and Tables for the Calculation of the Inductance of Coils of Polygonal Form"</b> <i>Scientific Papers of the Bureau of Standards, Vol 18, p753</i> <br>
|
||||||
<br>
|
<br>
|
||||||
<b><u>Change history:</u></b><br>
|
<b><u>Change history:</u></b><br>
|
||||||
|
<b>[26-Aug-23] - V10.3</b> <br>
|
||||||
|
* Added support for URL parameters. Some code-base clean-up. <br>
|
||||||
<b>[13-May-23] - V10.2</b> <br>
|
<b>[13-May-23] - V10.2</b> <br>
|
||||||
* Changed radiation and loss resistance to logarithmic. Capacitance limited to 5-5000pF. <br>
|
* Changed radiation and loss resistance to logarithmic. Capacitance limited to 5-5000pF. <br>
|
||||||
<b>[8-May-23] - V10.1</b> <br>
|
<b>[8-May-23] - V10.1</b> <br>
|
||||||
|
@ -263,11 +265,42 @@
|
||||||
window.history.replaceState(null, null, new_url);
|
window.history.replaceState(null, null, new_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getUnits() {
|
||||||
|
var unit_radio = document.getElementsByName("unit_radio");
|
||||||
|
for(var i = 0; i < unit_radio.length; i++) {
|
||||||
|
if(unit_radio[i].checked == true) {
|
||||||
|
return unit_radio[i].value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "null";
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMetal() {
|
||||||
|
var metal_radio = document.getElementsByName("metal_radio");
|
||||||
|
for(var i = 0; i < metal_radio.length; i++) {
|
||||||
|
if(metal_radio[i].checked == true) {
|
||||||
|
return metal_radio[i].value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "null";
|
||||||
|
}
|
||||||
|
|
||||||
|
function getShape() {
|
||||||
|
var shape_radio = document.getElementsByName("shape_radio");
|
||||||
|
for(var i = 0; i < shape_radio.length; i++) {
|
||||||
|
if(shape_radio[i].checked == true) {
|
||||||
|
return shape_radio[i].value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "null";
|
||||||
|
}
|
||||||
|
|
||||||
// Global variables:
|
// Global variables:
|
||||||
var units = "metric";
|
var units = getUnits();
|
||||||
|
var metal = getMetal(); // Default metal is copper
|
||||||
var conductivity = 58e6; // Default is annealed copper
|
var conductivity = 58e6; // Default is annealed copper
|
||||||
var shape = "circle"; // Shape of the main loop
|
var shape = getShape();
|
||||||
var loop_turns = 1; //
|
var loop_turns = 1;
|
||||||
var loop_mode = "series"; // Series or parallel. When loop_turns_slider.value == 0, loop_turns is 2 and loop_mode is "parallel"
|
var loop_mode = "series"; // Series or parallel. When loop_turns_slider.value == 0, loop_turns is 2 and loop_mode is "parallel"
|
||||||
const mu0 = Math.PI * 4e-7;
|
const mu0 = Math.PI * 4e-7;
|
||||||
|
|
||||||
|
@ -278,7 +311,6 @@
|
||||||
var srf = 0.0; // Self-resonant frequency SRF
|
var srf = 0.0; // Self-resonant frequency SRF
|
||||||
var conductor_length = 0.0; // Total conductor length
|
var conductor_length = 0.0; // Total conductor length
|
||||||
var R_ext = 0.0; // External losses due to capacitor resistance and ground effects, in ohms
|
var R_ext = 0.0; // External losses due to capacitor resistance and ground effects, in ohms
|
||||||
var metal = "Cu"; // Default metal is copper
|
|
||||||
|
|
||||||
const proximityResistance = {
|
const proximityResistance = {
|
||||||
// From G. S. Smith, "Radiation Efficiency of Electrically Small Multiturn Loop Antennas", IEEE Trans Antennas Propagation, September 1972
|
// From G. S. Smith, "Radiation Efficiency of Electrically Small Multiturn Loop Antennas", IEEE Trans Antennas Propagation, September 1972
|
||||||
|
@ -324,6 +356,15 @@
|
||||||
? ((((perimeter* loop_turns) ** 2.0) + ((loop_spacing_slider.value * conductor_diameter_slider.value * 1e-3 * loop_turns) ** 2.0)) ** 0.5)
|
? ((((perimeter* loop_turns) ** 2.0) + ((loop_spacing_slider.value * conductor_diameter_slider.value * 1e-3 * loop_turns) ** 2.0)) ** 0.5)
|
||||||
: (perimeter* loop_turns);
|
: (perimeter* loop_turns);
|
||||||
R_ext = external_losses_slider.value * 0.001;
|
R_ext = external_losses_slider.value * 0.001;
|
||||||
|
|
||||||
|
units = getUnits();
|
||||||
|
shape = getShape();
|
||||||
|
metal = getMetal();
|
||||||
|
if(metal == "Cu") {
|
||||||
|
conductivity = 58e6; // Default is annealed copper
|
||||||
|
} else if(metal == "Al") {
|
||||||
|
conductivity = 35e6;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the loop area in square meters:
|
// Returns the loop area in square meters:
|
||||||
|
@ -664,149 +705,63 @@
|
||||||
return (1.0 / (2.0 * Math.PI * ((inductance * loop_capacitance) ** 0.5)));
|
return (1.0 / (2.0 * Math.PI * ((inductance * loop_capacitance) ** 0.5)));
|
||||||
}
|
}
|
||||||
|
|
||||||
metric_radio.oninput = function() {
|
function updateUnits() {
|
||||||
units = metric_radio.value;
|
|
||||||
//console.log(units);
|
|
||||||
setGlobals();
|
setGlobals();
|
||||||
drawFrontDesign();
|
drawFrontDesign();
|
||||||
drawSideDesign();
|
drawSideDesign();
|
||||||
updateURL();
|
updateURL();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateAll() {
|
||||||
|
setGlobals();
|
||||||
|
drawFrontDesign();
|
||||||
|
drawSideDesign();
|
||||||
|
updateFrequencies();
|
||||||
|
myChart.data.datasets[0].data = calculateTuningCapacitor();
|
||||||
|
myChart.data.datasets[1].data = calculateCapacitorVoltage();
|
||||||
|
myChart.data.datasets[2].data = calculateBandwidth();
|
||||||
|
myChart.data.datasets[3].data = calculateEfficiencyFactor();
|
||||||
|
myChart.data.datasets[4].data = calculateRadiationResistance();
|
||||||
|
myChart.data.datasets[5].data = calculateLossResistance();
|
||||||
|
myChart.data.datasets[6].data = calculateInductiveReactance();
|
||||||
|
myChart.data.datasets[7].data = calculateQualityFactor();
|
||||||
|
myChart.data.datasets[8].data = calculateCirculatingCurrent();
|
||||||
|
myChart.data.datasets[9].data = calculateAntennaSize();
|
||||||
|
myChart.data.datasets[10].data = calculateSkinDepth();
|
||||||
|
myChart.update();
|
||||||
|
updateURL();
|
||||||
|
}
|
||||||
|
|
||||||
|
metric_radio.oninput = function() {
|
||||||
|
updateUnits();
|
||||||
|
}
|
||||||
|
|
||||||
imperial_radio.oninput = function() {
|
imperial_radio.oninput = function() {
|
||||||
units = imperial_radio.value;
|
updateUnits();
|
||||||
//console.log(units);
|
|
||||||
drawFrontDesign();
|
|
||||||
drawSideDesign();
|
|
||||||
updateURL();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
copper_radio.oninput = function() {
|
copper_radio.oninput = function() {
|
||||||
conductivity = 58e6;
|
updateAll();
|
||||||
metal = "Cu";
|
|
||||||
setGlobals();
|
|
||||||
drawFrontDesign();
|
|
||||||
drawSideDesign();
|
|
||||||
updateFrequencies();
|
|
||||||
myChart.data.datasets[0].data = calculateTuningCapacitor();
|
|
||||||
myChart.data.datasets[1].data = calculateCapacitorVoltage();
|
|
||||||
myChart.data.datasets[2].data = calculateBandwidth();
|
|
||||||
myChart.data.datasets[3].data = calculateEfficiencyFactor();
|
|
||||||
myChart.data.datasets[4].data = calculateRadiationResistance();
|
|
||||||
myChart.data.datasets[5].data = calculateLossResistance();
|
|
||||||
myChart.data.datasets[6].data = calculateInductiveReactance();
|
|
||||||
myChart.data.datasets[7].data = calculateQualityFactor();
|
|
||||||
myChart.data.datasets[8].data = calculateCirculatingCurrent();
|
|
||||||
myChart.data.datasets[9].data = calculateAntennaSize();
|
|
||||||
myChart.data.datasets[10].data = calculateSkinDepth();
|
|
||||||
myChart.update();
|
|
||||||
updateURL();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
aluminium_radio.oninput = function() {
|
aluminium_radio.oninput = function() {
|
||||||
conductivity = 35e6;
|
updateAll();
|
||||||
metal = "Al";
|
|
||||||
setGlobals();
|
|
||||||
drawFrontDesign();
|
|
||||||
drawSideDesign();
|
|
||||||
updateFrequencies();
|
|
||||||
myChart.data.datasets[0].data = calculateTuningCapacitor();
|
|
||||||
myChart.data.datasets[1].data = calculateCapacitorVoltage();
|
|
||||||
myChart.data.datasets[2].data = calculateBandwidth();
|
|
||||||
myChart.data.datasets[3].data = calculateEfficiencyFactor();
|
|
||||||
myChart.data.datasets[4].data = calculateRadiationResistance();
|
|
||||||
myChart.data.datasets[5].data = calculateLossResistance();
|
|
||||||
myChart.data.datasets[6].data = calculateInductiveReactance();
|
|
||||||
myChart.data.datasets[7].data = calculateQualityFactor();
|
|
||||||
myChart.data.datasets[8].data = calculateCirculatingCurrent();
|
|
||||||
myChart.data.datasets[9].data = calculateAntennaSize();
|
|
||||||
myChart.data.datasets[10].data = calculateSkinDepth();
|
|
||||||
myChart.update();
|
|
||||||
updateURL();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
circle_radio.oninput = function() {
|
circle_radio.oninput = function() {
|
||||||
shape = "circle";
|
updateAll();
|
||||||
setGlobals();
|
|
||||||
drawFrontDesign();
|
|
||||||
drawSideDesign();
|
|
||||||
updateFrequencies();
|
|
||||||
myChart.data.datasets[0].data = calculateTuningCapacitor();
|
|
||||||
myChart.data.datasets[1].data = calculateCapacitorVoltage();
|
|
||||||
myChart.data.datasets[2].data = calculateBandwidth();
|
|
||||||
myChart.data.datasets[3].data = calculateEfficiencyFactor();
|
|
||||||
myChart.data.datasets[4].data = calculateRadiationResistance();
|
|
||||||
myChart.data.datasets[5].data = calculateLossResistance();
|
|
||||||
myChart.data.datasets[6].data = calculateInductiveReactance();
|
|
||||||
myChart.data.datasets[7].data = calculateQualityFactor();
|
|
||||||
myChart.data.datasets[8].data = calculateCirculatingCurrent();
|
|
||||||
myChart.data.datasets[9].data = calculateAntennaSize();
|
|
||||||
myChart.data.datasets[10].data = calculateSkinDepth();
|
|
||||||
myChart.update();
|
|
||||||
updateURL();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
oct_radio.oninput = function() {
|
oct_radio.oninput = function() {
|
||||||
shape = "octagon";
|
updateAll();
|
||||||
setGlobals();
|
|
||||||
drawFrontDesign();
|
|
||||||
drawSideDesign();
|
|
||||||
updateFrequencies();
|
|
||||||
myChart.data.datasets[0].data = calculateTuningCapacitor();
|
|
||||||
myChart.data.datasets[1].data = calculateCapacitorVoltage();
|
|
||||||
myChart.data.datasets[2].data = calculateBandwidth();
|
|
||||||
myChart.data.datasets[3].data = calculateEfficiencyFactor();
|
|
||||||
myChart.data.datasets[4].data = calculateRadiationResistance();
|
|
||||||
myChart.data.datasets[5].data = calculateLossResistance();
|
|
||||||
myChart.data.datasets[6].data = calculateInductiveReactance();
|
|
||||||
myChart.data.datasets[7].data = calculateQualityFactor();
|
|
||||||
myChart.data.datasets[8].data = calculateCirculatingCurrent();
|
|
||||||
myChart.data.datasets[9].data = calculateAntennaSize();
|
|
||||||
myChart.data.datasets[10].data = calculateSkinDepth();
|
|
||||||
myChart.update();
|
|
||||||
updateURL();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hex_radio.oninput = function() {
|
hex_radio.oninput = function() {
|
||||||
shape = "hexagon";
|
updateAll();
|
||||||
setGlobals();
|
|
||||||
drawFrontDesign();
|
|
||||||
drawSideDesign();
|
|
||||||
updateFrequencies();
|
|
||||||
myChart.data.datasets[0].data = calculateTuningCapacitor();
|
|
||||||
myChart.data.datasets[1].data = calculateCapacitorVoltage();
|
|
||||||
myChart.data.datasets[2].data = calculateBandwidth();
|
|
||||||
myChart.data.datasets[3].data = calculateEfficiencyFactor();
|
|
||||||
myChart.data.datasets[4].data = calculateRadiationResistance();
|
|
||||||
myChart.data.datasets[5].data = calculateLossResistance();
|
|
||||||
myChart.data.datasets[6].data = calculateInductiveReactance();
|
|
||||||
myChart.data.datasets[7].data = calculateQualityFactor();
|
|
||||||
myChart.data.datasets[8].data = calculateCirculatingCurrent();
|
|
||||||
myChart.data.datasets[9].data = calculateAntennaSize();
|
|
||||||
myChart.data.datasets[10].data = calculateSkinDepth();
|
|
||||||
myChart.update();
|
|
||||||
updateURL();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
square_radio.oninput = function() {
|
square_radio.oninput = function() {
|
||||||
shape = "square";
|
updateAll();
|
||||||
setGlobals();
|
|
||||||
drawFrontDesign();
|
|
||||||
drawSideDesign();
|
|
||||||
updateFrequencies();
|
|
||||||
myChart.data.datasets[0].data = calculateTuningCapacitor();
|
|
||||||
myChart.data.datasets[1].data = calculateCapacitorVoltage();
|
|
||||||
myChart.data.datasets[2].data = calculateBandwidth();
|
|
||||||
myChart.data.datasets[3].data = calculateEfficiencyFactor();
|
|
||||||
myChart.data.datasets[4].data = calculateRadiationResistance();
|
|
||||||
myChart.data.datasets[5].data = calculateLossResistance();
|
|
||||||
myChart.data.datasets[6].data = calculateInductiveReactance();
|
|
||||||
myChart.data.datasets[7].data = calculateQualityFactor();
|
|
||||||
myChart.data.datasets[8].data = calculateCirculatingCurrent();
|
|
||||||
myChart.data.datasets[9].data = calculateAntennaSize();
|
|
||||||
myChart.data.datasets[10].data = calculateSkinDepth();
|
|
||||||
myChart.update();
|
|
||||||
updateURL();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Specify fonts for changing parameters controlled by the sliders:
|
// Specify fonts for changing parameters controlled by the sliders:
|
||||||
|
@ -840,23 +795,7 @@
|
||||||
}, emphasis_delay);
|
}, emphasis_delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
setGlobals();
|
updateUnits();
|
||||||
drawFrontDesign();
|
|
||||||
drawSideDesign();
|
|
||||||
updateFrequencies();
|
|
||||||
myChart.data.datasets[0].data = calculateTuningCapacitor();
|
|
||||||
myChart.data.datasets[1].data = calculateCapacitorVoltage();
|
|
||||||
myChart.data.datasets[2].data = calculateBandwidth();
|
|
||||||
myChart.data.datasets[3].data = calculateEfficiencyFactor();
|
|
||||||
myChart.data.datasets[4].data = calculateRadiationResistance();
|
|
||||||
myChart.data.datasets[5].data = calculateLossResistance();
|
|
||||||
myChart.data.datasets[6].data = calculateInductiveReactance();
|
|
||||||
myChart.data.datasets[7].data = calculateQualityFactor();
|
|
||||||
myChart.data.datasets[8].data = calculateCirculatingCurrent();
|
|
||||||
myChart.data.datasets[9].data = calculateAntennaSize();
|
|
||||||
myChart.data.datasets[10].data = calculateSkinDepth();
|
|
||||||
myChart.update();
|
|
||||||
updateURL();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var cond_dia_timer_handler = 0;
|
var cond_dia_timer_handler = 0;
|
||||||
|
@ -882,22 +821,7 @@
|
||||||
}, emphasis_delay);
|
}, emphasis_delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
setGlobals();
|
updateUnits();
|
||||||
drawFrontDesign();
|
|
||||||
drawSideDesign();
|
|
||||||
myChart.data.datasets[0].data = calculateTuningCapacitor();
|
|
||||||
myChart.data.datasets[1].data = calculateCapacitorVoltage();
|
|
||||||
myChart.data.datasets[2].data = calculateBandwidth();
|
|
||||||
myChart.data.datasets[3].data = calculateEfficiencyFactor();
|
|
||||||
myChart.data.datasets[4].data = calculateRadiationResistance();
|
|
||||||
myChart.data.datasets[5].data = calculateLossResistance();
|
|
||||||
myChart.data.datasets[6].data = calculateInductiveReactance();
|
|
||||||
myChart.data.datasets[7].data = calculateQualityFactor();
|
|
||||||
myChart.data.datasets[8].data = calculateCirculatingCurrent();
|
|
||||||
myChart.data.datasets[9].data = calculateAntennaSize();
|
|
||||||
myChart.data.datasets[10].data = calculateSkinDepth();
|
|
||||||
myChart.update();
|
|
||||||
updateURL();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var turns_timer_handler = 0;
|
var turns_timer_handler = 0;
|
||||||
|
@ -920,23 +844,7 @@
|
||||||
}, emphasis_delay);
|
}, emphasis_delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
setGlobals();
|
updateUnits();
|
||||||
drawFrontDesign();
|
|
||||||
drawSideDesign();
|
|
||||||
updateFrequencies();
|
|
||||||
myChart.data.datasets[0].data = calculateTuningCapacitor();
|
|
||||||
myChart.data.datasets[1].data = calculateCapacitorVoltage();
|
|
||||||
myChart.data.datasets[2].data = calculateBandwidth();
|
|
||||||
myChart.data.datasets[3].data = calculateEfficiencyFactor();
|
|
||||||
myChart.data.datasets[4].data = calculateRadiationResistance();
|
|
||||||
myChart.data.datasets[5].data = calculateLossResistance();
|
|
||||||
myChart.data.datasets[6].data = calculateInductiveReactance();
|
|
||||||
myChart.data.datasets[7].data = calculateQualityFactor();
|
|
||||||
myChart.data.datasets[8].data = calculateCirculatingCurrent();
|
|
||||||
myChart.data.datasets[9].data = calculateAntennaSize();
|
|
||||||
myChart.data.datasets[10].data = calculateSkinDepth();
|
|
||||||
myChart.update();
|
|
||||||
updateURL();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var spacing_timer_handler = 0;
|
var spacing_timer_handler = 0;
|
||||||
|
@ -959,25 +867,7 @@
|
||||||
}, emphasis_delay);
|
}, emphasis_delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
setGlobals();
|
updateUnits();
|
||||||
drawFrontDesign();
|
|
||||||
drawSideDesign();
|
|
||||||
if(loop_turns > 1) {
|
|
||||||
updateFrequencies();
|
|
||||||
}
|
|
||||||
myChart.data.datasets[0].data = calculateTuningCapacitor();
|
|
||||||
myChart.data.datasets[1].data = calculateCapacitorVoltage();
|
|
||||||
myChart.data.datasets[2].data = calculateBandwidth();
|
|
||||||
myChart.data.datasets[3].data = calculateEfficiencyFactor();
|
|
||||||
myChart.data.datasets[4].data = calculateRadiationResistance();
|
|
||||||
myChart.data.datasets[5].data = calculateLossResistance();
|
|
||||||
myChart.data.datasets[6].data = calculateInductiveReactance();
|
|
||||||
myChart.data.datasets[7].data = calculateQualityFactor();
|
|
||||||
myChart.data.datasets[8].data = calculateCirculatingCurrent();
|
|
||||||
myChart.data.datasets[9].data = calculateAntennaSize();
|
|
||||||
myChart.data.datasets[10].data = calculateSkinDepth();
|
|
||||||
myChart.update();
|
|
||||||
updateURL();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var tx_timer_handler = 0;
|
var tx_timer_handler = 0;
|
||||||
|
|
Ładowanie…
Reference in New Issue