From 9c65b3eaf2f7edc1fd63cbe285ca1aed4b41e4c4 Mon Sep 17 00:00:00 2001 From: miguel <31931809+miguelvaca@users.noreply.github.com> Date: Wed, 22 Sep 2021 23:12:41 +1000 Subject: [PATCH] Added Re slider, to capture additional external losses --- magloop.css | 2 +- magloop.html | 69 +++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 61 insertions(+), 10 deletions(-) diff --git a/magloop.css b/magloop.css index 01c2410..3caa6b1 100644 --- a/magloop.css +++ b/magloop.css @@ -98,7 +98,7 @@ section div.antennaSide-container { section.gridLayoutClass { display: grid; grid-template-columns: repeat(2, 1fr); - grid-template-rows: repeat(3, 1fr) 150px 135px 300px; + grid-template-rows: repeat(3, 1fr) 150px 150px 300px; justify-items: stretch; } diff --git a/magloop.html b/magloop.html index 17e6bca..3c74729 100644 --- a/magloop.html +++ b/magloop.html @@ -35,6 +35,10 @@ +
+ + +
@@ -84,6 +88,10 @@
  • c/a : is the spacing ratio; based on 'c' being the inter-winding spacing for multi-turn loops measured between conductor centers, and 'a' is the conductor diameter. (Must be >= 1.1) A low-value will increase the resistance due to the proximity effect. (Ignore for single-turn loops.)
  • Tx : The transmit power in Watts. This affects the predicted voltage across the capacitor (Vcap), and the RMS loop current (Ia).
  • +
  • Re : Additional resistance due to external losses, due mainly from capacitor contact resistance and proximity-to-ground effects. Use Re=0.0 to assume the loop is in free-space. + Adding Re will reduce antenna efficiency, Q, Vcap and Ia, while increasing BW. + In a study [1], a 1 m diameter loop of 22 mm copper tubing at a height of 1.5 m above the ground at 7 MHz had a calculated capacitor contact resistance of ~190mΩ + and an additional ground proximity loss resistance of ~30mΩ. Note that ground effects are height-above-ground and frequency-dependent.
  • Metric or Imperial : selects the measuring system.
  • Cu or Al : selects the type of metal conductor (annealed copper or aluminum).
  • Circ, Oct, Hex or Sqr : selects the shape of the magloop.
  • @@ -108,7 +116,13 @@
  • Perimeter (λ): Antenna perimeter size relative to the wavelength.

  • + References:
    + [1]: A. Boswell, A. J. Tyler and A. White, "Performance of a Small Loop Antenna in the 3 - 10 MHz Band" , IEEE Antennas and Propagation Magazine, 47, 2, April 2005, pp. 5 1 -56.
    +
    Change history:
    + [23-Sep-21]
    + * Changed Q equation back to the original Xl/Rtot.
    + * Introduced a new slider to inject external losses to account for the combined losses due to capacitor contact resistance and ground losses.
    [22-Sep-21]
    * Added antenna perimeter size in wavelength to the chart display as a new item.
    * Changed maximum spacing ratio c/a from 4.0 to 10.0. Values higher than 4 have no further effect on proximity resistance, but does reduce coil inductance which drives up the SRF.
    @@ -119,7 +133,7 @@ [18-Sep-21]
    * Updated to V5; Added support for octagon, hexagon and square shaped loops. Moved and hyperlinked equations-used to a separate page for clarity.
    [16-Sep-21]
    - * Updated to V4; Updated equation used for Q to match the one use in the ARRL Antenna Book. This will affect predictions for V_cap, I_loop and BW. (Based on confirmation of correct Q equation used in + * Updated to V4; Updated equation used for Q to match the one use in the ARRL Antenna Book. This will affect predictions for V_cap, I_loop and BW. (Based on Q equation D.1 used in "Impedance, Bandwidth, and Q of Antennas" by A D Yaghjian, IEEE Transactions on Antennas and Propagation, April 2005.)
    * Added equation graphics for V_cap, I_loop and BW formulas.
    * Flipped the main-loop graphic to have the capacitor above the coupling loop.
    @@ -154,6 +168,7 @@ var metric_radio = document.getElementById("metric_radio"); var imperial_radio = document.getElementById("imperial_radio"); var shape_radio = document.getElementById("shape_radio"); + var external_losses_slider = document.getElementById("external_losses_slider"); // Global variables: var units = "metric"; @@ -166,6 +181,7 @@ var loop_capacitance = 0.0; // Effective capacitance of a single or multi-turn loop var srf = 0.0; // Self-resonant frequency SRF 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 frequencies = []; @@ -191,6 +207,7 @@ loop_capacitance = (loop_turns_slider.value > 1) ? multiloopCapacitance() : (2.69e-12 * perimeter); srf = calculateSRF(); conductor_length = ((((perimeter* loop_turns_slider.value) ** 2.0) + ((loop_spacing_slider.value * conductor_diameter_slider.value * 1e-3 * loop_turns_slider.value) ** 2.0)) ** 0.5); + R_ext = external_losses_slider.value * 0.001; } // Returns the loop area in square meters: @@ -451,7 +468,8 @@ frequencies.forEach(freq => { const R_ohmic = lossResistance(freq * 1e6); const R_rad = radiationResistance(freq * 1e6); - const efficiency = 100.0 / (1.0 + (R_ohmic / R_rad)); + const efficiency = 100.0 * R_rad / (R_rad + R_ohmic + R_ext); + //const efficiency = 100.0 / (1.0 + (R_ohmic / R_rad)); //const efficiency = 10.0 * Math.log10(1.0 / (1.0 + (R_ohmic / R_rad))); // for Efficiency in dB retval.push({x:freq, y:efficiency}); }); @@ -462,7 +480,7 @@ const Xl = inductiveReactance(frequency); const Rl = lossResistance(frequency); const Rr = radiationResistance(frequency); - const Q = Xl / (2.0 * (Rl + Rr)); + const Q = Xl / (Rl + Rr + R_ext); return Q; } @@ -854,6 +872,36 @@ myChart.update(); } + var external_losses_handler = 0; + var external_losses_font = normal_font; + + external_losses_slider.oninput = function() { + if(external_losses_handler == 0) { + external_losses_font = emphasis_font; + external_losses_handler = setTimeout(function(){ + external_losses_font = normal_font; + drawFrontDesign(); + external_losses_handler = 0; + }, emphasis_delay); + } else { + clearTimeout(external_losses_handler); + external_losses_handler = setTimeout(function(){ + external_losses_font = normal_font; + drawFrontDesign(); + external_losses_handler = 0; + }, emphasis_delay); + } + + setGlobals(); + drawFrontDesign(); + myChart.data.datasets[1].data = calculateCapacitorVoltage(); + myChart.data.datasets[2].data = calculateBandwidth(); + myChart.data.datasets[3].data = calculateEfficiencyFactor(); + myChart.data.datasets[7].data = calculateQualityFactor(); + myChart.data.datasets[8].data = calculateCirculatingCurrent(); + myChart.update(); + } + window.onresize = function() { myChart.resize(); //myChart.update(); @@ -1213,7 +1261,10 @@ // Write Tx power text: fctx.font = tx_font; - fctx.fillText("Tx = " + transmit_power_slider.value + " W", 8, win_height * 0.8 + 20); + fctx.fillText("Tx = " + transmit_power_slider.value + " W", 8, win_height * 0.8 + 10); + + fctx.font = external_losses_font; + fctx.fillText("Re = " + R_ext.toFixed(3).toString() + " \u03A9", 8, win_height * 0.8 + 24); // Write loop diameter symbol: fctx.font = normal_font; @@ -1241,7 +1292,7 @@ fctx.fillText("A = " + area.toPrecision(3).toString() + " m\u00B2", win_width-8, 18); // Write Tx power text: - fctx.fillText("peri = " + perimeter.toPrecision(3).toString() + " m", win_width-8, win_height * 0.8 + 20); + fctx.fillText("peri = " + perimeter.toPrecision(3).toString() + " m", win_width-8, win_height * 0.8 + 24); } else { fctx.font = cond_dia_font; fctx.fillText("\u2300a = " + (cond_dia/25.4).toPrecision(3).toString() + "\"", loopx, p1y+1); @@ -1251,7 +1302,7 @@ fctx.fillText("A = " + (area * 10.76391).toPrecision(3).toString() + " ft\u00B2", win_width-8, 18); // Write Tx power text: - fctx.fillText("peri = " + (perimeter*3.28084).toPrecision(3).toString() + " ft", win_width-8, win_height * 0.8 + 20); + fctx.fillText("peri = " + (perimeter*3.28084).toPrecision(3).toString() + " ft", win_width-8, win_height * 0.8 + 24); } } @@ -1323,11 +1374,11 @@ sctx.fillText((srf*1e-6).toPrecision(3).toString() + " MHz", win_width-8, win_height * 0.1 + 33); sctx.textAlign = "right"; - sctx.fillText("cond = " , win_width-8, dim_y + 08); + sctx.fillText("cond = " , win_width-8, dim_y + 10); if(units == "metric") { - sctx.fillText(conductor_length.toPrecision(4).toString() + " m", win_width-8, dim_y + 20); + sctx.fillText(conductor_length.toPrecision(4).toString() + " m", win_width-8, dim_y + 24); } else { - sctx.fillText((conductor_length * 3.28084).toPrecision(4).toString() + " ft", win_width-8, dim_y + 20); + sctx.fillText((conductor_length * 3.28084).toPrecision(4).toString() + " ft", win_width-8, dim_y + 24); } // Draw spacing text: