diff --git a/src/debug_mecanica_disparo.py b/src/debug_mecanica_disparo.py index d4fcc1d..6f67cdf 100644 --- a/src/debug_mecanica_disparo.py +++ b/src/debug_mecanica_disparo.py @@ -1,6 +1,6 @@ from funcionesSimELectrica import * from funcionesSimFisica import * -from scipy.integrate import cumulative_trapezoid as integrar +from scipy.integrate import cumulative_trapezoid import matplotlib.pyplot as plt import numpy as np @@ -45,41 +45,30 @@ if __name__ == '__main__': inductancia = espirasBobina**2 / reluctancia - tTemp = 0 - tempAcel = 0 - tempVelocidad = 0 - longTemp = longitudBobina + tiempo = np.arange(0,tiempoSimulacion, step) + + corriente = solver_manual(Tension, resistencia, inductancia, Capacitancia, tiempo) + fuerza = fuerza_magnetica(corriente, reluctancia, espirasBobina, diametroVastago) + + aceleracion = [] for i in np.arange(numeroModulos): - t = np.arange(0,tiempoSimulacion, step) + + aceleracion = np.append(aceleracion, calcular_aceleracion(masa, anguloDisparo, fuerza)) + + if i == 0:aceleracion[aceleracion<0] = 0 # Evitar que la aceleracion sea negativa en la primera vuelta + else:pass - corriente = solver_manual(Tension, resistencia, inductancia, Capacitancia, t) - fuerza = fuerza_magnetica(corriente, reluctancia, espirasBobina, diametroVastago) - acel = aceleracion(masa, 40, fuerza) + velocidad = cumulative_trapezoid(aceleracion,tiempo,initial=0) + posicion = cumulative_trapezoid(velocidad, tiempo, initial=0) + + idx = posicion <= longitudBobina*(i+1) + + tiempo = tiempo[idx] # Recorto los vectores + posicion = posicion[idx] # para tener en cuenta + velocidad = velocidad[idx] # que el vastago recorre + aceleracion = aceleracion[idx] # la longitud de la bobina - t = tTemp + t - velocidad = integrar(acel, t, initial = 0) - posicion = integrar(velocidad, t, initial = 0) - - idx = posicion<=longTemp - - t = t[idx] - corriente = corriente[idx] - fuerza = fuerza[idx] - acel = acel[idx] - velocidad = velocidad[idx] - posicion = posicion[idx] - - tempAcel = acel[-1] - tempVelocidad = velocidad[-1] - longTemp = longitudBobina + longTemp - plt.figure() - #plt.plot(t, corriente, label='corriente') - #plt.plot(t, fuerza, label = 'Fuerza') - #plt.plot(t, acel, label='aceleracion') - plt.plot(posicion, velocidad, label = 'velocidad') - plt.legend() - plt.show() \ No newline at end of file diff --git a/src/funcionesSimELectrica.py b/src/funcionesSimELectrica.py index 184aea0..9888c60 100644 --- a/src/funcionesSimELectrica.py +++ b/src/funcionesSimELectrica.py @@ -52,7 +52,9 @@ def solver_manual(tensionCap, Rtotal, Lbobina, Ctotal, t): def simular_LTS(tensionCap, Rtotal, Lbobina, Ctotal, lts_path, tSim = 100e-3, toff_sw = 1e-3, ton_mos = 1.5e-3): ''' - Funcion principal de simulacion. + Funcion principal de simulacion. Es legado por si se quisiera simular + con LTSpice. No se usa porque hay problemas con el tamaƱo del step + en los resultados. Entradas Obligatorias: - tensionCap -> Tension del capacitor diff --git a/src/funcionesSimFisica.py b/src/funcionesSimFisica.py index 7822aa8..879cde3 100644 --- a/src/funcionesSimFisica.py +++ b/src/funcionesSimFisica.py @@ -86,16 +86,14 @@ def fuerza_magnetica(corriente, reluctancia, espiras, diamFe): return np.sign(corriente) * 0.5 * b**2 * secFe / muVacio -def aceleracion(masa, anguloDisparo, fuerzaMagnetica): +def calcular_aceleracion(masa, anguloDisparo, fuerzaMagnetica): ''' Retocar esto, tiene en cuenta el principio solo pero hay cosas raras ''' anguloDisparo = anguloDisparo * np.pi / 180 - acel = fuerzaMagnetica/masa - g*(cteRoz * np.cos(anguloDisparo) + np.sin(anguloDisparo)) - acel[acel < 0 ] = 0 return acel @@ -118,17 +116,63 @@ def calcular_resistencia(diamCu, longC, diamC, espiras): def calcular_masa(diamFe, longFe): return np.pi * diamFe**2 / 4 * longFe * densidadHierro -if __name__ == '__main__': - numeroModulos = 1 +if __name__ == '__main__': + from funcionesSimELectrica import * + from scipy.integrate import cumulative_trapezoid + + tiempoSimulacion = 10e-3 + step = tiempoSimulacion / 1e6 + + numeroModulos = 2 longitudBobina = 53.21e-3 # m diametroInteriorBobina = 6.035e-3 * 2 # m - espirasBobina = 600 + espirasBobina = 500 diametroCuBobina = 0.8e-3 # m longitudVastago = 96e-3 # m diametroVastago = 3.045e-3 * 2 # m + + Tension = 30 # V + Capacitancia = 500e-3 # F + + masa = calcular_masa(diametroVastago, longitudVastago) + anguloDisparo = 40 + resistencia = calcular_resistencia(diametroCuBobina, longitudBobina, + diametroInteriorBobina, espirasBobina) + + reluctancia = np.mean(reluctancia_funcX(longitudVastago, diametroVastago, + longitudBobina, diametroInteriorBobina, + diametroCuBobina, espirasBobina)) + + inductancia = espirasBobina**2 / reluctancia + + tiempo = np.arange(0,tiempoSimulacion, step) + + corriente = solver_manual(Tension, resistencia, inductancia, Capacitancia, tiempo) + fuerza = fuerza_magnetica(corriente, reluctancia, espirasBobina, diametroVastago) + aceleracion = calcular_aceleracion(masa, anguloDisparo, fuerza) + aceleracion[aceleracion<0]=0 + velocidad = cumulative_trapezoid(aceleracion, tiempo, initial=0) + posicion = cumulative_trapezoid(velocidad, tiempo, initial=0) + + idx = posicion <= longitudBobina + + tiempo = tiempo[idx] + posicion = posicion[idx] + velocidad = velocidad[idx] + aceleracion = aceleracion[idx] + + plt.figure() + #plt.plot(t, corriente, label='corriente') + #plt.plot(t, fuerza, label = 'Fuerza') + plt.plot(tiempo, aceleracion, label='aceleracion') + # plt.plot(tiempo, velocidad, label = 'velocidad') + #plt.plot(posicion, velocidad, label = 'posicion') + plt.legend() + plt.show() +