clase simulador
This commit is contained in:
		
							parent
							
								
									274b92d92c
								
							
						
					
					
						commit
						ced3a58cb9
					
				
							
								
								
									
										135
									
								
								src/claseSimulador.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								src/claseSimulador.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,135 @@ | ||||
| from funcionesSimELectrica import * | ||||
| from funcionesSimFisica import * | ||||
| from scipy.integrate import cumulative_trapezoid | ||||
| 
 | ||||
| __author__ = 'Oscar Suescun' | ||||
| 
 | ||||
| class Simulador: | ||||
|     def __init__(self, longitudVastago, diametroVastago, longitudBobina,  | ||||
|                     diametroInteriorBobina, diametroCuBobina, espirasBobina): | ||||
|         ''' | ||||
|         Se define el vastago | ||||
| 
 | ||||
|         ''' | ||||
| 
 | ||||
|         self.espirasBobina = espirasBobina | ||||
|         self.longitudBobina = longitudBobina | ||||
|          | ||||
|         self.diametroVastago = diametroVastago | ||||
|          | ||||
|         self.anguloDisparo = anguloDisparo | ||||
| 
 | ||||
|         self.masa = calcular_masa(diametroVastago, longitudVastago) | ||||
| 
 | ||||
|         self.resistencia, self.reluctancia = calcular_bobina(longitudVastago, diametroVastago, longitudBobina,  | ||||
|                                               diametroInteriorBobina, diametroCuBobina, espirasBobina) | ||||
|      | ||||
|         self.inductancia = self.espirasBobina**2 / self.reluctancia | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     def modulo_inicial(self, tension, capacitancia, tiempo): | ||||
| 
 | ||||
| 
 | ||||
|         corriente = solver_manual(tension, self.resistencia, self.inductancia, capacitancia, tiempo) | ||||
|         fuerza = fuerza_magnetica(corriente, self.reluctancia, self.espirasBobina, self.diametroVastago) | ||||
|         aceleracion = calcular_aceleracion(self.masa, self.anguloDisparo, fuerza) | ||||
|         aceleracion[aceleracion<0]=0 | ||||
|         velocidad = cumulative_trapezoid(aceleracion, tiempo, initial=0) | ||||
|         posicion = cumulative_trapezoid(velocidad, tiempo, initial=0) | ||||
| 
 | ||||
|         idx = posicion <= self.longitudBobina | ||||
| 
 | ||||
|         tiempo = tiempo[idx] | ||||
|         posicion = posicion[idx] | ||||
|         velocidad = velocidad[idx] | ||||
|         aceleracion = aceleracion[idx] | ||||
| 
 | ||||
|         self.resultado = { | ||||
|             'tiempo' : tiempo, | ||||
|             'posicion' : posicion, | ||||
|             'velocidad' : velocidad, | ||||
|             'aceleracion' : aceleracion, | ||||
|             'fuerza' : fuerza, | ||||
|             'corriente' : corriente | ||||
|         } | ||||
| 
 | ||||
|     def modulo(self, tension, capacidad, tiempo): | ||||
| 
 | ||||
| 
 | ||||
|         corriente = solver_manual(tension, self.resistencia, self.inductancia, capacidad, tiempo) | ||||
|         fuerza = fuerza_magnetica(corriente, self.reluctancia, self.espirasBobina, self.diametroVastago) | ||||
|         aceleracion = calcular_aceleracion(self.masa, self.anguloDisparo, fuerza) | ||||
| 
 | ||||
|         tiempo = np.append(self.resultado['tiempo'], tiempo + self.resultado['tiempo'][-1]) | ||||
| 
 | ||||
|         aceleracion = np.append(self.resultado['aceleracion'], aceleracion) | ||||
|         velocidad = cumulative_trapezoid(aceleracion, tiempo, initial=0) | ||||
|         posicion = cumulative_trapezoid(velocidad, tiempo, initial=0) | ||||
| 
 | ||||
|         idx = posicion <= self.longitudBobina + self.resultado['posicion'][-1] | ||||
| 
 | ||||
|         tiempo = tiempo[idx] | ||||
|         posicion = posicion[idx] | ||||
|         velocidad = velocidad[idx] | ||||
|         aceleracion = aceleracion[idx] | ||||
| 
 | ||||
|         self.resultado = { | ||||
|             'tiempo' : tiempo, | ||||
|             'posicion' : posicion, | ||||
|             'velocidad' : velocidad, | ||||
|             'aceleracion' : aceleracion, | ||||
|             'fuerza' : fuerza, | ||||
|             'corriente' : corriente | ||||
|         } | ||||
| 
 | ||||
|     def mostrar_resultados(self): return self.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 | ||||
| 
 | ||||
|     simular = Simulador(longitudVastago, diametroVastago, longitudBobina,  | ||||
|                         diametroInteriorBobina, diametroCuBobina, espirasBobina) | ||||
| 
 | ||||
|     tiempo = np.arange(0, tiempoSimulacion, step) | ||||
| 
 | ||||
|     simular.modulo_inicial(Tension, Capacitancia, tiempo) | ||||
|      | ||||
|     for i in range(1,numeroModulos): | ||||
| 
 | ||||
|         print(f'{i+1}/{numeroModulos}') | ||||
| 
 | ||||
|         simular.modulo(Tension, Capacitancia, tiempo) | ||||
|      | ||||
| 
 | ||||
|     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(simular.resultado['posicion'], simular.resultado['velocidad']) | ||||
|     plt.xlabel('Posicion [m]') | ||||
|     plt.ylabel('Velocidad [m/s]') | ||||
|     plt.show() | ||||
| 
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Oscar Suescun Elizalde
						Oscar Suescun Elizalde