tools/loopflat/en.html
2024-10-10 10:54:25 +08:00

239 lines
10 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Magnetic loop antenna calculator for round copper construction</title>
<!-- Bootstrap -->
<link href="https://cdn.gh.ink/assembly/bootstrap/4.6.1/css/bootstrap.min.css" rel="stylesheet">
<!-- Favicon -->
<link rel="icon" href="https://2-cdn.ianxia.com/images/avatar/common.png" type="image/png">
<script src="https://cdn.gh.ink/js/vue/2.6.14/vue.min.js"></script>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href="https://tools.ianxia.com"><b>Ian</b>Tools</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ml-auto">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Language
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="zh.html"><b>简体中文</b></a>
</div>
</li>
<li class="nav-item">
<a class="nav-link" href="https://www.ianxia.com">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://blog.ianxia.com">Blog (In Chinese)</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://demo.ianxia.com">DEMO</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://adsb.ianxia.com">ADS-B</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="../en.html">Tools</a>
</li>
</ul>
</div>
</nav>
<section>
<div class="jumbotron text-center mt-2">
<div class="container">
<div class="row">
<div class="col-12">
<h1>Magnetic loop antenna calculator for round copper construction</h1>
</div>
</div>
</div>
</div>
</section>
<section>
<div class="container">
<div class="row" id="app">
<div class="col-md-1"></div>
<div class="col-md-5">
<form class="form-horizontal" role="form">
<div class="form-inline">
<label><b>Frequency (MHz)</b>&nbsp;</label>
<input type="number" step="0.01" class="form-control" v-model="frequency" placeholder="Frequency (MHz)">
</div><br>
<div class="form-inline">
<label><b>Loop conductor length (m)</b>&nbsp;</label>
<input type="number" class="form-control" v-model="leng" placeholder="Loop conductor length (m)">
</div><br>
<div class="form-inline">
<label><b>Conductor diameter (mm)</b>&nbsp;</label>
<input type="number" class="form-control" v-model="diameter" placeholder="Conductor diameter (mm)">
</div><br>
<div class="form-inline">
<label><b>RF power (W)</b>&nbsp;</label>
<input type="number" class="form-control" v-model="power" placeholder="RF power (W)">
</div>
</form>
</div>
<div class="col-md-6">
<h5>Calculation results: </h5>
<h5>Inductance (uH) {{inductance}}</h5>
<h5>Capacitance (pF) {{capacitance}}</h5>
<h5>XL = XC (ohms) {{lxlc}}</h5>
<h5>Distributed C (pF) {{distributed}}</h5>
<h5>Tuning capacitance (pF) {{tuning_capacitance}}</h5>
<h5>Main loop diameter (m) {{main_loop_diameter}}</h5>
<h5>Feeding loop diameter (m) {{feeding_loop_diameter}}</h5>
<h5>Radiation resistance (ohms) {{radiation_resistance}}</h5>
<h5>Loss resistance (ohms) {{loss_resistance}}</h5>
<h5>Parallel resistance (kohms) {{parallel_resistance}}</h5>
<h5>Efficiency (%) {{efficiency}}</h5>
<h5>Compared to ideal loop (dB) {{ctil}}</h5>
<h5>Loaded Q {{lq}}</h5>
<h5>Bandwidth -3dB (kHz) {{bandwidth}}</h5>
<h5>Capcitor rms voltage (V) {{crv}}</h5>
</div>
</div>
<div class="text-center">
<hr>
<h5>Algorithm source: I6IBE / OH7SV (<a href="http://www.radioamatoripeligni.it/i6ibe/loopflat/loopcalculator.xls">Source</a>)</h5>
<h5>Language translation: Bigsk</h5>
</div>
</div>
</section>
<hr>
<script>
new Vue({
el: '#app',
data: {
frequency: 3.7,
leng: 8,
diameter: 22,
power: 100
},
computed: {
inductance: function() {
return 0.0000000623 * parseInt(this.leng) * (7.353 * Math.log10((8 * parseInt(this.leng)) / (Math.PI * parseInt(this.diameter) / 1000)) - 6.386) * 1000000
},
capacitance: function() {
return 1 / (Math.pow((2 * Math.PI * this.frequency * 1000000), 2) * this.inductance / 1000000) * 1000000000000
},
lxlc: function() {
return 1 / (2 * Math.PI * this.frequency * 1000000 * this.capacitance * 0.000000000001)
},
distributed: function() {
return 2.69 * this.leng
},
tuning_capacitance: function() {
return this.capacitance - this.distributed
},
main_loop_diameter: function() {
return this.leng / Math.PI
},
feeding_loop_diameter: function() {
return this.main_loop_diameter / 5
},
radiation_resistance: function() {
return 0.0000000338 * Math.pow((Math.pow(this.frequency, 2) * 10.76 * Math.PI * Math.pow(this.main_loop_diameter, 2) / 4), 2)
},
loss_resistance: function() {
return 0.08298 * Math.sqrt(this.frequency) * this.leng / this.diameter
},
parallel_resistance: function() {
return 0.001 * this.lxlc * this.lq
},
efficiency: function() {
return 100 * this.radiation_resistance / (this.radiation_resistance + this.loss_resistance)
},
ctil: function() {
return 10 * Math.log10(this.efficiency / 100)
},
lq: function() {
return this.lxlc / (2 * (this.radiation_resistance + this.loss_resistance))
},
bandwidth: function() {
return 1000 * this.frequency / this.lq
},
crv: function() {
return Math.sqrt(this.power * this.lxlc * this.lq)
}
}
})
let date = new Date();
</script>
<footer class="text-center">
<div class="container">
<div class="row">
<div class="col-12">
<p style="color: #516069"><strong>Copyright © Ian Xia <script>document.write(date.getFullYear().toString());</script> All rights reserved</strong></p>
</div>
</div>
</div>
</footer>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://cdn.gh.ink/js/jquery/jquery-3.6.0.min.js"></script>
<!-- Grey Filter Detector -->
<script>
$.ajax({
type: "GET",
url: "https://open.geh.ink/grey_filter",
dataType: "json",
success: function(data, textStatus){
for (let i=0;i<data["content"]["accurate_slot"].length;i++) {
// Accurate Slot
if (Date.now()/1000 >= data["content"]["accurate_slot"][i][0] && Date.now()/1000 <= data["content"]["accurate_slot"][i][1]) {
$("html").css({
'-webkit-filter': 'grayscale(100%)',
'-moz-filter': 'grayscale(100%)',
'-ms-filter': 'grayscale(100%)',
'-o-filter': 'grayscale(100%)',
'filter': 'progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)',
'_filter': 'none'
});
break;
}
}
for (let i=0;i<data["content"]["day_slot"].length;i++) {
// Day Slot
let begin = new Date(
date.getFullYear().toString() + "-" +
data["content"]["day_slot"][i][0][0].toString() + "-" +
data["content"]["day_slot"][i][0][1].toString() + " " +
data["content"]["day_slot"][i][0][2].toString() + ":" +
data["content"]["day_slot"][i][0][3].toString() + ":" +
data["content"]["day_slot"][i][0][4].toString()
)
let end = new Date(
date.getFullYear().toString() + "-" +
data["content"]["day_slot"][i][1][0].toString() + "-" +
data["content"]["day_slot"][i][1][1].toString() + " " +
data["content"]["day_slot"][i][1][2].toString() + ":" +
data["content"]["day_slot"][i][1][3].toString() + ":" +
data["content"]["day_slot"][i][1][4].toString()
)
if (Date.now() >= begin.getTime() && Date.now() <= end.getTime()) {
$("html").css({
'-webkit-filter': 'grayscale(100%)',
'-moz-filter': 'grayscale(100%)',
'-ms-filter': 'grayscale(100%)',
'-o-filter': 'grayscale(100%)',
'filter': 'progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)',
'_filter': 'none'
});
break;
}
}
}
});
</script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="https://cdn.gh.ink/js/popper/1.16.1/popper.min.js"></script>
<script src="https://cdn.gh.ink/assembly/bootstrap/4.6.1/js/bootstrap.min.js"></script>
</body>
</html>