This commit is contained in:
Oscar Suescun Elizalde 2025-05-27 10:19:17 +02:00
parent 5da5391c28
commit 04076e9292
3 changed files with 74 additions and 39 deletions

View File

@ -1,6 +1,6 @@
from funcionesSimELectrica import *
from funcionesSimFisica import *
from scipy.integrate import cumulative_trapezoid as integrar
from scipy.integrate import cumulative_trapezoid
import matplotlib.pyplot as plt
import numpy as np
@ -45,41 +45,30 @@ if __name__ == '__main__':
inductancia = espirasBobina**2 / reluctancia
tTemp = 0
tempAcel = 0
tempVelocidad = 0
longTemp = longitudBobina
tiempo = np.arange(0,tiempoSimulacion, step)
corriente = solver_manual(Tension, resistencia, inductancia, Capacitancia, tiempo)
fuerza = fuerza_magnetica(corriente, reluctancia, espirasBobina, diametroVastago)
aceleracion = []
for i in np.arange(numeroModulos):
t = np.arange(0,tiempoSimulacion, step)
aceleracion = np.append(aceleracion, calcular_aceleracion(masa, anguloDisparo, fuerza))
if i == 0:aceleracion[aceleracion<0] = 0 # Evitar que la aceleracion sea negativa en la primera vuelta
else:pass
corriente = solver_manual(Tension, resistencia, inductancia, Capacitancia, t)
fuerza = fuerza_magnetica(corriente, reluctancia, espirasBobina, diametroVastago)
acel = aceleracion(masa, 40, fuerza)
velocidad = cumulative_trapezoid(aceleracion,tiempo,initial=0)
posicion = cumulative_trapezoid(velocidad, tiempo, initial=0)
idx = posicion <= longitudBobina*(i+1)
tiempo = tiempo[idx] # Recorto los vectores
posicion = posicion[idx] # para tener en cuenta
velocidad = velocidad[idx] # que el vastago recorre
aceleracion = aceleracion[idx] # la longitud de la bobina
t = tTemp + t
velocidad = integrar(acel, t, initial = 0)
posicion = integrar(velocidad, t, initial = 0)
idx = posicion<=longTemp
t = t[idx]
corriente = corriente[idx]
fuerza = fuerza[idx]
acel = acel[idx]
velocidad = velocidad[idx]
posicion = posicion[idx]
tempAcel = acel[-1]
tempVelocidad = velocidad[-1]
longTemp = longitudBobina + longTemp
plt.figure()
#plt.plot(t, corriente, label='corriente')
#plt.plot(t, fuerza, label = 'Fuerza')
#plt.plot(t, acel, label='aceleracion')
plt.plot(posicion, velocidad, label = 'velocidad')
plt.legend()
plt.show()

View File

@ -52,7 +52,9 @@ def solver_manual(tensionCap, Rtotal, Lbobina, Ctotal, t):
def simular_LTS(tensionCap, Rtotal, Lbobina, Ctotal, lts_path, tSim = 100e-3, toff_sw = 1e-3, ton_mos = 1.5e-3):
'''
Funcion principal de simulacion.
Funcion principal de simulacion. Es legado por si se quisiera simular
con LTSpice. No se usa porque hay problemas con el tamaño del step
en los resultados.
Entradas Obligatorias:
- tensionCap -> Tension del capacitor

View File

@ -86,16 +86,14 @@ def fuerza_magnetica(corriente, reluctancia, espiras, diamFe):
return np.sign(corriente) * 0.5 * b**2 * secFe / muVacio
def aceleracion(masa, anguloDisparo, fuerzaMagnetica):
def calcular_aceleracion(masa, anguloDisparo, fuerzaMagnetica):
'''
Retocar esto, tiene en cuenta el principio solo pero hay cosas raras
'''
anguloDisparo = anguloDisparo * np.pi / 180
acel = fuerzaMagnetica/masa - g*(cteRoz * np.cos(anguloDisparo) + np.sin(anguloDisparo))
acel[acel < 0 ] = 0
return acel
@ -118,17 +116,63 @@ def calcular_resistencia(diamCu, longC, diamC, espiras):
def calcular_masa(diamFe, longFe): return np.pi * diamFe**2 / 4 * longFe * densidadHierro
if __name__ == '__main__':
numeroModulos = 1
if __name__ == '__main__':
from funcionesSimELectrica import *
from scipy.integrate import cumulative_trapezoid
tiempoSimulacion = 10e-3
step = tiempoSimulacion / 1e6
numeroModulos = 2
longitudBobina = 53.21e-3 # m
diametroInteriorBobina = 6.035e-3 * 2 # m
espirasBobina = 600
espirasBobina = 500
diametroCuBobina = 0.8e-3 # m
longitudVastago = 96e-3 # m
diametroVastago = 3.045e-3 * 2 # m
Tension = 30 # V
Capacitancia = 500e-3 # F
masa = calcular_masa(diametroVastago, longitudVastago)
anguloDisparo = 40
resistencia = calcular_resistencia(diametroCuBobina, longitudBobina,
diametroInteriorBobina, espirasBobina)
reluctancia = np.mean(reluctancia_funcX(longitudVastago, diametroVastago,
longitudBobina, diametroInteriorBobina,
diametroCuBobina, espirasBobina))
inductancia = espirasBobina**2 / reluctancia
tiempo = np.arange(0,tiempoSimulacion, step)
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]
plt.figure()
#plt.plot(t, corriente, label='corriente')
#plt.plot(t, fuerza, label = 'Fuerza')
plt.plot(tiempo, aceleracion, label='aceleracion')
# plt.plot(tiempo, velocidad, label = 'velocidad')
#plt.plot(posicion, velocidad, label = 'posicion')
plt.legend()
plt.show()