diff --git a/src/debug_mecanica_disparo.py b/src/debug_mecanica_disparo.py new file mode 100644 index 0000000..d005a03 --- /dev/null +++ b/src/debug_mecanica_disparo.py @@ -0,0 +1,3 @@ +from funcionesSimELectrica import * +from funcionesSimFisica import * + diff --git a/src/funcionesSim.py b/src/funcionesSimELectrica.py similarity index 87% rename from src/funcionesSim.py rename to src/funcionesSimELectrica.py index e4fe1c9..b8931c0 100644 --- a/src/funcionesSim.py +++ b/src/funcionesSimELectrica.py @@ -71,7 +71,8 @@ def simular(tensionCap, Rtotal, Lbobina, Ctotal, lts_path, tSim = 100e-3, toff_s 'tiempo': np.array(raw.get_trace('time')), 'vCap': np.array(raw.get_trace('V(condensador)')), 'vBob': np.array(raw.get_trace('V(v1)')) - np.array(raw.get_trace('V(v2)')), - 'iBob': np.array(raw.get_trace('I(L1)')) + 'iBob': np.array(raw.get_trace('I(L1)')), + 'iMos' : np.array(raw.get_trace('Id(M1)')) } except KeyError as e: print(f'Error al leer seƱal del archivo .raw: {e}') @@ -79,9 +80,9 @@ def simular(tensionCap, Rtotal, Lbobina, Ctotal, lts_path, tSim = 100e-3, toff_s def dibujar(resultado): plt.figure() - plt.plot(resultado['tiempo'], resultado['vCap'], label='Tension Cap [V]') - plt.plot(resultado['tiempo'], resultado['vBob'], label='Tension Bobina [V]') - plt.plot(resultado['tiempo'], resultado['iBob'], label='Corriente Bobina [A]') + plt.plot(resultado['tiempo']*1e3, resultado['vCap'], label='Tension Cap [V]') + plt.plot(resultado['tiempo']*1e3, resultado['vBob'], label='Tension Bobina [V]') + plt.plot(resultado['tiempo']*1e3, resultado['iBob'], label='Corriente Bobina [A]') plt.grid() plt.legend() plt.show() @@ -91,10 +92,10 @@ if __name__ == '__main__': lts_path = "C:/Users/osuescuneli/AppData/Local/Programs/ADI/LTspice/LTspice.exe" - Tension = 50 - Resistencia = 1.942 - Inductancia = 11e-6 - Capacitancia = 1e-3 + Tension = 150 + Resistencia = 4 + Inductancia = 100e-6 + Capacitancia = 500e-6 tiempoSimulacion = 15e-3 tiempoSwitch = 25e-6 diff --git a/src/funcionesSimFisica.py b/src/funcionesSimFisica.py new file mode 100644 index 0000000..36c909e --- /dev/null +++ b/src/funcionesSimFisica.py @@ -0,0 +1,105 @@ +import numpy as np +import matplotlib.pyplot as plt + +global muVacio +global muFeRel +global kDisp +global cteRoz +global g + +densidadHierro = 7800 # kg/m3 +muVacio = 4*np.pi*1e-7 +muFeRel = 5000 +kDisp = 2 # cte de dispersion +cteRoz = 0.1 +g = 9.8 + +__author__ = 'Oscar Suescun' + +def calcular_diametro_ext(longitudBobina, diametroCuBobina, espirasBobina, diametroInteriorBobina): + + espirasCapa = int(longitudBobina/diametroCuBobina) + numeroCapas = int(espirasBobina/espirasCapa +.5) + + return 2 * numeroCapas * diametroCuBobina + diametroInteriorBobina + +def reluctancia_funcX(longFe, diamFe, longC, diamCint, diamCu, espiras): + ''' + Esta funcion devuelve un vector que contenga la reluctancia total en + funcion de la distancia que recorre el vastago dentro de la bobina. + + Para esto se utiliza un vector de 0 -> longC con un estep de longC/100 + + Entrada: + - longFe --> longitud del vastago + - diamFe --> diametro del vastago + - longC --> longitud de la bobina + - diamCint --> diametro interior de la bobina + - diamCu --> diametro del hilo de cobre + - espiras --> numero de espiras en la bobina + + Salida: + - relTotal --> devuelve un vector con la reluctancia total en + funcion de la distancia recorrida en la bobina. + + ''' + + diamCext = calcular_diametro_ext(longC, diamCu, espiras, diamCint) + + seccionFe = (np.pi * diamFe**2) / 4 + seccionSc = (np.pi * diamCext**2) / 4 + seccionDisp = (np.pi * (kDisp * diamCint)**2) / 4 + + x = np.arange(0,longC + longC/100, longC/100) + longFe = np.full(len(x), longFe) + longC = np.full(len(x), longC) + + + relFe = longFe / (muVacio * muFeRel * seccionFe) + relDisp = longC / (muVacio * seccionDisp) + relAire = (longC - x) / (muVacio * seccionSc) + relFlujo = (longC + longFe - x) / (muVacio * seccionDisp) + + relTotal = relFe + relDisp + relAire + relFlujo + + return relTotal + + +def induccion(corriente, reluctancia, espiras, diamFe): + flujo = espiras * corriente / reluctancia + + secFe = np.pi * diamFe**2 / 4 + + return flujo / secFe + +def fuerza_magnetica(corriente, reluctancia, espiras, diamFe): + + b = induccion(corriente, reluctancia, espiras, diamFe) + + secFe = np.pi * diamFe**2 / 4 + + return 0.5 * b**2 * secFe / muVacio + +def aceleracion(masa, anguloDisparo, fuerzaMagnetica): + + anguloDisparo = anguloDisparo * np.pi / 180 + + return fuerzaMagnetica/masa - g*(cteRoz * np.cos(anguloDisparo) + np.sen(anguloDisparo)) + + + + + +if __name__ == '__main__': + + numeroModulos = 1 + + longitudBobina = 53.21e-3 # m + diametroInteriorBobina = 6.035-3 * 2 # m + espirasBobina = 500 + diametroCuBobina = 0.8e-3 # m + + longitudVastago = 96e-3 # m + diametroVastago = 3.045e-3 * 2 # m + + diff --git a/src/simulador/modelo_transitorio_1.net b/src/simulador/modelo_transitorio_1.net index f5b83ac..c19c22e 100644 --- a/src/simulador/modelo_transitorio_1.net +++ b/src/simulador/modelo_transitorio_1.net @@ -16,10 +16,10 @@ R1 condensador V1 {R} .param tsim 15m .param toff_sw 25u .param ton_mos 50u -.param R 1.942 -.param C 1m -.param L 11u -.param V 50 +.param R 4 +.param C 500u +.param L 100u +.param V 150 .param delta tsim-ton_mos .backanno .end diff --git a/src/simulador/modelo_transitorio_1.op.raw b/src/simulador/modelo_transitorio_1.op.raw index b1e054f..6d3fdd6 100644 Binary files a/src/simulador/modelo_transitorio_1.op.raw and b/src/simulador/modelo_transitorio_1.op.raw differ diff --git a/src/simulador/modelo_transitorio_1.raw b/src/simulador/modelo_transitorio_1.raw index 799d271..6581e7f 100644 Binary files a/src/simulador/modelo_transitorio_1.raw and b/src/simulador/modelo_transitorio_1.raw differ