source/src/modulosDisparo.py
Oscar Suescun Elizalde c29602b1b2 simulador bby
2025-05-27 17:36:22 +02:00

131 lines
4.0 KiB
Python

from funcionesSimELectrica import *
from funcionesSimFisica import *
from scipy.integrate import cumulative_trapezoid
__author__ = 'Oscar Suescun'
def modulo_inicial(tension, capacitancia, inductancia, resistencia,
espiras, tiempo, masa, anguloDisparo,
longitudBobina, diametroVastago ):
reluctancia = espiras**2/inductancia
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]
resultado = {
'tiempo' : tiempo,
'posicion' : posicion,
'velocidad' : velocidad,
'aceleracion' : aceleracion,
'fuerza' : fuerza,
'corriente' : corriente
}
return resultado
def modulo(resultado, tension, capacidad, inductancia, resistencia, espiras,
tiempo, masa, anguloDisparo, longitudBobina, diametroVastago):
reluctancia = espiras**2/inductancia
corriente = solver_manual(tension, resistencia, inductancia, capacidad, tiempo)
fuerza = fuerza_magnetica(corriente, reluctancia, espiras, diametroVastago)
aceleracion = calcular_aceleracion(masa, anguloDisparo, fuerza)
tiempo = np.append(resultado['tiempo'], tiempo + resultado['tiempo'][-1])
aceleracion = np.append(resultado['aceleracion'], aceleracion)
velocidad = cumulative_trapezoid(aceleracion, tiempo, initial=0)
posicion = cumulative_trapezoid(velocidad, tiempo, initial=0)
idx = posicion <= longitudBobina + resultado['posicion'][-1]
tiempo = tiempo[idx]
posicion = posicion[idx]
velocidad = velocidad[idx]
aceleracion = aceleracion[idx]
resultado = {
'tiempo' : tiempo,
'posicion' : posicion,
'velocidad' : velocidad,
'aceleracion' : aceleracion,
'fuerza' : fuerza,
'corriente' : corriente
}
return resultado
if __name__=='__main__':
import matplotlib.pyplot as plt
import os
tiempoSimulacion = 10e-3
step = tiempoSimulacion / 1e6
numeroModulos = 3
longitudBobina = 53.21e-3 # m
diametroInteriorBobina = 6.035e-3 * 2 # m
espirasBobina = 500
diametroCuBobina = 0.8e-3 # m
longitudVastago = 96e-3 # m
diametroVastago = 3.045e-3 * 2 # m
anguloDisparo = 40
Tension = 30 # V
Capacitancia = 10e-3 # F
masa = calcular_masa(diametroVastago, longitudVastago)
resistencia, reluctancia = calcular_bobina(longitudVastago, diametroVastago, longitudBobina,
diametroInteriorBobina, diametroCuBobina, espirasBobina)
inductancia = espirasBobina**2 / reluctancia
tiempo = np.arange(0, tiempoSimulacion, step)
resultado = modulo_inicial(Tension, Capacitancia, inductancia,
resistencia, espirasBobina, tiempo, masa,
anguloDisparo, longitudBobina, diametroVastago)
for i in range(1,numeroModulos):
print(resultado['posicion'][-1])
print(f'{i+1}/{numeroModulos}')
resultado = modulo(resultado,Tension, Capacitancia, inductancia,
resistencia, espirasBobina, tiempo, masa,
anguloDisparo, longitudBobina, diametroVastago )
plt.figure()
#plt.plot(t, fuerza, label = 'Fuerza')
#plt.plot(resultado['tiempo'], resultado['aceleracion'], label='aceleracion')
#plt.plot(resultado['tiempo'], resultado['velocidad'], label = 'velocidad')
plt.plot(resultado['posicion'], resultado['velocidad'])
plt.xlabel('Posicion [m]')
plt.ylabel('Velocidad [m/s]')
plt.show()