131 lines
4.0 KiB
Python
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()
|
|
|