diff --git a/src/debug_mecanica_disparo.py b/src/debug_mecanica_disparo.py deleted file mode 100644 index 6f67cdf..0000000 --- a/src/debug_mecanica_disparo.py +++ /dev/null @@ -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 - - - - diff --git a/src/funcionesSimELectrica.py b/src/funcionesSimELectrica.py index 9fbe9fb..01fd479 100644 --- a/src/funcionesSimELectrica.py +++ b/src/funcionesSimELectrica.py @@ -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,19 @@ 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__': - lts_path = "D:\\Appdata\\LTSpice\\LTSPice.exe" +<<<<<<< HEAD + import matplotlib.pyplot as plt - Tension = 30 + lts_path = "C:/Users/osuescuneli/AppData/Local/Programs/ADI/LTspice/LTspice.exe" +======= + lts_path = "D:\\Appdata\\LTSpice\\LTSPice.exe" +>>>>>>> a2d05aa067ff48217660c219d56c5865db470197 + + Tension = 300 Resistencia = 10 Inductancia = 1 Capacitancia = 0.02 @@ -147,7 +142,6 @@ if __name__ == '__main__': tiempoSwitch = 25e-6 tiempoMos = 50e-6 - resultado1 = simular_LTS(Tension, Resistencia, Inductancia, diff --git a/src/funcionesSimFisica.py b/src/funcionesSimFisica.py index 7adeee0..e0dbf2e 100644 --- a/src/funcionesSimFisica.py +++ b/src/funcionesSimFisica.py @@ -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 @@ -119,6 +128,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 @@ -133,19 +143,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 @@ -168,9 +174,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() diff --git a/src/modulosDisparo.py b/src/modulosDisparo.py new file mode 100644 index 0000000..73582f9 --- /dev/null +++ b/src/modulosDisparo.py @@ -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() + diff --git a/src/simulador/modelo_transitorio.net b/src/simulador/modelo_transitorio.net new file mode 100644 index 0000000..19027a9 --- /dev/null +++ b/src/simulador/modelo_transitorio.net @@ -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 diff --git a/src/simulador/modelo_transitorio_1.net b/src/simulador/modelo_transitorio_1.net index eca5ccb..264dd90 100644 --- a/src/simulador/modelo_transitorio_1.net +++ b/src/simulador/modelo_transitorio_1.net @@ -26,7 +26,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 diff --git a/src/simulador/modelo_transitorio_1.op.raw b/src/simulador/modelo_transitorio_1.op.raw index b02ca47..e2a265d 100644 Binary files a/src/simulador/modelo_transitorio_1.op.raw and b/src/simulador/modelo_transitorio_1.op.raw differ diff --git a/src/simulador/modelo_transitorio_1.raw b/src/simulador/modelo_transitorio_1.raw index e9d6bfe..e4677b5 100644 Binary files a/src/simulador/modelo_transitorio_1.raw and b/src/simulador/modelo_transitorio_1.raw differ