simulador bby
This commit is contained in:
parent
04076e9292
commit
c29602b1b2
@ -1,74 +0,0 @@
|
||||
from funcionesSimELectrica import *
|
||||
from funcionesSimFisica import *
|
||||
from scipy.integrate import cumulative_trapezoid
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
|
||||
__author__ = 'Oscar Suescun'
|
||||
|
||||
lts_path = "C:/Users/osuescuneli/AppData/Local/Programs/ADI/LTspice/LTspice.exe"
|
||||
|
||||
'''
|
||||
Esto sirve para hacer debug del sistema y ver como se comportan
|
||||
las funciones para la
|
||||
|
||||
'''
|
||||
if __name__ == '__main__':
|
||||
tiempoSimulacion = 10e-3
|
||||
step = tiempoSimulacion / 1e6
|
||||
|
||||
numeroModulos = 2
|
||||
|
||||
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
|
||||
|
||||
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 = []
|
||||
|
||||
for i in np.arange(numeroModulos):
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
from PyLTSpice import SimRunner, SpiceEditor, RawRead
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
'''
|
||||
Este codigo funciona sobre modelo.net
|
||||
@ -122,23 +121,15 @@ def simular_LTS(tensionCap, Rtotal, Lbobina, Ctotal, lts_path, tSim = 100e-3, to
|
||||
except KeyError as e:
|
||||
print(f'Error al leer señal del archivo .raw: {e}')
|
||||
return None
|
||||
|
||||
def dibujar(resultado):
|
||||
plt.figure()
|
||||
plt.plot(resultado['tiempo']*1e3, resultado['vCap'], label='Tension Cap [V]')
|
||||
plt.plot(resultado['tiempo']*1e3, resultado['vBob'], label='Tension Bobina [V]')
|
||||
plt.plot(resultado['tiempo']*1e3, resultado['iBob'], label='Corriente Bobina [A]')
|
||||
plt.xlabel("Tiempo [ms]")
|
||||
plt.grid()
|
||||
plt.legend()
|
||||
plt.show()
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
lts_path = "C:/Users/osuescuneli/AppData/Local/Programs/ADI/LTspice/LTspice.exe"
|
||||
|
||||
Tension = 30
|
||||
Tension = 300
|
||||
Resistencia = 10
|
||||
Inductancia = 1
|
||||
Capacitancia = 0.02
|
||||
@ -147,7 +138,6 @@ if __name__ == '__main__':
|
||||
tiempoSwitch = 25e-6
|
||||
tiempoMos = 50e-6
|
||||
|
||||
|
||||
resultado1 = simular_LTS(Tension,
|
||||
Resistencia,
|
||||
Inductancia,
|
||||
|
@ -1,5 +1,4 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
global muVacio
|
||||
global muFeRel
|
||||
@ -25,6 +24,33 @@ def calcular_diametro_ext(longitudBobina, diametroCuBobina, espirasBobina, diame
|
||||
|
||||
return 2 * numeroCapas * diametroCuBobina + diametroInteriorBobina
|
||||
|
||||
def calcular_bobina(longitudVastago, diametroVastago, longitudBobina, diametroInteriorBobina, diametroCuBobina, espirasBobina):
|
||||
|
||||
resistencia = calcular_resistencia(diametroCuBobina, longitudBobina,
|
||||
diametroInteriorBobina, espirasBobina)
|
||||
|
||||
reluctancia = np.mean(reluctancia_funcX(longitudVastago, diametroVastago,
|
||||
longitudBobina, diametroInteriorBobina,
|
||||
diametroCuBobina, espirasBobina))
|
||||
|
||||
return resistencia, reluctancia
|
||||
|
||||
def calcular_resistencia(diamCu, longC, diamC, espiras):
|
||||
|
||||
espirasCapa = int(longC/diamCu)
|
||||
nCapasEnteras = int(espiras/espirasCapa) # solo capas completametne llenas
|
||||
espirasUltimaCapa = espiras - espirasCapa * nCapasEnteras # las espiras de la ultima capa
|
||||
|
||||
longitud = 0
|
||||
|
||||
for i in range(nCapasEnteras): longitud += espirasCapa*np.pi*(diamC + (1+i)*diamCu) # Calculo longitud de total de las capas llenas
|
||||
|
||||
longitud += espirasUltimaCapa*np.pi*(diamC + (1 + nCapasEnteras)*diamCu)
|
||||
|
||||
seccionCu = np.pi * diamCu**2 / 4
|
||||
|
||||
return resCu * longitud / seccionCu
|
||||
|
||||
def reluctancia_funcX(longFe, diamFe, longC, diamCint, diamCu, espiras):
|
||||
'''
|
||||
Esta funcion devuelve un vector que contenga la reluctancia total en
|
||||
@ -95,23 +121,6 @@ def calcular_aceleracion(masa, anguloDisparo, fuerzaMagnetica):
|
||||
anguloDisparo = anguloDisparo * np.pi / 180
|
||||
acel = fuerzaMagnetica/masa - g*(cteRoz * np.cos(anguloDisparo) + np.sin(anguloDisparo))
|
||||
return acel
|
||||
|
||||
|
||||
def calcular_resistencia(diamCu, longC, diamC, espiras):
|
||||
|
||||
espirasCapa = int(longC/diamCu)
|
||||
nCapasEnteras = int(espiras/espirasCapa) # solo capas completametne llenas
|
||||
espirasUltimaCapa = espiras - espirasCapa * nCapasEnteras # las espiras de la ultima capa
|
||||
|
||||
longitud = 0
|
||||
|
||||
for i in range(nCapasEnteras): longitud += espirasCapa*np.pi*(diamC + (1+i)*diamCu) # Calculo longitud de total de las capas llenas
|
||||
|
||||
longitud += espirasUltimaCapa*np.pi*(diamC + (1 + nCapasEnteras)*diamCu)
|
||||
|
||||
seccionCu = np.pi * diamCu**2 / 4
|
||||
|
||||
return resCu * longitud / seccionCu
|
||||
|
||||
def calcular_masa(diamFe, longFe): return np.pi * diamFe**2 / 4 * longFe * densidadHierro
|
||||
|
||||
@ -120,6 +129,7 @@ def calcular_masa(diamFe, longFe): return np.pi * diamFe**2 / 4 * longFe * densi
|
||||
if __name__ == '__main__':
|
||||
from funcionesSimELectrica import *
|
||||
from scipy.integrate import cumulative_trapezoid
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
tiempoSimulacion = 10e-3
|
||||
step = tiempoSimulacion / 1e6
|
||||
@ -134,19 +144,15 @@ if __name__ == '__main__':
|
||||
longitudVastago = 96e-3 # m
|
||||
diametroVastago = 3.045e-3 * 2 # m
|
||||
|
||||
anguloDisparo = 40
|
||||
|
||||
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))
|
||||
resistencia, reluctancia = calcular_bobina(longitudVastago, diametroVastago, longitudBobina,
|
||||
diametroInteriorBobina, diametroCuBobina, espirasBobina)
|
||||
|
||||
inductancia = espirasBobina**2 / reluctancia
|
||||
|
||||
@ -169,9 +175,9 @@ if __name__ == '__main__':
|
||||
plt.figure()
|
||||
#plt.plot(t, corriente, label='corriente')
|
||||
#plt.plot(t, fuerza, label = 'Fuerza')
|
||||
plt.plot(tiempo, aceleracion, label='aceleracion')
|
||||
#plt.plot(tiempo, aceleracion, label='aceleracion')
|
||||
# plt.plot(tiempo, velocidad, label = 'velocidad')
|
||||
#plt.plot(posicion, velocidad, label = 'posicion')
|
||||
plt.plot(posicion, velocidad, label = 'posicion')
|
||||
plt.legend()
|
||||
plt.show()
|
||||
|
||||
|
130
src/modulosDisparo.py
Normal file
130
src/modulosDisparo.py
Normal file
@ -0,0 +1,130 @@
|
||||
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()
|
||||
|
27
src/simulador/modelo_transitorio.net
Normal file
27
src/simulador/modelo_transitorio.net
Normal file
@ -0,0 +1,27 @@
|
||||
* C:\Users\osuescuneli\Desktop\practicas\Practia_Lanzadera\source\src\simulador\modelo_transitorio.asc
|
||||
* Generated by LTspice 24.1.5 for Windows.
|
||||
V1 N001 0 {V}
|
||||
S1 N001 condensador cont1 0 SW
|
||||
V2 cont1 0 PULSE(0 10 0 1n 1n {toff_sw} {tsim})
|
||||
C1 condensador 0 {C}
|
||||
M1 V2 cont2 0 0 IRFZ44N
|
||||
V3 cont2 0 PULSE(0 15 {ton_mos} 1n 1n {delta} {tsim})
|
||||
L1 V1 V2 {L}
|
||||
R1 condensador V1 {R}
|
||||
V4 N002 N003 30
|
||||
R2 N002 N003 20
|
||||
.model NMOS NMOS
|
||||
.model PMOS PMOS
|
||||
.lib C:\Users\osuescuneli\AppData\Local\LTspice\lib\cmp\standard.mos
|
||||
.tran 0 {tsim} 0
|
||||
.Model SW SW(Ron=1m Roff=100Meg Vt = 5)
|
||||
.param tsim 1.6m
|
||||
.param toff_sw 1m
|
||||
.param ton_mos 1.5m
|
||||
.param R 10
|
||||
.param C 0.02
|
||||
.param L 1
|
||||
.param V 30
|
||||
.param delta tsim-ton_mos
|
||||
.backanno
|
||||
.end
|
@ -21,7 +21,7 @@ R2 N002 N003 20
|
||||
.param R 10
|
||||
.param C 20m
|
||||
.param L 1
|
||||
.param V 30
|
||||
.param V 300
|
||||
.param delta tsim-ton_mos
|
||||
.backanno
|
||||
.end
|
||||
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user