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()