From 2c754cc2f4b2df6055a9eb0621cf0ba38337f13a Mon Sep 17 00:00:00 2001 From: Davide <davide.mor@skywarder.eu> Date: Mon, 26 Feb 2024 01:52:43 +0100 Subject: [PATCH] [RIGv2] Added thermocouple to sample and radio --- src/boards/RIGv2/Configs/SensorsConfig.h | 1 + src/boards/RIGv2/Radio/Radio.cpp | 3 ++ src/boards/RIGv2/Sensors/Sensors.cpp | 35 +++++++++++++++++++-- src/boards/RIGv2/Sensors/Sensors.h | 6 ++++ src/boards/RIGv2/Sensors/SensorsData.h | 31 ++++++++++++++++-- src/scripts/logdecoder/RIGv2/logdecoder.cpp | 1 + 6 files changed, 73 insertions(+), 4 deletions(-) diff --git a/src/boards/RIGv2/Configs/SensorsConfig.h b/src/boards/RIGv2/Configs/SensorsConfig.h index 7f12a6710..28712cd8f 100644 --- a/src/boards/RIGv2/Configs/SensorsConfig.h +++ b/src/boards/RIGv2/Configs/SensorsConfig.h @@ -34,6 +34,7 @@ namespace Sensors { static constexpr uint32_t ADC_SAMPLE_PERIOD = 10; +static constexpr uint32_t TC_SAMPLE_PERIOD = 100; } diff --git a/src/boards/RIGv2/Radio/Radio.cpp b/src/boards/RIGv2/Radio/Radio.cpp index b4d51c193..8e5f5d3f1 100644 --- a/src/boards/RIGv2/Radio/Radio.cpp +++ b/src/boards/RIGv2/Radio/Radio.cpp @@ -402,7 +402,10 @@ bool Radio::packSystemTm(uint8_t tmId, mavlink_message_t& msg) { mavlink_motor_tm_t tm; + auto tc1 = modules.get<Sensors>()->getTc1LastSample(); + tm.timestamp = TimestampTimer::getTimestamp(); + tm.tank_temperature = tc1.temperature; tm.top_tank_pressure = 69; tm.bottom_tank_pressure = 420; diff --git a/src/boards/RIGv2/Sensors/Sensors.cpp b/src/boards/RIGv2/Sensors/Sensors.cpp index 4318603df..fabc78951 100644 --- a/src/boards/RIGv2/Sensors/Sensors.cpp +++ b/src/boards/RIGv2/Sensors/Sensors.cpp @@ -37,6 +37,7 @@ bool Sensors::start() { SensorManager::SensorMap_t map; adc1Init(map); + tc1Init(map); manager = std::make_unique<SensorManager>(map, &scheduler); if (!manager->start()) @@ -61,6 +62,12 @@ ADS131M08Data Sensors::getADC1LastSample() return adc1->getLastSample(); } +Boardcore::MAX31856Data Sensors::getTc1LastSample() +{ + PauseKernelLock l; + return tc1->getLastSample(); +} + void Sensors::adc1Init(SensorManager::SensorMap_t &map) { ModuleManager &modules = ModuleManager::getInstance(); @@ -92,8 +99,32 @@ void Sensors::adc1Callback() sample.voltage[4], sample.voltage[5], sample.voltage[6], sample.voltage[7]}; - // For Flavio, fuck Flavio - LOG_INFO(logger, "{}\t{}", sample.voltage[6], sample.voltage[7]); + sdLogger.log(data); +} + +void Sensors::tc1Init(SensorManager::SensorMap_t &map) +{ + ModuleManager &modules = ModuleManager::getInstance(); + + SPIBusConfig spiConfig = MAX31856::getDefaultSPIConfig(); + spiConfig.clockDivider = SPI::ClockDivider::DIV_32; + + tc1 = + std::make_unique<MAX31856>(modules.get<Buses>()->getMAX31856_1(), + sensors::MAX31856_1::cs::getPin(), spiConfig, + MAX31856::ThermocoupleType::K_TYPE); + + SensorInfo info("MAX31856_1", Config::Sensors::TC_SAMPLE_PERIOD, + [this]() { tc1Callback(); }); + map.emplace(std::make_pair(tc1.get(), info)); +} + +void Sensors::tc1Callback() +{ + MAX31856Data sample = tc1->getLastSample(); + + TCsData data{sample.temperatureTimestamp, 1, sample.temperature, + sample.coldJunctionTemperature}; sdLogger.log(data); } \ No newline at end of file diff --git a/src/boards/RIGv2/Sensors/Sensors.h b/src/boards/RIGv2/Sensors/Sensors.h index 14eeef191..43d614ee7 100644 --- a/src/boards/RIGv2/Sensors/Sensors.h +++ b/src/boards/RIGv2/Sensors/Sensors.h @@ -23,6 +23,7 @@ #pragma once #include <sensors/ADS131M08/ADS131M08.h> +#include <sensors/MAX31856/MAX31856.h> #include <sensors/SensorManager.h> #include <memory> @@ -44,10 +45,14 @@ public: bool isStarted(); Boardcore::ADS131M08Data getADC1LastSample(); + Boardcore::MAX31856Data getTc1LastSample(); private: void adc1Init(Boardcore::SensorManager::SensorMap_t &map); void adc1Callback(); + + void tc1Init(Boardcore::SensorManager::SensorMap_t &map); + void tc1Callback(); Boardcore::Logger &sdLogger = Boardcore::Logger::getInstance(); Boardcore::PrintLogger logger = Boardcore::Logging::getLogger("sensors"); @@ -55,6 +60,7 @@ private: std::atomic<bool> started{false}; std::unique_ptr<Boardcore::ADS131M08> adc1; + std::unique_ptr<Boardcore::MAX31856> tc1; std::unique_ptr<Boardcore::SensorManager> manager; }; diff --git a/src/boards/RIGv2/Sensors/SensorsData.h b/src/boards/RIGv2/Sensors/SensorsData.h index db59f9eef..ac2a64432 100644 --- a/src/boards/RIGv2/Sensors/SensorsData.h +++ b/src/boards/RIGv2/Sensors/SensorsData.h @@ -23,6 +23,7 @@ #pragma once #include <sensors/ADS131M08/ADS131M08Data.h> +#include <sensors/MAX31856/MAX31856Data.h> namespace RIGv2 { @@ -41,7 +42,7 @@ struct ADCsData : Boardcore::ADS131M08Data static std::string header() { - return "timestamp,adc_number,voltage_channel_1,voltage_channel_2," + return "timestamp,adcNumber,voltage_channel_1,voltage_channel_2," "voltage_channel_3,voltage_channel_4,voltage_channel_5,voltage_" "channel_6,voltage_channel_7,voltage_channel_8\n"; } @@ -54,4 +55,30 @@ struct ADCsData : Boardcore::ADS131M08Data << voltage[7] << "\n"; } }; -} // namespace RIG \ No newline at end of file + +struct TCsData : Boardcore::MAX31856Data +{ + uint8_t tcNumber; + + TCsData() : MAX31856Data{0, 0}, tcNumber{0} {} + + TCsData(uint64_t time, uint8_t num, float temperature, + float coldJunctionTemperature) + : MAX31856Data{time, temperature, coldJunctionTemperature}, + tcNumber{num} + { + } + + static std::string header() + { + return "temperatureTimestamp,tcNumber,temperature," + "coldJunctionTemperature\n"; + } + + void print(std::ostream& os) const + { + os << temperatureTimestamp << "," << (int)tcNumber << "," << temperature + << "," << coldJunctionTemperature << "\n"; + } +}; +} // namespace RIGv2 \ No newline at end of file diff --git a/src/scripts/logdecoder/RIGv2/logdecoder.cpp b/src/scripts/logdecoder/RIGv2/logdecoder.cpp index fddfb7c20..eab10f51c 100644 --- a/src/scripts/logdecoder/RIGv2/logdecoder.cpp +++ b/src/scripts/logdecoder/RIGv2/logdecoder.cpp @@ -52,6 +52,7 @@ void registerTypes(Deserializer& ds) // Custom types ds.registerType<ADCsData>(); + ds.registerType<TCsData>(); ds.registerType<ActuatorsData>(); } -- GitLab