nmr-utils/Probe.ipynb

261 lines
6.3 KiB
Plaintext
Raw Normal View History

2024-07-04 20:09:20 +00:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "731fc261",
"metadata": {},
"outputs": [],
"source": [
"from numpy import *"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "fb15ea05",
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"e0 = 8.8541878188e-12"
]
},
{
"cell_type": "code",
"execution_count": 103,
"id": "ec2633de",
"metadata": {},
"outputs": [],
"source": [
"def capacitor(ri, ra, l, er=9):\n",
" C = 2*pi*er*e0*l/log(ra/ri)*1e12\n",
" #print(f\"{C:.2f}pF\")\n",
" return C*1e-12"
]
},
{
"cell_type": "code",
"execution_count": 104,
"id": "5193496d",
"metadata": {},
"outputs": [],
"source": [
"def capacitor_query(ri, ra, l, er=9):\n",
" C_min = capacitor(ri,ra,l,er=1)\n",
" C_mid = capacitor(ri,ra,l/2,er=1) + capacitor(ri,ra,l/2,er=er)\n",
" C_max = capacitor(ri,ra,l,er=er)\n",
" print(\"----Params----\")\n",
" print(f\"ri = {ri*1e3:.2f}mm\\nra = {ra*1e3:.2f}mm\\nl = {l*1e3:.2f}mm\\ner = {er:.1f}\")\n",
" print(\"----Result----\")\n",
" print(f\"C_min = {C_min*1e12:.2f}pF\")\n",
" print(f\"C_max = {C_max*1e12:.2f}pF\")\n",
" print(f\"C_mid = {C_mid*1e12:.2f}pF\")"
]
},
{
"cell_type": "markdown",
"id": "1517377f",
"metadata": {},
"source": [
"Capacitor\n",
"========\n",
"First we need to know the capacitor and the range we have available,\n",
"we need the inner and outer diameter $r_i$, $r_a$, length $l$, and $\\epsilon_r$"
]
},
{
"cell_type": "code",
"execution_count": 148,
"id": "e68edb6a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"----Params----\n",
"ri = 4.00mm\n",
"ra = 8.00mm\n",
"l = 100.00mm\n",
"er = 2.0\n",
"----Result----\n",
"C_min = 8.03pF\n",
"C_max = 16.05pF\n",
"C_mid = 12.04pF\n"
]
}
],
"source": [
"capacitor_query(4e-3,8e-3,10e-2,2)"
]
},
{
"cell_type": "markdown",
"id": "1188809f",
"metadata": {},
"source": [
"Resonance frequency of an LC circuit:\n",
"$f_0 = \\frac{1}{2\\pi\\sqrt{LC}}$\n",
"\n",
"Solve for L:\n",
"\n",
"$L_{RF}= \\frac{1}{(2\\pi f_0)^2C}$"
]
},
{
"cell_type": "code",
"execution_count": 143,
"id": "5ceee5f8",
"metadata": {},
"outputs": [],
"source": [
"def probe_design(f0, C_mid=12e-12):\n",
" L_RF = 1e6/((2*pi*f0)**2*C_mid)\n",
" print(f\"L_RF={L_RF:.2f}µH\") \n",
" L_duplex = 50/(2*pi*f0)*1e6\n",
" print(f\"L_duplex={L_duplex:.2f}µH\") \n",
" C_duplex = 1/(2*pi*f0*50)*1e12\n",
" print(f\"C_duplex={C_duplex:.2f}pF\") \n",
" \n",
" return L_RF*1e6\n",
"\n",
"def probe_range(L_RF, C_min, C_max):\n",
" f_min = 1/(2*pi * sqrt(C_max*L_RF))\n",
" f_max = 1/(2*pi * sqrt(C_min*L_RF))\n",
" print(f\"f_min = {f_min:.1f}MHz\\nf_max = {f_max:.1f}MHz\")"
]
},
{
"cell_type": "markdown",
"id": "92577356",
"metadata": {},
"source": [
"Now we can calculate the needed coil inductance for the resonance circuit. Here, we also calculate the $\\Pi$-circuit C and L paramters for the duplexer (the \"$\\lambda/4$\" lumped circuit)"
]
},
{
"cell_type": "code",
"execution_count": 150,
"id": "44c4a308",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"L_RF=3.37µH\n",
"L_duplex=0.32µH\n",
"C_duplex=127.32pF\n"
]
}
],
"source": [
"L_RF = probe_design(25e6, C_mid=12.04e-12)"
]
},
{
"cell_type": "code",
"execution_count": 147,
"id": "181a4255",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"f_min = 21.7MHz\n",
"f_max = 30.6MHz\n"
]
}
],
"source": [
"probe_range(L_RF, 8e-12, 16e-12)"
]
},
{
"cell_type": "markdown",
"id": "cdecc4f3",
"metadata": {},
"source": [
"Coil64\n",
"=====\n",
"Calculate the coil windings:\n",
"\n",
"Give the wire diameter, incl. isolation thickness, former diameter (5mm)\n",
"\n",
"Coil64 v2.2.32 - One layer close-winding coil\n",
"\n",
"Input:\n",
"=====\n",
" Inductance L: 3.38 microH\n",
" Frequency f: 25 MHz\n",
" Former diameter D: 5 mm\n",
" Wire diameter d: 0.3 mm\n",
" Wire diameter with insulation k: 0.436 mm\n",
" Wire material Mt: Copper\n",
"\n",
"Result:\n",
"======\n",
"\n",
" Number of turns of the coil N = 56.719 \n",
" Length of wire without leads lw = 96.894 cm\n",
" Length of winding l = 25.165 mm\n",
" Weight of wire m = 0.614 g\n",
" DC resistance of the coil Rdc = 0.236 Ohm\n",
" Reactance of the coil X = 530.929 Ohm\n",
"\n",
" Self capacitance Cs = 0.356 pF\n",
" Coil self-resonance frequency Fsr = 218.021 MHz\n",
" Coil constructive Q-factor Q = 171 \n",
" Loss resistance ESR = 2.67 Ohm\n",
"\n",
" Additional results for parallel LC circuit at the working frequency:\n",
" => Circuit capacitance: Ck = 11.635 pF\n",
" => Characteristic impedance: ρ = 531 Ohm\n",
" => Equivalent resistance: Re = 77.531 kOhm\n",
" => Bandwidth: 3dBΔf = 171.199 kHz\n",
"\n",
" Input data for LTSpice:\n",
" Inductance: 3.380μ\n",
" Series resistance: 236.334m\n",
" Parallel resistance: 78.065k\n",
" Parallel capacitance: 0.356p\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ff03bfb4",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}