From 13dcb08f94a311235abe1e7a7fa0f888c2d8bd6d Mon Sep 17 00:00:00 2001 From: Erki Date: Fri, 5 Mar 2021 15:21:30 +0200 Subject: [PATCH] Add SetCompare method to PWM channel --- Inc/peripherals_io.hpp | 2 +- Inc/peripherals_pwm_channel.hpp | 4 +++- Src/peripherals_motors.cpp | 24 ++++++++++++------------ Src/peripherals_pwm_channel.cpp | 5 +++++ 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/Inc/peripherals_io.hpp b/Inc/peripherals_io.hpp index c6df7ad..de285f3 100644 --- a/Inc/peripherals_io.hpp +++ b/Inc/peripherals_io.hpp @@ -21,7 +21,7 @@ struct IO GPIO_TypeDef* port; std::uint16_t pin; - IO() = default; + IO() = delete; IO(GPIO_TypeDef* port, const unsigned short pin); void Set(const bool state); diff --git a/Inc/peripherals_pwm_channel.hpp b/Inc/peripherals_pwm_channel.hpp index d2baf8e..48da844 100644 --- a/Inc/peripherals_pwm_channel.hpp +++ b/Inc/peripherals_pwm_channel.hpp @@ -24,7 +24,7 @@ struct PwmChannel std::uint32_t timer_code; IO pin; - PwmChannel() = default; + PwmChannel() = delete; PwmChannel(TIM_HandleTypeDef* timer, const std::uint32_t channel, @@ -36,6 +36,8 @@ struct PwmChannel void Enable(); void Disable(); + + void SetCompare(const std::uint32_t compare); }; } diff --git a/Src/peripherals_motors.cpp b/Src/peripherals_motors.cpp index f4475e6..e0b751c 100644 --- a/Src/peripherals_motors.cpp +++ b/Src/peripherals_motors.cpp @@ -28,34 +28,34 @@ void DualDrvMotors::Set(const std::int16_t left, const std::int16_t right) { if (left > 0) { - __HAL_TIM_SET_COMPARE(_left.forward.timer, _left.forward.channel, left); - __HAL_TIM_SET_COMPARE(_left.backward.timer, _left.backward.channel, 0); + _left.forward.SetCompare(left); + _left.backward.SetCompare(0); } else { - __HAL_TIM_SET_COMPARE(_left.forward.timer, _left.forward.channel, 0); - __HAL_TIM_SET_COMPARE(_left.backward.timer, _left.backward.channel, (-1 * left)); + _left.forward.SetCompare(0); + _left.backward.SetCompare(-1 * left); } if (right > 0) { - __HAL_TIM_SET_COMPARE(_right.forward.timer, _right.forward.channel, right); - __HAL_TIM_SET_COMPARE(_right.backward.timer, _right.backward.channel, 0); + _right.forward.SetCompare(right); + _right.backward.SetCompare(0); } else { - __HAL_TIM_SET_COMPARE(_right.forward.timer, _right.forward.channel, 0); - __HAL_TIM_SET_COMPARE(_right.backward.timer, _right.backward.channel, (-1 * right)); + _right.forward.SetCompare(0); + _right.backward.SetCompare(-1 * right); } } void DualDrvMotors::Coast() { - __HAL_TIM_SET_COMPARE(_left.forward.timer, _left.forward.channel, 0); - __HAL_TIM_SET_COMPARE(_left.backward.timer, _left.backward.channel, 0); + _left.forward.SetCompare(0); + _left.backward.SetCompare(0); - __HAL_TIM_SET_COMPARE(_right.forward.timer, _right.forward.channel, 0); - __HAL_TIM_SET_COMPARE(_right.backward.timer, _right.backward.channel, 0); + _right.forward.SetCompare(0); + _right.backward.SetCompare(0); } void DualDrvMotors::Break() diff --git a/Src/peripherals_pwm_channel.cpp b/Src/peripherals_pwm_channel.cpp index 988f653..ddd4f41 100644 --- a/Src/peripherals_pwm_channel.cpp +++ b/Src/peripherals_pwm_channel.cpp @@ -55,4 +55,9 @@ void PwmChannel::Disable() HAL_TIM_PWM_Stop(timer, channel); } +void PwmChannel::SetCompare(const std::uint32_t compare) +{ + __HAL_TIM_SET_COMPARE(timer, channel, compare); +} + }