clase simulador

This commit is contained in:
Oscar Suescun Elizalde 2025-05-28 16:40:26 +02:00
parent 274b92d92c
commit ced3a58cb9

135
src/claseSimulador.py Normal file
View File

@ -0,0 +1,135 @@
from funcionesSimELectrica import *
from funcionesSimFisica import *
from scipy.integrate import cumulative_trapezoid
__author__ = 'Oscar Suescun'
class Simulador:
def __init__(self, longitudVastago, diametroVastago, longitudBobina,
diametroInteriorBobina, diametroCuBobina, espirasBobina):
'''
Se define el vastago
'''
self.espirasBobina = espirasBobina
self.longitudBobina = longitudBobina
self.diametroVastago = diametroVastago
self.anguloDisparo = anguloDisparo
self.masa = calcular_masa(diametroVastago, longitudVastago)
self.resistencia, self.reluctancia = calcular_bobina(longitudVastago, diametroVastago, longitudBobina,
diametroInteriorBobina, diametroCuBobina, espirasBobina)
self.inductancia = self.espirasBobina**2 / self.reluctancia
def modulo_inicial(self, tension, capacitancia, tiempo):
corriente = solver_manual(tension, self.resistencia, self.inductancia, capacitancia, tiempo)
fuerza = fuerza_magnetica(corriente, self.reluctancia, self.espirasBobina, self.diametroVastago)
aceleracion = calcular_aceleracion(self.masa, self.anguloDisparo, fuerza)
aceleracion[aceleracion<0]=0
velocidad = cumulative_trapezoid(aceleracion, tiempo, initial=0)
posicion = cumulative_trapezoid(velocidad, tiempo, initial=0)
idx = posicion <= self.longitudBobina
tiempo = tiempo[idx]
posicion = posicion[idx]
velocidad = velocidad[idx]
aceleracion = aceleracion[idx]
self.resultado = {
'tiempo' : tiempo,
'posicion' : posicion,
'velocidad' : velocidad,
'aceleracion' : aceleracion,
'fuerza' : fuerza,
'corriente' : corriente
}
def modulo(self, tension, capacidad, tiempo):
corriente = solver_manual(tension, self.resistencia, self.inductancia, capacidad, tiempo)
fuerza = fuerza_magnetica(corriente, self.reluctancia, self.espirasBobina, self.diametroVastago)
aceleracion = calcular_aceleracion(self.masa, self.anguloDisparo, fuerza)
tiempo = np.append(self.resultado['tiempo'], tiempo + self.resultado['tiempo'][-1])
aceleracion = np.append(self.resultado['aceleracion'], aceleracion)
velocidad = cumulative_trapezoid(aceleracion, tiempo, initial=0)
posicion = cumulative_trapezoid(velocidad, tiempo, initial=0)
idx = posicion <= self.longitudBobina + self.resultado['posicion'][-1]
tiempo = tiempo[idx]
posicion = posicion[idx]
velocidad = velocidad[idx]
aceleracion = aceleracion[idx]
self.resultado = {
'tiempo' : tiempo,
'posicion' : posicion,
'velocidad' : velocidad,
'aceleracion' : aceleracion,
'fuerza' : fuerza,
'corriente' : corriente
}
def mostrar_resultados(self): return self.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
simular = Simulador(longitudVastago, diametroVastago, longitudBobina,
diametroInteriorBobina, diametroCuBobina, espirasBobina)
tiempo = np.arange(0, tiempoSimulacion, step)
simular.modulo_inicial(Tension, Capacitancia, tiempo)
for i in range(1,numeroModulos):
print(f'{i+1}/{numeroModulos}')
simular.modulo(Tension, Capacitancia, tiempo)
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(simular.resultado['posicion'], simular.resultado['velocidad'])
plt.xlabel('Posicion [m]')
plt.ylabel('Velocidad [m/s]')
plt.show()