clase simulador
This commit is contained in:
parent
274b92d92c
commit
ced3a58cb9
135
src/claseSimulador.py
Normal file
135
src/claseSimulador.py
Normal 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()
|
||||
|
Loading…
Reference in New Issue
Block a user