From 055ab90f0731a2fb0ef4514777fa3600adc2d7f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Betto?= <niccolo.betto@skywarder.eu> Date: Wed, 16 Apr 2025 16:54:56 +0200 Subject: [PATCH] [RIGv2] Close nitrogen valve after firing to stop pressurizing the OX --- src/RIGv2/Actuators/Actuators.cpp | 2 +- .../GroundModeManager/GroundModeManager.cpp | 23 +++++++++++-------- src/common/Events.h | 11 +++++++++ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/RIGv2/Actuators/Actuators.cpp b/src/RIGv2/Actuators/Actuators.cpp index 6138b6901..9593345c8 100644 --- a/src/RIGv2/Actuators/Actuators.cpp +++ b/src/RIGv2/Actuators/Actuators.cpp @@ -420,7 +420,7 @@ void Actuators::updatePositionsTask() long long currentTime = getTime(); // Iterate over all servos - for (uint8_t idx = 0; idx < 10; idx++) + for (uint8_t idx = 0; idx < infos.size(); idx++) { if (currentTime < infos[idx].closeTs) { diff --git a/src/RIGv2/StateMachines/GroundModeManager/GroundModeManager.cpp b/src/RIGv2/StateMachines/GroundModeManager/GroundModeManager.cpp index 31bdd3790..48eb6e201 100644 --- a/src/RIGv2/StateMachines/GroundModeManager/GroundModeManager.cpp +++ b/src/RIGv2/StateMachines/GroundModeManager/GroundModeManager.cpp @@ -322,6 +322,7 @@ State GroundModeManager::state_firing(const Event& event) } case TMTC_OPEN_NITROGEN: + case MOTOR_OPEN_CHAMBER: { // Open nitrogen uint32_t chamberTime = getModule<Registry>()->getOrSetDefaultUnsafe( @@ -330,7 +331,15 @@ State GroundModeManager::state_firing(const Event& event) getModule<Actuators>()->openChamberWithTime(chamberTime); - return transition(&GroundModeManager::state_disarmed); + if (event == TMTC_OPEN_NITROGEN) + { + // Nitrogen TMTC causes automatic disarm + return transition(&GroundModeManager::state_disarmed); + } + else + { + return HANDLED; + } } case MOTOR_COOLING_TIMEOUT: // Normal firing end @@ -433,15 +442,8 @@ State GroundModeManager::state_oxidizer(const Event& event) return HANDLED; } - case MOTOR_OPEN_CHAMBER: + case MOTOR_MAIN_CLOSE: { - uint32_t chamberTime = getModule<Registry>()->getOrSetDefaultUnsafe( - CONFIG_ID_CHAMBER_TIME, - Config::GroundModeManager::DEFAULT_CHAMBER_VALVE_TIME); - - // Open the chamber valve - getModule<Actuators>()->openChamberWithTime(chamberTime); - return transition(&GroundModeManager::state_cooling); } @@ -460,6 +462,9 @@ State GroundModeManager::state_cooling(const Event& event) { updateAndLogStatus(GroundModeManagerState::COOLING); + // Stop pressurizing the OX after the firing is over + getModule<Actuators>()->closeServo(ServosList::NITROGEN_VALVE); + return HANDLED; } diff --git a/src/common/Events.h b/src/common/Events.h index 6a93c35fd..5e02ec862 100644 --- a/src/common/Events.h +++ b/src/common/Events.h @@ -294,16 +294,27 @@ inline std::string getEventString(uint8_t event) {MOTOR_START_TARS, "MOTOR_START_TARS"}, {MOTOR_STOP_TARS, "MOTOR_STOP_TARS"}, {MOTOR_OX_FIL_OPEN, "MOTOR_OX_FIL_OPEN"}, + {MOTOR_OX_FIL_CLOSE, "MOTOR_OX_FIL_CLOSE"}, {MOTOR_OX_REL_OPEN, "MOTOR_OX_REL_OPEN"}, + {MOTOR_OX_REL_CLOSE, "MOTOR_OX_REL_CLOSE"}, {MOTOR_OX_DET_OPEN, "MOTOR_OX_DET_OPEN"}, + {MOTOR_OX_DET_CLOSE, "MOTOR_OX_DET_CLOSE"}, {MOTOR_N2_3W_OPEN, "MOTOR_N2_3W_OPEN"}, + {MOTOR_N2_3W_CLOSE, "MOTOR_N2_3W_CLOSE"}, {MOTOR_N2_FIL_OPEN, "MOTOR_N2_FIL_OPEN"}, + {MOTOR_N2_FIL_CLOSE, "MOTOR_N2_FIL_CLOSE"}, {MOTOR_N2_REL_OPEN, "MOTOR_N2_REL_OPEN"}, + {MOTOR_N2_REL_CLOSE, "MOTOR_N2_REL_CLOSE"}, {MOTOR_N2_DET_OPEN, "MOTOR_N2_DET_OPEN"}, + {MOTOR_N2_DET_CLOSE, "MOTOR_N2_DET_CLOSE"}, {MOTOR_NITR_OPEN, "MOTOR_NITR_OPEN"}, + {MOTOR_NITR_CLOSE, "MOTOR_NITR_CLOSE"}, {MOTOR_OX_VEN_OPEN, "MOTOR_OX_VEN_OPEN"}, + {MOTOR_OX_VEN_CLOSE, "MOTOR_OX_VEN_CLOSE"}, {MOTOR_N2_QUE_OPEN, "MOTOR_N2_QUE_OPEN"}, + {MOTOR_N2_QUE_CLOSE, "MOTOR_N2_QUE_CLOSE"}, {MOTOR_MAIN_OPEN, "MOTOR_MAIN_OPEN"}, + {MOTOR_MAIN_CLOSE, "MOTOR_MAIN_CLOSE"}, {MOTOR_IGNITION, "MOTOR_IGNITION"}, {MOTOR_MANUAL_ACTION, "MOTOR_MANUAL_ACTION"}, {MOTOR_OPEN_OXIDANT, "MOTOR_OPEN_OXIDANT"}, -- GitLab