as
This commit is contained in:
parent
5da5391c28
commit
04076e9292
@ -1,6 +1,6 @@
|
|||||||
from funcionesSimELectrica import *
|
from funcionesSimELectrica import *
|
||||||
from funcionesSimFisica import *
|
from funcionesSimFisica import *
|
||||||
from scipy.integrate import cumulative_trapezoid as integrar
|
from scipy.integrate import cumulative_trapezoid
|
||||||
|
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import numpy as np
|
import numpy as np
|
||||||
@ -45,41 +45,30 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
inductancia = espirasBobina**2 / reluctancia
|
inductancia = espirasBobina**2 / reluctancia
|
||||||
|
|
||||||
tTemp = 0
|
tiempo = np.arange(0,tiempoSimulacion, step)
|
||||||
tempAcel = 0
|
|
||||||
tempVelocidad = 0
|
corriente = solver_manual(Tension, resistencia, inductancia, Capacitancia, tiempo)
|
||||||
longTemp = longitudBobina
|
fuerza = fuerza_magnetica(corriente, reluctancia, espirasBobina, diametroVastago)
|
||||||
|
|
||||||
|
aceleracion = []
|
||||||
|
|
||||||
for i in np.arange(numeroModulos):
|
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)
|
velocidad = cumulative_trapezoid(aceleracion,tiempo,initial=0)
|
||||||
fuerza = fuerza_magnetica(corriente, reluctancia, espirasBobina, diametroVastago)
|
posicion = cumulative_trapezoid(velocidad, tiempo, initial=0)
|
||||||
acel = aceleracion(masa, 40, fuerza)
|
|
||||||
|
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()
|
|
@ -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):
|
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:
|
Entradas Obligatorias:
|
||||||
- tensionCap -> Tension del capacitor
|
- tensionCap -> Tension del capacitor
|
||||||
|
@ -86,16 +86,14 @@ def fuerza_magnetica(corriente, reluctancia, espiras, diamFe):
|
|||||||
|
|
||||||
return np.sign(corriente) * 0.5 * b**2 * secFe / muVacio
|
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
|
Retocar esto, tiene en cuenta el principio solo pero hay cosas raras
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
anguloDisparo = anguloDisparo * np.pi / 180
|
anguloDisparo = anguloDisparo * np.pi / 180
|
||||||
|
|
||||||
acel = fuerzaMagnetica/masa - g*(cteRoz * np.cos(anguloDisparo) + np.sin(anguloDisparo))
|
acel = fuerzaMagnetica/masa - g*(cteRoz * np.cos(anguloDisparo) + np.sin(anguloDisparo))
|
||||||
acel[acel < 0 ] = 0
|
|
||||||
return acel
|
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
|
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
|
longitudBobina = 53.21e-3 # m
|
||||||
diametroInteriorBobina = 6.035e-3 * 2 # m
|
diametroInteriorBobina = 6.035e-3 * 2 # m
|
||||||
espirasBobina = 600
|
espirasBobina = 500
|
||||||
diametroCuBobina = 0.8e-3 # m
|
diametroCuBobina = 0.8e-3 # m
|
||||||
|
|
||||||
longitudVastago = 96e-3 # m
|
longitudVastago = 96e-3 # m
|
||||||
diametroVastago = 3.045e-3 * 2 # 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()
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user