Compare commits
	
		
			2 Commits
		
	
	
		
			a2d05aa067
			...
			723cdad5ad
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 723cdad5ad | ||
|   | 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,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,  | ||||
|  | ||||
| @ -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 | ||||
| @ -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 | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user