Source code for RCAIDE.Library.Methods.Powertrain.Converters.Generator.compute_generator_performance

# RCAIDE/Library/Methods/Powertrain/Converters/Generator/compute_generator_performance.py

# 
# Created: Feb 2025, M. Clarke 

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ---------------------------------------------------------------------------------------------------------------------- 
import RCAIDE

# package imports 
import numpy as np
 
# ----------------------------------------------------------------------------------------------------------------------
#  compute_omega_and_Q_from_Cp_and_V
# ----------------------------------------------------------------------------------------------------------------------    
[docs] def compute_generator_performance(generator,conditions): """ Computes generator performance characteristics including electrical, mechanical and thermal parameters. Parameters ---------- generator : Converter Generator component for which performance is being computed generator_conditions : Conditions Container for generator operating conditions conditions : Conditions Mission segment conditions containing freestream properties Returns ------- None Updates generator_conditions in-place with computed performance parameters Notes ----- This function handles both PMSM and DC generator types with different computation approaches: - Uses speed-torque relationships - Accounts for gearbox effects - Computes electrical parameters (current, voltage) - Determines overall efficiency **Major Assumptions** * Steady state operation * Uniform temperature distribution * No magnetic saturation effects * Linear speed-torque characteristics for DC generators * Constant material properties See Also -------- RCAIDE.Library.Components.Powertrain.Converters.DC_Generator RCAIDE.Library.Components.Powertrain.Converters.PMSM_Generator """ # unpack generator conditions generator_conditions = conditions.energy.converters[generator.tag] if type(generator) == RCAIDE.Library.Components.Powertrain.Converters.DC_Generator: if generator.inverse_calculation == False: power = generator_conditions.inputs.power Res = generator.resistance Kv = generator.speed_constant G = generator.gearbox.gear_ratio io = generator.no_load_current v = generator_conditions.outputs.voltage omega = generator_conditions.inputs.omega omega_internal = omega * G i = (v - (omega_internal) /Kv)/Res Q = power / omega etam = (1-io/i)*(1-i*Res/v) else: Res = generator.resistance Kv = generator.speed_constant G = generator.gearbox.gear_ratio io = generator.no_load_current v = generator_conditions.outputs.voltage i = generator_conditions.outputs.current P_elec = i * v omega_internal = ((v - (Res * i)) * Kv) Q_internal = (((v-omega_internal /Kv)/Res -io)/Kv) omega = omega_internal / G Q = Q_internal * G etam = (1-io/i)*(1-i*Res/v) generator_conditions.outputs.current = i generator_conditions.outputs.power = i *v generator_conditions.inputs.power = Q * omega generator_conditions.inputs.torque = Q generator_conditions.inputs.omega = omega generator_conditions.inputs.efficiency = etam elif type(generator) == RCAIDE.Library.Components.Powertrain.Converters.PMSM_Generator: if generator.inverse_calculation == False: io = generator.no_load_current G = generator.gearbox.gear_ratio omega = generator_conditions.inputs.omega power = generator_conditions.inputs.power Kv = generator.speed_constant D_in = generator.inner_diameter kw = generator.winding_factor Res = generator.resistance L = generator.stack_length l = generator.length_of_path mu_0 = generator.mu_0 mu_r = generator.mu_r Q = power/omega i = np.sqrt((2*(Q/G)*l)/(D_in*mu_0*mu_r*L*kw)) v = (omega * G)/((2 * np.pi / 60)*Kv) + i*Res etam = (1-io/i)*(1-i*Res/v) generator_conditions.outputs.current = i generator_conditions.outputs.power = i *v generator_conditions.outputs.efficiency = etam else: Res = generator.resistance G = generator.gearbox.gear_ratio I = generator_conditions.outputs.current V = generator_conditions.outputs.voltage I_turn = I/generator.number_of_turns # [A] current in each turn omega = (generator.speed_constant*(V - I*Res)) /G # [RPM -> rad/s] rotor angular velocity A = np.pi * ((generator.stator_outer_diameter**2 - generator.stator_inner_diameter**2) / 4) # [m**2] cross-sectional area of the reluctance path perpendicular to length 𝑙 MMF_coil = generator.number_of_turns*I_turn # [A*turns] magnetomotive force applied to the reluctance path for a coil (Eq.14) R = generator.length_of_path/(A*generator.mu_0*generator.mu_r) # [A*turn/Wb] reluctance of a given path or given reluctant element (Eq.16) phi = MMF_coil/R # [Wb] magnetic flux through the reluctance path (Eq.12) B_sign = phi/A # [V*s/m**2] ranges from 0.5 to 1.2, average magnitude of the radial flux density produced by the rotor A_sign = (generator.winding_factor*I)/(np.pi*generator.stator_inner_diameter) # [-] stator electrical loading (Eq.2) TQ = (np.pi/2)*(B_sign*A_sign)*(generator.inner_diameter**2)*generator.stack_length # [Nm] torque (Eq.1) P = omega*TQ # [W] power (Eq.1) A = np.pi * ((generator.stator_outer_diameter**2 - generator.stator_inner_diameter**2) / 4) # [m**2] cross-sectional area of the reluctance path perpendicular to length 𝑙 generator_conditions.inputs.torque = TQ generator_conditions.inputs.omega = omega generator_conditions.inputs.power = P return