From 2288a64e510d80a9e6dd5305b18a4da102014bdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Betto?= <niccolo.betto@skywarder.eu> Date: Wed, 19 Mar 2025 22:55:13 +0100 Subject: [PATCH] [RIGv2] Repurpose OX tank top/bottom PTs to N2 and OX tanks --- scripts/logdecoder/General/logdecoder.cpp | 4 +- scripts/logdecoder/RIGv2/logdecoder.cpp | 4 +- src/RIGv2/CanHandler/CanHandler.cpp | 4 +- src/RIGv2/Configs/SensorsConfig.h | 32 ++++---- src/RIGv2/Radio/Radio.cpp | 11 +-- src/RIGv2/Sensors/Sensors.cpp | 98 +++++++++++------------ src/RIGv2/Sensors/Sensors.h | 28 +++---- src/RIGv2/Sensors/SensorsData.h | 12 +-- src/RIGv2/StateMachines/TARS1/TARS1.cpp | 2 +- 9 files changed, 97 insertions(+), 98 deletions(-) diff --git a/scripts/logdecoder/General/logdecoder.cpp b/scripts/logdecoder/General/logdecoder.cpp index c2639f17f..056abac66 100644 --- a/scripts/logdecoder/General/logdecoder.cpp +++ b/scripts/logdecoder/General/logdecoder.cpp @@ -115,8 +115,8 @@ void registerTypes(Deserializer& ds) ds.registerType<RIGv2::N2Vessel1PressureData>(); ds.registerType<RIGv2::N2Vessel2PressureData>(); ds.registerType<RIGv2::N2FillingPressureData>(); - ds.registerType<RIGv2::OxTankTopPressureData>(); - ds.registerType<RIGv2::OxTankBottomPressureData>(); + ds.registerType<RIGv2::OxTankPressureData>(); + ds.registerType<RIGv2::N2TankPressureData>(); ds.registerType<RIGv2::ActuatorsData>(); ds.registerType<RIGv2::GroundModeManagerData>(); ds.registerType<RIGv2::TarsActionData>(); diff --git a/scripts/logdecoder/RIGv2/logdecoder.cpp b/scripts/logdecoder/RIGv2/logdecoder.cpp index 666ae2f71..66050b858 100644 --- a/scripts/logdecoder/RIGv2/logdecoder.cpp +++ b/scripts/logdecoder/RIGv2/logdecoder.cpp @@ -63,8 +63,8 @@ void registerTypes(Deserializer& ds) ds.registerType<N2Vessel1PressureData>(); ds.registerType<N2Vessel2PressureData>(); ds.registerType<N2FillingPressureData>(); - ds.registerType<OxTankTopPressureData>(); - ds.registerType<OxTankBottomPressureData>(); + ds.registerType<OxTankPressureData>(); + ds.registerType<N2TankPressureData>(); ds.registerType<ActuatorsData>(); ds.registerType<GroundModeManagerData>(); ds.registerType<TarsActionData>(); diff --git a/src/RIGv2/CanHandler/CanHandler.cpp b/src/RIGv2/CanHandler/CanHandler.cpp index 42494b83b..ddfefe9bd 100644 --- a/src/RIGv2/CanHandler/CanHandler.cpp +++ b/src/RIGv2/CanHandler/CanHandler.cpp @@ -213,7 +213,7 @@ void CanHandler::handleSensor(const Canbus::CanMessage& msg) { CanPressureData data = pressureDataFromCanMessage(msg); sdLogger.log(data); - sensors->setCanOxTankTopPressure(data); + sensors->setCanOxTankPressure(data); break; } @@ -221,7 +221,7 @@ void CanHandler::handleSensor(const Canbus::CanMessage& msg) { CanPressureData data = pressureDataFromCanMessage(msg); sdLogger.log(data); - sensors->setCanOxTankBottomPressure(data); + sensors->setCanN2TankPressure(data); break; } diff --git a/src/RIGv2/Configs/SensorsConfig.h b/src/RIGv2/Configs/SensorsConfig.h index 225da353d..6a48598b8 100644 --- a/src/RIGv2/Configs/SensorsConfig.h +++ b/src/RIGv2/Configs/SensorsConfig.h @@ -87,8 +87,8 @@ constexpr bool ENABLED = true; using Channel = Boardcore::ADS131M08Defs::Channel; -constexpr auto OX_TANK_TOP_PT_CHANNEL = Channel::CHANNEL_0; -constexpr auto OX_TANK_BOTTOM_PT_CHANNEL = Channel::CHANNEL_1; +constexpr auto OX_TANK_PT_CHANNEL = Channel::CHANNEL_0; +constexpr auto N2_TANK_PT_CHANNEL = Channel::CHANNEL_1; constexpr float CH0_SHUNT_RESISTANCE = 29.0; // TODO: measure constexpr float CH1_SHUNT_RESISTANCE = 29.0; // TODO: measure @@ -102,25 +102,25 @@ constexpr bool ENABLED = true; namespace Trafag { -constexpr float OX_VESSEL_SHUNT_RESISTANCE = ADC_1::CH0_SHUNT_RESISTANCE; -constexpr float OX_FILLING_SHUNT_RESISTANCE = ADC_1::CH1_SHUNT_RESISTANCE; -constexpr float N2_VESSEL1_SHUNT_RESISTANCE = ADC_1::CH2_SHUNT_RESISTANCE; -constexpr float N2_VESSEL2_SHUNT_RESISTANCE = ADC_1::CH3_SHUNT_RESISTANCE; -constexpr float N2_FILLING_SHUNT_RESISTANCE = ADC_1::CH7_SHUNT_RESISTANCE; -constexpr float OX_TANK_TOP_SHUNT_RESISTANCE = ADC_2::CH0_SHUNT_RESISTANCE; -constexpr float OX_TANK_BOTTOM_SHUNT_RESISTANCE = ADC_2::CH1_SHUNT_RESISTANCE; +constexpr float OX_VESSEL_SHUNT_RESISTANCE = ADC_1::CH0_SHUNT_RESISTANCE; +constexpr float OX_FILLING_SHUNT_RESISTANCE = ADC_1::CH1_SHUNT_RESISTANCE; +constexpr float N2_VESSEL1_SHUNT_RESISTANCE = ADC_1::CH2_SHUNT_RESISTANCE; +constexpr float N2_VESSEL2_SHUNT_RESISTANCE = ADC_1::CH3_SHUNT_RESISTANCE; +constexpr float N2_FILLING_SHUNT_RESISTANCE = ADC_1::CH7_SHUNT_RESISTANCE; +constexpr float OX_TANK_SHUNT_RESISTANCE = ADC_2::CH0_SHUNT_RESISTANCE; +constexpr float N2_TANK_SHUNT_RESISTANCE = ADC_2::CH1_SHUNT_RESISTANCE; constexpr float MIN_CURRENT = 4; constexpr float MAX_CURRENT = 20; // TODO: check depending on which trafags are used -constexpr float OX_VESSEL_MAX_PRESSURE = 100; // bar -constexpr float OX_FILLING_MAX_PRESSURE = 250; // bar -constexpr float N2_VESSEL1_MAX_PRESSURE = 400; // bar -constexpr float N2_VESSEL2_MAX_PRESSURE = 400; // bar -constexpr float N2_FILLING_MAX_PRESSURE = 400; // bar -constexpr float OX_TANK_TOP_MAX_PRESSURE = 250; // bar -constexpr float OX_TANK_BOTTOM_MAX_PRESSURE = 100; // bar +constexpr float OX_VESSEL_MAX_PRESSURE = 100; // bar +constexpr float OX_FILLING_MAX_PRESSURE = 250; // bar +constexpr float N2_VESSEL1_MAX_PRESSURE = 400; // bar +constexpr float N2_VESSEL2_MAX_PRESSURE = 400; // bar +constexpr float N2_FILLING_MAX_PRESSURE = 400; // bar +constexpr float OX_TANK_MAX_PRESSURE = 250; // bar +constexpr float N2_TANK_MAX_PRESSURE = 100; // bar } // namespace Trafag namespace LoadCell diff --git a/src/RIGv2/Radio/Radio.cpp b/src/RIGv2/Radio/Radio.cpp index 794a4abc2..5422349cb 100644 --- a/src/RIGv2/Radio/Radio.cpp +++ b/src/RIGv2/Radio/Radio.cpp @@ -654,9 +654,10 @@ bool Radio::enqueueSystemTm(uint8_t tmId) tm.timestamp = TimestampTimer::getTimestamp(); // Sensors (either CAN or local) - tm.ox_tank_top_pressure = sensors->getOxTankTopPressure().pressure; - tm.ox_tank_bot_pressure = - sensors->getOxTankBottomPressure().pressure; + tm.ox_tank_top_pressure = sensors->getN2TankPressure() + .pressure; // TODO: rename in mavlink + tm.ox_tank_bot_pressure = sensors->getOxTankPressure() + .pressure; // TODO: rename in mavlink tm.combustion_chamber_pressure = sensors->getCombustionChamberPressure().pressure; tm.ox_tank_temperature = @@ -796,7 +797,7 @@ bool Radio::enqueueSensorTm(uint8_t tmId) mavlink_message_t msg; mavlink_pressure_tm_t tm; - PressureData data = getModule<Sensors>()->getOxTankBottomPressure(); + PressureData data = getModule<Sensors>()->getOxTankPressure(); tm.timestamp = data.pressureTimestamp; tm.pressure = data.pressure; @@ -814,7 +815,7 @@ bool Radio::enqueueSensorTm(uint8_t tmId) mavlink_message_t msg; mavlink_pressure_tm_t tm; - PressureData data = getModule<Sensors>()->getOxTankTopPressure(); + PressureData data = getModule<Sensors>()->getN2TankPressure(); tm.timestamp = data.pressureTimestamp; tm.pressure = data.pressure; diff --git a/src/RIGv2/Sensors/Sensors.cpp b/src/RIGv2/Sensors/Sensors.cpp index 5eec560c6..969505aa9 100644 --- a/src/RIGv2/Sensors/Sensors.cpp +++ b/src/RIGv2/Sensors/Sensors.cpp @@ -55,8 +55,8 @@ bool Sensors::start() if (Config::Sensors::ADC_2::ENABLED) { adc2Init(); - oxTankTopPressureInit(); - oxTankBottomPressureInit(); + oxTankPressureInit(); + n2TankPressureInit(); } if (Config::Sensors::MAX31856::ENABLED) @@ -122,29 +122,29 @@ PressureData Sensors::getN2FillingPressure() : PressureData{}; } -PressureData Sensors::getOxTankTopPressure() +PressureData Sensors::getOxTankPressure() { if (useCanData) { - return getCanOxTankTopPressure(); + return getCanOxTankPressure(); } else { - return oxTankTopPressure ? oxTankTopPressure->getLastSample() - : PressureData{}; + return oxTankPressure ? oxTankPressure->getLastSample() + : PressureData{}; } } -PressureData Sensors::getOxTankBottomPressure() +PressureData Sensors::getN2TankPressure() { if (useCanData) { - return getCanOxTankBottomPressure(); + return getCanN2TankPressure(); } else { - return oxTankBottomPressure ? oxTankBottomPressure->getLastSample() - : PressureData{}; + return n2TankPressure ? n2TankPressure->getLastSample() + : PressureData{}; } } @@ -217,16 +217,16 @@ VoltageData Sensors::getMotorBatteryVoltage() return VoltageData{}; } -PressureData Sensors::getCanOxTankTopPressure() +PressureData Sensors::getCanN2TankPressure() { Lock<FastMutex> lock{canMutex}; - return canOxTankBottomPressure; + return canN2TankPressure; } -PressureData Sensors::getCanOxTankBottomPressure() +PressureData Sensors::getCanOxTankPressure() { Lock<FastMutex> lock{canMutex}; - return canOxTankTopPressure; + return canOxTankPressure; } PressureData Sensors::getCanCombustionChamberPressure() @@ -247,16 +247,16 @@ VoltageData Sensors::getCanMotorBatteryVoltage() return canMotorBatteryVoltage; } -void Sensors::setCanOxTankTopPressure(PressureData data) +void Sensors::setCanOxTankPressure(PressureData data) { Lock<FastMutex> lock{canMutex}; - canOxTankBottomPressure = data; + canN2TankPressure = data; } -void Sensors::setCanOxTankBottomPressure(PressureData data) +void Sensors::setCanN2TankPressure(PressureData data) { Lock<FastMutex> lock{canMutex}; - canOxTankTopPressure = data; + canOxTankPressure = data; } void Sensors::setCanCombustionChamberPressure(PressureData data) @@ -318,8 +318,8 @@ std::vector<SensorInfo> Sensors::getSensorInfos() PUSH_SENSOR_INFO(n2Vessel1Pressure, "N2Vessel1Pressure"); PUSH_SENSOR_INFO(n2Vessel2Pressure, "N2Vessel2Pressure"); PUSH_SENSOR_INFO(n2FillingPressure, "N2FillingPressure"); - PUSH_SENSOR_INFO(oxTankTopPressure, "OxTankTopPressure"); - PUSH_SENSOR_INFO(oxTankBottomPressure, "OxTankBotPressure"); + PUSH_SENSOR_INFO(oxTankPressure, "OxTankPressure"); + PUSH_SENSOR_INFO(n2TankPressure, "N2TankPressure"); PUSH_SENSOR_INFO(oxVesselWeight, "OxVesselWeight"); PUSH_SENSOR_INFO(oxTankWeight, "OxTankWeight"); @@ -437,14 +437,13 @@ void Sensors::adc2Init() channel.enabled = false; // Configure all required channels - config.channelsConfig[(int)Config::Sensors::ADC_2::OX_TANK_TOP_PT_CHANNEL] = - {.enabled = true, - .pga = ADS131M08Defs::PGA::PGA_1, - .offset = 0, - .gain = 1.0}; + config.channelsConfig[(int)Config::Sensors::ADC_2::OX_TANK_PT_CHANNEL] = { + .enabled = true, + .pga = ADS131M08Defs::PGA::PGA_1, + .offset = 0, + .gain = 1.0}; - config.channelsConfig[( - int)Config::Sensors::ADC_2::OX_TANK_BOTTOM_PT_CHANNEL] = { + config.channelsConfig[(int)Config::Sensors::ADC_2::N2_TANK_PT_CHANNEL] = { .enabled = true, .pga = ADS131M08Defs::PGA::PGA_1, .offset = 0, @@ -569,45 +568,44 @@ void Sensors::n2FillingPressureCallback() sdLogger.log(N2FillingPressureData{getN2FillingPressure()}); } -void Sensors::oxTankTopPressureInit() +void Sensors::oxTankPressureInit() { - oxTankTopPressure = std::make_unique<TrafagPressureSensor>( + oxTankPressure = std::make_unique<TrafagPressureSensor>( [this]() { auto sample = getADC2LastSample(); return sample.getVoltage( - Config::Sensors::ADC_2::OX_TANK_TOP_PT_CHANNEL); + Config::Sensors::ADC_2::OX_TANK_PT_CHANNEL); }, - Config::Sensors::Trafag::OX_TANK_TOP_SHUNT_RESISTANCE, - Config::Sensors::Trafag::OX_TANK_TOP_MAX_PRESSURE, + Config::Sensors::Trafag::OX_TANK_SHUNT_RESISTANCE, + Config::Sensors::Trafag::OX_TANK_MAX_PRESSURE, Config::Sensors::Trafag::MIN_CURRENT, Config::Sensors::Trafag::MAX_CURRENT); } -void Sensors::oxTankTopPressureCallback() +void Sensors::oxTankPressureCallback() { - sdLogger.log(OxTankTopPressureData{oxTankTopPressure->getLastSample()}); + sdLogger.log(OxTankPressureData{oxTankPressure->getLastSample()}); } -void Sensors::oxTankBottomPressureInit() +void Sensors::n2TankPressureInit() { - oxTankBottomPressure = std::make_unique<TrafagPressureSensor>( + n2TankPressure = std::make_unique<TrafagPressureSensor>( [this]() { auto sample = getADC2LastSample(); return sample.getVoltage( - Config::Sensors::ADC_2::OX_TANK_BOTTOM_PT_CHANNEL); + Config::Sensors::ADC_2::N2_TANK_PT_CHANNEL); }, - Config::Sensors::Trafag::OX_TANK_BOTTOM_SHUNT_RESISTANCE, - Config::Sensors::Trafag::OX_TANK_BOTTOM_MAX_PRESSURE, + Config::Sensors::Trafag::N2_TANK_SHUNT_RESISTANCE, + Config::Sensors::Trafag::N2_TANK_MAX_PRESSURE, Config::Sensors::Trafag::MIN_CURRENT, Config::Sensors::Trafag::MAX_CURRENT); } -void Sensors::oxTankBottomPressureCallback() +void Sensors::n2TankPressureCallback() { - sdLogger.log( - OxTankBottomPressureData{oxTankBottomPressure->getLastSample()}); + sdLogger.log(N2TankPressureData{n2TankPressure->getLastSample()}); } void Sensors::oxVesselWeightInit() @@ -720,18 +718,18 @@ bool Sensors::sensorManagerInit() map.emplace(std::make_pair(n2FillingPressure.get(), info)); } - if (oxTankTopPressure) + if (oxTankPressure) { - SensorInfo info("OxTankTopPressure", Config::Sensors::ADS131M08::PERIOD, - [this]() { oxTankTopPressureCallback(); }); - map.emplace(std::make_pair(oxTankTopPressure.get(), info)); + SensorInfo info("OxTankPressure", Config::Sensors::ADS131M08::PERIOD, + [this]() { oxTankPressureCallback(); }); + map.emplace(std::make_pair(oxTankPressure.get(), info)); } - if (oxTankBottomPressure) + if (n2TankPressure) { - SensorInfo info("OxTankBotPressure", Config::Sensors::ADS131M08::PERIOD, - [this]() { oxTankBottomPressureCallback(); }); - map.emplace(std::make_pair(oxTankBottomPressure.get(), info)); + SensorInfo info("N2TankPressure", Config::Sensors::ADS131M08::PERIOD, + [this]() { n2TankPressureCallback(); }); + map.emplace(std::make_pair(n2TankPressure.get(), info)); } if (oxVesselWeight) diff --git a/src/RIGv2/Sensors/Sensors.h b/src/RIGv2/Sensors/Sensors.h index 06a5ceb1f..e38a2de50 100644 --- a/src/RIGv2/Sensors/Sensors.h +++ b/src/RIGv2/Sensors/Sensors.h @@ -64,8 +64,8 @@ public: Boardcore::PressureData getN2Vessel1Pressure(); Boardcore::PressureData getN2Vessel2Pressure(); Boardcore::PressureData getN2FillingPressure(); - Boardcore::PressureData getOxTankTopPressure(); - Boardcore::PressureData getOxTankBottomPressure(); + Boardcore::PressureData getOxTankPressure(); + Boardcore::PressureData getN2TankPressure(); Boardcore::PressureData getCombustionChamberPressure(); Boardcore::TemperatureData getOxTankTemperature(); @@ -77,16 +77,16 @@ public: Boardcore::VoltageData getBatteryVoltage(); Boardcore::VoltageData getMotorBatteryVoltage(); - Boardcore::PressureData getCanOxTankTopPressure(); - Boardcore::PressureData getCanOxTankBottomPressure(); + Boardcore::PressureData getCanOxTankPressure(); + Boardcore::PressureData getCanN2TankPressure(); Boardcore::PressureData getCanCombustionChamberPressure(); Boardcore::TemperatureData getCanTankTemperature(); Boardcore::VoltageData getCanMotorBatteryVoltage(); std::vector<Boardcore::SensorInfo> getSensorInfos(); - void setCanOxTankTopPressure(Boardcore::PressureData data); - void setCanOxTankBottomPressure(Boardcore::PressureData data); + void setCanOxTankPressure(Boardcore::PressureData data); + void setCanN2TankPressure(Boardcore::PressureData data); void setCanCombustionChamberPressure(Boardcore::PressureData data); void setCanOxTankTemperature(Boardcore::TemperatureData data); void setCanMotorBatteryVoltage(Boardcore::VoltageData data); @@ -108,11 +108,11 @@ private: void n2FillingPressureInit(); void n2FillingPressureCallback(); - void oxTankTopPressureInit(); - void oxTankTopPressureCallback(); + void oxTankPressureInit(); + void oxTankPressureCallback(); - void oxTankBottomPressureInit(); - void oxTankBottomPressureCallback(); + void n2TankPressureInit(); + void n2TankPressureCallback(); void oxVesselWeightInit(); void oxVesselWeightCallback(); @@ -142,8 +142,8 @@ private: std::atomic<bool> useCanData{false}; miosix::FastMutex canMutex; - Boardcore::PressureData canOxTankTopPressure; - Boardcore::PressureData canOxTankBottomPressure; + Boardcore::PressureData canOxTankPressure; + Boardcore::PressureData canN2TankPressure; Boardcore::PressureData canCombustionChamberPressure; // TODO: N2 tank pressure from CAN Boardcore::TemperatureData canOxTankTemperature; @@ -155,8 +155,8 @@ private: std::unique_ptr<Boardcore::TrafagPressureSensor> n2Vessel1Pressure; std::unique_ptr<Boardcore::TrafagPressureSensor> n2Vessel2Pressure; std::unique_ptr<Boardcore::TrafagPressureSensor> n2FillingPressure; - std::unique_ptr<Boardcore::TrafagPressureSensor> oxTankTopPressure; - std::unique_ptr<Boardcore::TrafagPressureSensor> oxTankBottomPressure; + std::unique_ptr<Boardcore::TrafagPressureSensor> oxTankPressure; + std::unique_ptr<Boardcore::TrafagPressureSensor> n2TankPressure; std::unique_ptr<Boardcore::TwoPointAnalogLoadCell> oxVesselWeight; std::unique_ptr<Boardcore::TwoPointAnalogLoadCell> oxTankWeight; diff --git a/src/RIGv2/Sensors/SensorsData.h b/src/RIGv2/Sensors/SensorsData.h index c598c0a2a..71ae7b241 100644 --- a/src/RIGv2/Sensors/SensorsData.h +++ b/src/RIGv2/Sensors/SensorsData.h @@ -129,24 +129,24 @@ struct N2FillingPressureData : Boardcore::PressureData N2FillingPressureData() {} }; -struct OxTankTopPressureData : Boardcore::PressureData +struct OxTankPressureData : Boardcore::PressureData { - explicit OxTankTopPressureData(const Boardcore::PressureData& data) + explicit OxTankPressureData(const Boardcore::PressureData& data) : Boardcore::PressureData(data) { } - OxTankTopPressureData() {} + OxTankPressureData() {} }; -struct OxTankBottomPressureData : Boardcore::PressureData +struct N2TankPressureData : Boardcore::PressureData { - explicit OxTankBottomPressureData(const Boardcore::PressureData& data) + explicit N2TankPressureData(const Boardcore::PressureData& data) : Boardcore::PressureData(data) { } - OxTankBottomPressureData() {} + N2TankPressureData() {} }; } // namespace RIGv2 diff --git a/src/RIGv2/StateMachines/TARS1/TARS1.cpp b/src/RIGv2/StateMachines/TARS1/TARS1.cpp index 2d1e27c00..bc092337b 100644 --- a/src/RIGv2/StateMachines/TARS1/TARS1.cpp +++ b/src/RIGv2/StateMachines/TARS1/TARS1.cpp @@ -257,7 +257,7 @@ void TARS1::sample() { Sensors* sensors = getModule<Sensors>(); - pressureFilter.add(sensors->getOxTankBottomPressure().pressure); + pressureFilter.add(sensors->getOxTankPressure().pressure); massFilter.add(sensors->getOxTankWeight().load); medianSamples++; -- GitLab