From 7a649c37e1229fcb9283ff15eb0024776b7ec87e Mon Sep 17 00:00:00 2001 From: Emilio Corigliano <emilio.corigliano@skywarder.eu> Date: Wed, 2 Oct 2024 15:17:04 +0200 Subject: [PATCH] [AutomatedAntennas] Fixed sensors, buses and actuators to use new target for automated gs --- CMakeLists.txt | 3 +- cmake/dependencies.cmake | 1 + src/boards/AutomatedAntennas/Actuators.cpp | 64 ++++++------------- .../AutomatedAntennas/ActuatorsConfig.h | 26 ++++---- src/boards/AutomatedAntennas/Buses.h | 18 +----- src/boards/AutomatedAntennas/Sensors.cpp | 16 +---- src/boards/AutomatedAntennas/Sensors.h | 4 +- .../AutomatedAntennas/test-steps.cpp | 56 ++++++++-------- 8 files changed, 73 insertions(+), 115 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b447dd861..d1f5796f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -111,4 +111,5 @@ sbs_target(automated-antennas-entry stm32f407vg_stm32f4discovery) add_executable(test-steps src/entrypoints/Groundstation/AutomatedAntennas/test-steps.cpp ${ANTENNAS}) target_include_directories(test-steps PRIVATE ${OBSW_INCLUDE_DIRS}) -sbs_target(test-steps stm32f767zi_nucleo) +# target_compile_definitions(test-steps PRIVATE NO_SD_LOGGING) +sbs_target(test-steps stm32f767zi_automated_antennas) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index bd8e4077e..cab11e955 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -141,4 +141,5 @@ set(GROUNDSTATION_BASE set(ANTENNAS src/boards/AutomatedAntennas/Actuators.cpp + src/boards/AutomatedAntennas/Sensors.cpp ) \ No newline at end of file diff --git a/src/boards/AutomatedAntennas/Actuators.cpp b/src/boards/AutomatedAntennas/Actuators.cpp index b80ea34ad..46572347d 100644 --- a/src/boards/AutomatedAntennas/Actuators.cpp +++ b/src/boards/AutomatedAntennas/Actuators.cpp @@ -22,6 +22,8 @@ #include "Actuators.h" +#include <interfaces-impl/hwmapping.h> + #include <utils/ModuleManager/ModuleManager.hpp> #include "ActuatorsConfig.h" @@ -40,58 +42,32 @@ namespace Antennas // | // TIM8_CH4 PC9 AF3 -GpioPin stepPinX = GpioPin(GPIOD_BASE, 12); // tim4_ch1 -GpioPin countPinX = GpioPin(GPIOC_BASE, 9); // tim8_ch4 -GpioPin directionPinX = GpioPin(GPIOD_BASE, 13); -GpioPin enablePinX = GpioPin(GPIOD_BASE, 3); - -GpioPin stepPinY = GpioPin(GPIOA_BASE, 11); // tim1_ch4 -GpioPin countPinY = GpioPin(GPIOC_BASE, 7); // tim3_ch2 -GpioPin directionPinY = GpioPin(GPIOA_BASE, 12); -GpioPin enablePinY = GpioPin(GPIOA_BASE, 8); - GpioPin ledRGB = GpioPin(GPIOG_BASE, 14); -CountedPWM countedPwmX(Config::StepperConfig::SERVO2_PULSE_TIM, - Config::StepperConfig::SERVO2_PULSE_CH, - Config::StepperConfig::SERVO2_PULSE_ITR, - Config::StepperConfig::SERVO2_COUNT_TIM, - Config::StepperConfig::SERVO2_COUNT_CH, - Config::StepperConfig::SERVO2_COUNT_ITR); - -CountedPWM countedPwmY(Config::StepperConfig::SERVO1_PULSE_TIM, +CountedPWM countedPwmX(Config::StepperConfig::SERVO1_PULSE_TIM, Config::StepperConfig::SERVO1_PULSE_CH, Config::StepperConfig::SERVO1_PULSE_ITR, Config::StepperConfig::SERVO1_COUNT_TIM, Config::StepperConfig::SERVO1_COUNT_CH, Config::StepperConfig::SERVO1_COUNT_ITR); +CountedPWM countedPwmY(Config::StepperConfig::SERVO2_PULSE_TIM, + Config::StepperConfig::SERVO2_PULSE_CH, + Config::StepperConfig::SERVO2_PULSE_ITR, + Config::StepperConfig::SERVO2_COUNT_TIM, + Config::StepperConfig::SERVO2_COUNT_CH, + Config::StepperConfig::SERVO2_COUNT_ITR); + Actuators::Actuators() - : stepperX(countedPwmX, stepPinX, directionPinX, 1, 1.8, false, 4, - Stepper::PinConfiguration::COMMON_CATHODE, enablePinX), - stepperY(countedPwmY, stepPinY, directionPinY, 1, 1.8, false, 4, - Stepper::PinConfiguration::COMMON_CATHODE, enablePinY) + : stepperX(countedPwmX, stepper1::pulseTimer::getPin(), + stepper1::direction::getPin(), 1, 1.8, false, 4, + Stepper::PinConfiguration::COMMON_CATHODE, + stepper1::enable::getPin()), + stepperY(countedPwmY, stepper2::pulseTimer::getPin(), + stepper2::direction::getPin(), 1, 1.8, false, 4, + Stepper::PinConfiguration::COMMON_CATHODE, + stepper2::enable::getPin()) { - // set LED to Yellow - - stepPinX.mode(Mode::ALTERNATE); - stepPinX.alternateFunction(2); - stepPinY.mode(Mode::ALTERNATE); - stepPinY.alternateFunction(1); - - directionPinX.mode(Mode::OUTPUT); - enablePinX.mode(Mode::OUTPUT); - directionPinY.mode(Mode::OUTPUT); - enablePinY.mode(Mode::OUTPUT); - -#ifdef NO_SD_LOGGING - countPinX.mode(Mode::ALTERNATE); - countPinX.alternateFunction(3); - countPinY.mode(Mode::ALTERNATE); - countPinY.alternateFunction(2); -#endif - - // Set LED to GREEN } /** @@ -187,7 +163,7 @@ void Actuators::moveDeg(StepperList axis, float degrees) stepperX.getCurrentDegPosition(); } - stepperX.moveDeg(degrees); + stepperX.moveDeg(degrees / Config::HORIZONTAL_MULTIPLIER); Logger::getInstance().log(stepperX.getState(degrees)); break; case StepperList::VERTICAL: @@ -204,7 +180,7 @@ void Actuators::moveDeg(StepperList axis, float degrees) stepperY.getCurrentDegPosition(); } - stepperY.moveDeg(degrees); + stepperY.moveDeg(degrees / Config::VERTICAL_MULTIPLIER); Logger::getInstance().log(stepperY.getState(degrees)); break; default: diff --git a/src/boards/AutomatedAntennas/ActuatorsConfig.h b/src/boards/AutomatedAntennas/ActuatorsConfig.h index 81b38d68c..44a844843 100644 --- a/src/boards/AutomatedAntennas/ActuatorsConfig.h +++ b/src/boards/AutomatedAntennas/ActuatorsConfig.h @@ -28,13 +28,15 @@ namespace Antennas { namespace Config { -constexpr float MIN_ANGLE_HORIZONTAL = -45.0; -constexpr float MAX_ANGLE_HORIZONTAL = 1000000.0; -constexpr float MAX_SPEED_HORIZONTAL = 1.3; +constexpr float HORIZONTAL_MULTIPLIER = 2; +constexpr float MIN_ANGLE_HORIZONTAL = -90.0; +constexpr float MAX_ANGLE_HORIZONTAL = 90.0; +constexpr float MAX_SPEED_HORIZONTAL = 1.3; -constexpr float MIN_ANGLE_VERTICAL = 0; -constexpr float MAX_ANGLE_VERTICAL = 45.0; -constexpr float MAX_SPEED_VERTICAL = 1.3; +constexpr float VERTICAL_MULTIPLIER = 2; +constexpr float MIN_ANGLE_VERTICAL = 0; +constexpr float MAX_ANGLE_VERTICAL = 90.0; +constexpr float MAX_SPEED_VERTICAL = 1.3; namespace StepperConfig { @@ -45,24 +47,24 @@ namespace StepperConfig // TIM4_CH1 PD12 AF2 // | // TIM8_CH4 PC9 AF3 -static TIM_TypeDef* const SERVO1_PULSE_TIM = TIM1; -static TIM_TypeDef* const SERVO1_COUNT_TIM = TIM3; +static TIM_TypeDef* const SERVO1_PULSE_TIM = TIM3; +static TIM_TypeDef* const SERVO1_COUNT_TIM = TIM1; static TIM_TypeDef* const SERVO2_PULSE_TIM = TIM4; static TIM_TypeDef* const SERVO2_COUNT_TIM = TIM8; constexpr Boardcore::TimerUtils::Channel SERVO1_PULSE_CH = - Boardcore::TimerUtils::Channel::CHANNEL_4; -constexpr Boardcore::TimerUtils::Channel SERVO1_COUNT_CH = Boardcore::TimerUtils::Channel::CHANNEL_2; +constexpr Boardcore::TimerUtils::Channel SERVO1_COUNT_CH = + Boardcore::TimerUtils::Channel::CHANNEL_4; constexpr Boardcore::TimerUtils::Channel SERVO2_PULSE_CH = Boardcore::TimerUtils::Channel::CHANNEL_1; constexpr Boardcore::TimerUtils::Channel SERVO2_COUNT_CH = Boardcore::TimerUtils::Channel::CHANNEL_4; constexpr Boardcore::TimerUtils::TriggerSource SERVO1_PULSE_ITR = - Boardcore::TimerUtils::TriggerSource::ITR2; -constexpr Boardcore::TimerUtils::TriggerSource SERVO1_COUNT_ITR = Boardcore::TimerUtils::TriggerSource::ITR0; +constexpr Boardcore::TimerUtils::TriggerSource SERVO1_COUNT_ITR = + Boardcore::TimerUtils::TriggerSource::ITR2; constexpr Boardcore::TimerUtils::TriggerSource SERVO2_PULSE_ITR = Boardcore::TimerUtils::TriggerSource::ITR3; constexpr Boardcore::TimerUtils::TriggerSource SERVO2_COUNT_ITR = diff --git a/src/boards/AutomatedAntennas/Buses.h b/src/boards/AutomatedAntennas/Buses.h index 8f6d7ff2b..ea59ac3f9 100644 --- a/src/boards/AutomatedAntennas/Buses.h +++ b/src/boards/AutomatedAntennas/Buses.h @@ -28,28 +28,12 @@ namespace Antennas { -miosix::GpioPin usart2_tx = miosix::GpioPin(GPIOA_BASE, 2); -miosix::GpioPin usart2_rx = miosix::GpioPin(GPIOA_BASE, 3); -miosix::GpioPin uart4_tx = miosix::GpioPin(GPIOA_BASE, 0); -miosix::GpioPin uart4_rx = miosix::GpioPin(GPIOA_BASE, 1); - class Buses : public Boardcore::Module { public: Boardcore::USART usart2; Boardcore::USART uart4; - Buses() : usart2(USART2, 115200), uart4(UART4, 115200) - { - usart2_tx.mode(miosix::Mode::ALTERNATE); - usart2_tx.alternateFunction(7); - usart2_rx.mode(miosix::Mode::ALTERNATE_PULL_UP); - usart2_rx.alternateFunction(7); - - uart4_tx.mode(miosix::Mode::ALTERNATE); - uart4_tx.alternateFunction(8); - uart4_rx.mode(miosix::Mode::ALTERNATE_PULL_UP); - uart4_rx.alternateFunction(8); - } + Buses() : usart2(USART2, 115200), uart4(UART4, 115200) {} }; } // namespace Antennas \ No newline at end of file diff --git a/src/boards/AutomatedAntennas/Sensors.cpp b/src/boards/AutomatedAntennas/Sensors.cpp index f17f52883..776b8a021 100644 --- a/src/boards/AutomatedAntennas/Sensors.cpp +++ b/src/boards/AutomatedAntennas/Sensors.cpp @@ -47,24 +47,14 @@ bool Sensors::start() LOG_ERR(logger, "Sensor Manager failed to start"); return false; } + + return true; } bool Sensors::vn300Init() { vn300 = new Boardcore::VN300( - ModuleManager::getInstance().get<Buses>()->uart4, 115200); - - if (!vn300->init()) - { - LOG_ERR(logger, "VN300 not initialized"); - return false; - } - - if (!vn300->selfTest()) - { - LOG_ERR(logger, "VN300 self-test failed"); - return false; - } + ModuleManager::getInstance().get<Buses>()->usart2, 115200); SensorInfo info("VN300", SAMPLE_PERIOD_VN300, bind(&Sensors::vn300Callback, this)); diff --git a/src/boards/AutomatedAntennas/Sensors.h b/src/boards/AutomatedAntennas/Sensors.h index 852607ec8..281eb763a 100644 --- a/src/boards/AutomatedAntennas/Sensors.h +++ b/src/boards/AutomatedAntennas/Sensors.h @@ -42,7 +42,7 @@ public: /** * @brief Returns the last sample of the VN300. */ - VN300Data getVN300LastSample(); + Boardcore::VN300Data getVN300LastSample(); private: bool vn300Init(); @@ -50,7 +50,7 @@ private: Boardcore::VN300 *vn300 = nullptr; - SensorManager *sm = nullptr; + Boardcore::SensorManager *sm = nullptr; Boardcore::SensorManager::SensorMap_t sensorsMap; Boardcore::PrintLogger logger = Boardcore::Logging::getLogger("sensors"); }; diff --git a/src/entrypoints/Groundstation/AutomatedAntennas/test-steps.cpp b/src/entrypoints/Groundstation/AutomatedAntennas/test-steps.cpp index a8c810946..3e1e9a7b7 100644 --- a/src/entrypoints/Groundstation/AutomatedAntennas/test-steps.cpp +++ b/src/entrypoints/Groundstation/AutomatedAntennas/test-steps.cpp @@ -33,6 +33,7 @@ #include <scheduler/TaskScheduler.h> #include <utils/ButtonHandler/ButtonHandler.h> +#include <iostream> #include <utils/ModuleManager/ModuleManager.hpp> #include "actuators/stepper/StepperPWM.h" @@ -140,7 +141,7 @@ int main() // Starting the Actuators modules.get<Actuators>()->start(); - // Starting the Actuators + // Starting the Sensors if (!modules.get<Sensors>()->start()) { initResult = false; @@ -167,6 +168,8 @@ int main() modules.get<Actuators>()->setSpeed(Actuators::StepperList::HORIZONTAL, speed); + + modules.get<Actuators>()->setSpeed(Actuators::StepperList::VERTICAL, speed); // scheduler->addTask( // [&]() // { @@ -198,37 +201,38 @@ int main() // } // }, // 100); - - for (;;) + VN300Data data; + while (!ModuleManager::getInstance().get<Actuators>()->isEmergencyStopped()) { - // speed = speed0; - // for (int i = 0; i < 10; i++) - // { - modules.get<Actuators>()->moveDeg(Actuators::StepperList::HORIZONTAL, - 360); - Thread::sleep(500); - - speed += stepSpeed; - modules.get<Actuators>()->setSpeed(Actuators::StepperList::HORIZONTAL, - speed); - // } - - // speed = speed0; - // for (int i = 0; i < 10; i++) - // { - // modules.get<Actuators>()->moveDeg( - // Actuators::StepperList::HORIZONTAL, -360); - // Thread::sleep(400); - - // speed += stepSpeed; - // modules.get<Actuators>()->setSpeed( - // Actuators::StepperList::HORIZONTAL, speed); - // } + { + data = modules.get<Sensors>()->getVN300LastSample(); + printf("acc[%.3f,%.3f,%.3f] ypr[%.3f,%.3f,%.3f]\n", + data.accelerationX, data.accelerationY, data.accelerationZ, + data.yaw, data.pitch, data.roll); + modules.get<Actuators>()->moveDeg( + Actuators::StepperList::HORIZONTAL, 10); + modules.get<Actuators>()->moveDeg(Actuators::StepperList::VERTICAL, + 10); + Thread::sleep(1000); + } + + { + data = modules.get<Sensors>()->getVN300LastSample(); + printf("acc[%.3f,%.3f,%.3f] ypr[%.3f,%.3f,%.3f]\n", + data.accelerationX, data.accelerationY, data.accelerationZ, + data.yaw, data.pitch, data.roll); + modules.get<Actuators>()->moveDeg( + Actuators::StepperList::HORIZONTAL, -10); + modules.get<Actuators>()->moveDeg(Actuators::StepperList::VERTICAL, + -10); + Thread::sleep(1000); + } } // Stopping threads { Logger::getInstance().stop(); + printf("Logger stopped! Board can be reset/shutdown9\n"); } while (1) -- GitLab