Added alternating number of windings per layer

This commit is contained in:
schoener 2021-10-27 12:17:16 +02:00
parent a03c601995
commit b3c97e0049
6 changed files with 141 additions and 35 deletions

View File

@ -29,7 +29,7 @@ HH_Coil = BC.BCoil(HH = 1, distance = 54 ,radius = 48 , layers = 4, windings = 2
HH_Coil.set_R_inner(44.5)
HH_Coil.set_d_min(48.8)
HH_Coil = BC.BCoil(HH = 1, distance = 54 ,radius = 48 , layers = 8, windings = 8, wire_height = 0.4, wire_width = 0.4,insulation_thickness= 0.1,is_round = False, winding_offset= False)
HH_Coil = BC.BCoil(HH = 1, distance = 54, radius = 48, layers = 8, windings = 8, wire_height = 0.4, wire_width = 0.4, insulation_thickness= 0.1, is_round = False, winding_scheme= False)
HH_Coil.set_R_outer(49.3)
HH_Coil.set_d_min(49.8)

View File

@ -15,7 +15,7 @@ from IPython import get_ipython
I = 1.25
Wire_1 = BC.BCoil(HH = 1, distance = 54 ,radius = 48 , layers = 8, windings = 8, wire_height = 0.425, wire_width = 0.425,insulation_thickness= 0.09,is_round = True, winding_offset= False)
Wire_1 = BC.BCoil(HH = 1, distance = 54, radius = 48, layers = 8, windings = 8, wire_height = 0.425, wire_width = 0.425, insulation_thickness= 0.09, is_round = True, winding_scheme= False)
Wire_1.set_R_outer(49.3)
Wire_1.set_d_min(49.8)
Wire_1.print_info()
@ -25,7 +25,7 @@ Wire_1.cooling(I,22.5)
Wire_1.plot_raster(30)
Wire_2 = BC.BCoil(HH = 1, distance = 54 ,radius = 48 , layers = 8, windings = 8, wire_height = 0.425, wire_width = 0.425,insulation_thickness= 0.09,is_round = False, winding_offset= False)
Wire_2 = BC.BCoil(HH = 1, distance = 54, radius = 48, layers = 8, windings = 8, wire_height = 0.425, wire_width = 0.425, insulation_thickness= 0.09, is_round = False, winding_scheme= False)
Wire_2.set_R_outer(49.3)
Wire_2.set_d_min(49.8)
Wire_2.print_info()
@ -35,7 +35,7 @@ Wire_2.cooling(I,22.5)
Wire_2.plot_raster(30)
Wire_2 = BC.BCoil(HH = 1, distance = 54 ,radius = 48 , layers = 8, windings = 8, wire_height = 0.55, wire_width = 0.55,insulation_thickness= 0.09,is_round = True, winding_offset= True)
Wire_2 = BC.BCoil(HH = 1, distance = 54, radius = 48, layers = 8, windings = 8, wire_height = 0.55, wire_width = 0.55, insulation_thickness= 0.09, is_round = True, winding_scheme= True)
Wire_2.set_R_outer(49.3)
Wire_2.set_d_min(49.8)
Wire_2.print_info()
@ -45,7 +45,7 @@ Wire_2.cooling(I,22.5)
Wire_2.plot_raster(30)
I = 64/42 * 1.25
Wire_2 = BC.BCoil(HH = 1, distance = 54 ,radius = 48 , layers = 6, windings = 7, wire_height = 0.55, wire_width = 0.55,insulation_thickness= 0.09,is_round = True, winding_offset= True)
Wire_2 = BC.BCoil(HH = 1, distance = 54, radius = 48, layers = 6, windings = 7, wire_height = 0.55, wire_width = 0.55, insulation_thickness= 0.09, is_round = True, winding_scheme= True)
Wire_2.set_R_outer(49.3)
Wire_2.set_d_min(49.8)
Wire_2.print_info()

View File

@ -8,16 +8,15 @@ Created on Tue Sep 7 13:18:18 2021
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
matplotlib.use('Qt5Agg')
#matplotlib.use('Qt5Agg')
from src import coil_class as BC
from IPython import get_ipython
#get_ipython().run_line_magic('matplotlib', 'qt')
I = 10/8
print(I)
Wire_1 = BC.BCoil(HH = 1, distance = 54 ,radius = 48 , layers = 8, windings = 8, wire_height = 0.5, wire_width = 0.5,insulation_thickness= 0.06,is_round = True, winding_offset= True)
Wire_1 = BC.BCoil(HH = 1, distance = 54, radius = 48, layers = 8, windings = 8, wire_height = 0.5, wire_width = 0.5, insulation_thickness= 0.06, is_round = True, winding_scheme= 2)
Wire_1.set_R_outer(49.8)
Wire_1.set_d_min(49.8)
Wire_1.print_info()
@ -25,11 +24,12 @@ print(Wire_1.get_coil_width() * 1e3 * Wire_1.get_coil_height() * 1e3)
print(f"H = {Wire_1.get_coil_height() * 1e3}, W = {Wire_1.get_coil_width()*1e3}")
Wire_1.cooling(I,22.5)
Wire_1.plot_raster(30)
Wire_1.B_quick_plot(I)
Wire_1.B_curv_quick_plot(I)
Wire_1.B_curv_quick_plot(I,nr_points= 1000)

View File

@ -0,0 +1,75 @@
import numpy as np
import matplotlib.pyplot as plt
import src.coil_class as BC
I_current = 1.25
# scale = 1000 --> μm
scale = 1000
lim = 5
nr_points = (2 * lim) * scale + 1
x = np.linspace(-lim,lim,nr_points)
z = np.linspace(-lim,lim,nr_points)
print(x)
def mu_it(x_pos):
it = nr_points//2 + x_pos
return it
print(x[mu_it(-60)])
#standard
C1 = BC.BCoil(HH = 1, distance = 54, radius = 48, layers = 8, windings = 8, wire_height = 0.5, wire_width = 0.5, insulation_thickness= 0.06, is_round = True, winding_scheme= True)
C1.set_R_outer(49.8)
C1.set_d_min(49.8)
C1.print_info()
Bz, Bx = C1.B_tot_along_axis(I_current, x, z,raster = 2)
# plt.figure(5)
# plt.plot(z,Bz)
# plt.plot(x,Bx, label = "B_tot along x-axis")
# plt.show()
#plt.close(5)
#coil is ~ 500 μm thicker
shift_radius = 1#0.125
C_shift = BC.BCoil(HH = 1, distance = 54, radius = 48, layers = 8, windings = 8, wire_height = 0.5, wire_width = 0.5, insulation_thickness= 0.06, is_round = True, winding_scheme= True)
C_shift.set_R_outer(49.8 + shift_radius)
C_shift.set_d_min(49.8)
#shift_radius = 0.125
Bz2, By = C_shift.B_tot_along_axis(I_current+0.00082, x, z,raster = 2)
shift_int = int(shift_radius * scale - 1)
print(shift_int)
By_shift = By[shift_int:]
y_shift = x[:-shift_int]
print(By_shift)
print(y_shift)
B_sum = (By_shift + Bx[:-shift_int])/2
# shift By shift with shift radius
plt.figure(6)
#plt.plot(z,Bz)
plt.plot(x,Bx, label = "B_tot along x-axis")
plt.plot(y_shift,By_shift, label = "Shiftet tot B")
plt.plot(y_shift,B_sum, label = "B_sum")
plt.legend()
plt.show()
#plt.close(5)
it = mu_it(int(-shift_radius * 1e3 // 2))
#it = μm_it(-60)
print(it)
zero = mu_it(0)
print(y_shift[it])
print(y_shift[zero])
tot_diff = B_sum[it]-B_sum[zero]
print(f"diff {y_shift[it]} μm --> 0: {tot_diff} G, relative = {tot_diff/B_sum[it]}")

View File

@ -10,19 +10,23 @@ import logging as log
from scipy import special as sp
import matplotlib
matplotlib.use('Qt5Agg')
#matplotlib.use('Qt5Agg')
#matplotlib.use('Agg')
#get_ipython().run_line_magic('matplotlib', 'qt')
# get_ipython().run_line_magic('matplotlib', 'inline')
import time
from src import physical_constants as cs
#logger = log.getLogger('example')
#log.setLevel(log.info)
log.basicConfig(level = log.ERROR, format = '%(message)s')
# TODO: Docstrings for every function
# TODO: Implement conventions
class BCoil:
def __init__(self, HH, distance, radius, layers, windings, wire_width, wire_height, insulation_thickness=0.
, is_round=False, winding_offset=False):
, is_round=False, winding_scheme=False):
"""
Creates object that represents a configuration of two coils, with symmetry axis = z
:param HH: HH = 1 --> current in same direction, homogeneous field, HH = -1 --> current in opposite direction, quadrupole field
@ -34,10 +38,10 @@ class BCoil:
:param wire_height: height of conductive wire core
:param insulation_thickness: thickness of wire insulation
:param is_round: True --> Round wire, False --> rectangular wire
:param winding_offset: layer offset by half winding (especially for round wires)
:param winding_scheme: 0: standard, layer on layer, 1: with offset (for round wires primarily), 2: like 1, but alternatingly 8 --> 7 windings per layer
"""
if not is_round:
if winding_offset:
if winding_scheme == 1 or winding_scheme == 2:
log.warning('Is there a reason you want to wind a not round wire like that?')
if is_round:
if wire_width != wire_height:
@ -52,7 +56,7 @@ class BCoil:
self.wire_height = wire_height * 1e-3
self.insulation_thickness = insulation_thickness * 1e-3
self.is_round = is_round
self.winding_offset = winding_offset
self.winding_scheme = winding_scheme
def get_wire_area(self):
"""
@ -67,7 +71,11 @@ class BCoil:
"""
Calculates number of windings
"""
return self.layers * self.windings
N = self.layers * self.windings
if self.winding_scheme == 2:
N -= self.windings//2
return N
def get_wire_length(self):
"""
@ -84,15 +92,15 @@ class BCoil:
return self.wire_width + 2 * self.insulation_thickness
def get_coil_height(self):
if self.winding_offset:
if self.winding_scheme == 1:
return self.get_tot_wire_height() * (self.windings + 0.5)
return self.get_tot_wire_height() * self.windings
def get_coil_width(self):
if self.winding_offset:
if self.winding_scheme == 1 or self.winding_scheme == 2:
if self.is_round:
log.info(
"Be aware of the fact that this is an idealized situation of coil winding (slope of windings changes each layer)")
log.info("Coil width: Be aware of the fact that this is an idealized situation of coil winding (slope "
"of windings changes each layer)")
return self.layers * self.get_tot_wire_width() - (self.layers - 1) * (
2 - np.sqrt(3)) * self.get_tot_wire_width() / 2 # width is reduced due to winding offset
return self.get_tot_wire_width() * self.layers
@ -141,17 +149,19 @@ class BCoil:
for xx in range(0, self.layers):
for zz in range(0, self.windings):
if self.winding_scheme == 2 and xx % 2 == 1 and zz == self.windings-1:
continue # leave out every last winding in every second layer
z_pos = z_start + zz * self.get_tot_wire_height()
R_pos = R_start + xx * self.get_tot_wire_width()
# correct for different winding techniques and round wire
if self.winding_offset:
if self.winding_scheme == 1 or self.winding_scheme == 2:
if xx % 2 == 1:
z_pos += self.get_tot_wire_height() / 2
if self.is_round:
R_pos -= xx * ((2 - np.sqrt(3)) * self.get_tot_wire_width() / 2)
outer_raster[it] = [z_pos, R_pos]
#print(outer_raster[it])
it += 1
return outer_raster
@ -166,14 +176,14 @@ class BCoil:
# TODO: Less important, but rastering for round wires could be improved
if raster_value == 0:
raster_value = 1
log.warning("raster value is 0 increased to 1")
log.info("raster value is 0 increased to 1")
if raster_value == 1:
return [0,0]
if self.is_round & (raster_value % 2 == 0):
raster_value += 1
log.warning(f"for round wire rastering works better with uneven rastering value --> rastering value set to: {raster_value}")
log.info(f"for round wire rastering works better with uneven rastering value --> rastering value set to: {raster_value}")
inner_raster = np.zeros((raster_value ** 2, 2))
it = 0
@ -206,6 +216,7 @@ class BCoil:
"""
outer_ras = self.winding_raster()
inner_ras = self.inner_raster(raster_value)
full_ras = np.zeros((len(outer_ras), len(inner_ras), 2))
@ -226,6 +237,7 @@ class BCoil:
plt.scatter(full_structure[:, :, 1], full_structure[:, :, 0], linewidths=0.001)
plt.xlabel("radius [mm]")
plt.ylabel("z position [mm]")
plt.axvline(x=self.get_R_inner()*1e3-0.1, lw = 5,color = "red")
plt.xlim(1e3 * self.get_R_inner() - 0.5, 1e3 * self.get_R_inner() + extension + 0.5)
plt.ylim(1e3 * self.get_zmin() - 0.5, 1e3 * self.get_zmin() + extension + 0.5)
@ -627,15 +639,20 @@ class BCoil:
def main():
HH_Coil = BCoil(HH=-1, distance=50, radius=40, layers=8, windings=8, wire_height=0.5, wire_width=0.4,
insulation_thickness=0.2, is_round = True, winding_offset=True)
HH_Coil = BCoil(HH=-1, distance=50, radius=40, layers=7, windings=7, wire_height=0.5, wire_width=0.5,
insulation_thickness=0.1, is_round = True, winding_scheme=2)
#HH_Coil.get_coil_width()
#ras = HH_Coil.full_raster(raster_value = 3)
# print(HH_Coil.is_round)
HH_Coil.plot_raster(10)
#print(HH_Coil.winding_raster())
HH_Coil.B_quick_plot(1.25, abs = False)
HH_Coil.B_grad_quick_plot(1.25)
HH_Coil.B_curv_quick_plot(1.25)
HH_Coil.plot_raster(30)
print(HH_Coil.get_N())
#
# HH_Coil.B_quick_plot(1.25, abs = False)
# HH_Coil.B_grad_quick_plot(1.25)
# HH_Coil.B_curv_quick_plot(1.25)
# if True & 1 == 1:
# print("test")
#print(ras)
@ -656,5 +673,5 @@ def main():
#main()
if __name__ == "__main__":
print("g")
log.info("Run main Coil class")
main()

View File

@ -6,6 +6,20 @@ Created on Fri Oct 1 10:42:13 2021
"""
import numpy as np
print(np.sqrt(0.2))
a = np.ones(50)
print(0.56*8+ 0.1*4.48)
for i in range(0,len(a)):
a[i] *= i
print(a)
print(a[:5])
print(a[5:])
print(a[:-5])
print(10e-3/13.7)
a = 7
if (a == (7 or 3)):
print("true")