Skip to content

Added Thermal Runaway Event #128

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 2 commits into
base: dev
Choose a base branch
from
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions sphinx_config/models.rst
Original file line number Diff line number Diff line change
@@ -11,9 +11,9 @@ Models Summary
+----------------------+----------------------------+-----------------------------------+---------------------------------+---------------------------------+
| | Battery Model - Circuit | Battery Model - Electro Chemistry | Centrifugal Pump | Pneumatic Valve |
+======================+============================+===================================+=================================+=================================+
| Events | End of Discharge (EOD) | * End of Discharge (EOD) | * Impeller Wear Failure | * Leak-Bottom |
| | | * InsufficientCapacity | * Pump Oil Overheating | * Leak-Top |
| | | | * Radial Bering Overheat | * Leak-Internal |
| Events | * End of Discharge (EOD) | * End of Discharge (EOD) | * Impeller Wear Failure | * Leak-Bottom |
| | * ThermalRunaway | * InsufficientCapacity | * Pump Oil Overheating | * Leak-Top |
| | | * ThermalRunaway | * Radial Bering Overheat | * Leak-Internal |
| | | | * Thrust Beiring Overheat | * Spring Failure |
| | | | | * Friction Failure |
+----------------------+----------------------------+-----------------------------------+---------------------------------+---------------------------------+
13 changes: 10 additions & 3 deletions src/prog_models/models/battery_circuit.py
Original file line number Diff line number Diff line change
@@ -13,8 +13,9 @@ class BatteryCircuit(prognostics_model.PrognosticsModel):
This class implements an equivilant circuit model as described in the following paper:
`M. Daigle and S. Sankararaman, "Advanced Methods for Determining Prediction Uncertainty in Model-Based Prognostics with Application to Planetary Rovers," Annual Conference of the Prognostics and Health Management Society 2013, pp. 262-274, New Orleans, LA, October 2013. https://papers.phmsociety.org/index.php/phmconf/article/view/2253`

Events: (1)
Events: (2)
EOD: End of Discharge
ThermalRunaway: Thermal runaway has begun

Inputs/Loading: (1)
i: Current draw on the battery
@@ -63,7 +64,7 @@ class BatteryCircuit(prognostics_model.PrognosticsModel):

Note: This is much quicker but also less accurate as the electrochemistry model
"""
events = ['EOD']
events = ['EOD', 'ThermalRunaway']
inputs = ['i']
states = ['tb', 'qb', 'qcp', 'qcs']
outputs = ['t', 'v']
@@ -104,8 +105,12 @@ class BatteryCircuit(prognostics_model.PrognosticsModel):
# current ratings
'nomCapacity': 2.2, # nominal capacity, Ah
'CRateMin': 0.7, # current necessary for cruise,
'CRateMax': 2.5 # current necessary for hover
'CRateMax': 2.5, # current necessary for hover
# CRateMin, CRateMax based on values determined in `C. Silva and W. Johnson, "VTOL Urban Air Mobility Concept Vehicles for Technology Development" Aviation and Aeronautics Forum (Aviation 2018),June 2018. https://arc.aiaa.org/doi/abs/10.2514/6.2018-3847`

# ThermalRunaway
'ApproachingRunaway': 30, # Temperature (C) before RunawayTemp at which the battery is said to be approaching runaway
'RunawayTemp': 130 # Temperature (C) at which thermal runaway is said to begin
}

state_limits = {
@@ -152,6 +157,7 @@ def event_state(self, x):
voltage_EOD = (z['v'] - self.parameters['VEOD']) / \
self.parameters['VDropoff']
return {
'ThermalRunaway': min((self.parameters['RunawayTemp'] - x['tb'])/self.parameters['ApproachingRunaway'], 1),
'EOD': min(charge_EOD, voltage_EOD)
}

@@ -179,5 +185,6 @@ def threshold_met(self, x):

# Return true if voltage is less than the voltage threshold
return {
'ThermalRunaway': x['tb'] >= parameters['RunawayTemp'],
'EOD': V < parameters['VEOD']
}
13 changes: 10 additions & 3 deletions src/prog_models/models/battery_electrochem.py
Original file line number Diff line number Diff line change
@@ -108,8 +108,9 @@ class BatteryElectroChemEOD(PrognosticsModel):

The default model parameters included are for Li-ion batteries, specifically 18650-type cells. Experimental discharge curves for these cells can be downloaded from the `Prognostics Center of Excellence Data Repository https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/`.

Events: (1)
Events: (2)
EOD: End of Discharge
ThermalRunaway: Thermal runaway has begun

Inputs/Loading: (1)
i: Current draw on the battery
@@ -161,7 +162,7 @@ class BatteryElectroChemEOD(PrognosticsModel):
| VEOD : End of Discharge Voltage Threshold
| x0 : Initial state
"""
events = ['EOD']
events = ['EOD', 'ThermalRunaway']
inputs = ['i']
states = ['tb', 'Vo', 'Vsn', 'Vsp', 'qnB', 'qnS', 'qpB', 'qpS']
outputs = ['t', 'v']
@@ -208,7 +209,11 @@ class BatteryElectroChemEOD(PrognosticsModel):

# End of discharge voltage threshold
'VEOD': 3.0,
'VDropoff': 0.1 # Voltage above EOD after which voltage will be considered in SOC calculation
'VDropoff': 0.1, # Voltage above EOD after which voltage will be considered in SOC calculation

# ThermalRunaway
'ApproachingRunaway': 30, # Temperature (K) before runaway temp at which the battery is said to be approaching runaway
'RunawayTemp': 400.15 # Temperature (K) at which thermal runaway is said to begin
}

state_limits = {
@@ -295,6 +300,7 @@ def event_state(self, x):
charge_EOD = (x['qnS'] + x['qnB'])/self.parameters['qnMax']
voltage_EOD = (z['v'] - self.parameters['VEOD'])/self.parameters['VDropoff']
return {
'ThermalRunaway': min((self.parameters['RunawayTemp'] - x['tb'])/self.parameters['ApproachingRunaway'], 1),
'EOD': min(charge_EOD, voltage_EOD)
}

@@ -354,6 +360,7 @@ def threshold_met(self, x):

# Return true if voltage is less than the voltage threshold
return {
'ThermalRunaway': x['tb'] >= self.parameters['RunawayTemp'],
'EOD': z['v'] < self.parameters['VEOD']
}