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