Add SetCompare method to PWM channel

This commit is contained in:
Erki 2021-03-05 15:21:30 +02:00
parent fe499d69f0
commit 13dcb08f94
4 changed files with 21 additions and 14 deletions

View File

@ -21,7 +21,7 @@ struct IO
GPIO_TypeDef* port; GPIO_TypeDef* port;
std::uint16_t pin; std::uint16_t pin;
IO() = default; IO() = delete;
IO(GPIO_TypeDef* port, const unsigned short pin); IO(GPIO_TypeDef* port, const unsigned short pin);
void Set(const bool state); void Set(const bool state);

View File

@ -24,7 +24,7 @@ struct PwmChannel
std::uint32_t timer_code; std::uint32_t timer_code;
IO pin; IO pin;
PwmChannel() = default; PwmChannel() = delete;
PwmChannel(TIM_HandleTypeDef* timer, PwmChannel(TIM_HandleTypeDef* timer,
const std::uint32_t channel, const std::uint32_t channel,
@ -36,6 +36,8 @@ struct PwmChannel
void Enable(); void Enable();
void Disable(); void Disable();
void SetCompare(const std::uint32_t compare);
}; };
} }

View File

@ -28,34 +28,34 @@ void DualDrvMotors::Set(const std::int16_t left, const std::int16_t right)
{ {
if (left > 0) if (left > 0)
{ {
__HAL_TIM_SET_COMPARE(_left.forward.timer, _left.forward.channel, left); _left.forward.SetCompare(left);
__HAL_TIM_SET_COMPARE(_left.backward.timer, _left.backward.channel, 0); _left.backward.SetCompare(0);
} }
else else
{ {
__HAL_TIM_SET_COMPARE(_left.forward.timer, _left.forward.channel, 0); _left.forward.SetCompare(0);
__HAL_TIM_SET_COMPARE(_left.backward.timer, _left.backward.channel, (-1 * left)); _left.backward.SetCompare(-1 * left);
} }
if (right > 0) if (right > 0)
{ {
__HAL_TIM_SET_COMPARE(_right.forward.timer, _right.forward.channel, right); _right.forward.SetCompare(right);
__HAL_TIM_SET_COMPARE(_right.backward.timer, _right.backward.channel, 0); _right.backward.SetCompare(0);
} }
else else
{ {
__HAL_TIM_SET_COMPARE(_right.forward.timer, _right.forward.channel, 0); _right.forward.SetCompare(0);
__HAL_TIM_SET_COMPARE(_right.backward.timer, _right.backward.channel, (-1 * right)); _right.backward.SetCompare(-1 * right);
} }
} }
void DualDrvMotors::Coast() void DualDrvMotors::Coast()
{ {
__HAL_TIM_SET_COMPARE(_left.forward.timer, _left.forward.channel, 0); _left.forward.SetCompare(0);
__HAL_TIM_SET_COMPARE(_left.backward.timer, _left.backward.channel, 0); _left.backward.SetCompare(0);
__HAL_TIM_SET_COMPARE(_right.forward.timer, _right.forward.channel, 0); _right.forward.SetCompare(0);
__HAL_TIM_SET_COMPARE(_right.backward.timer, _right.backward.channel, 0); _right.backward.SetCompare(0);
} }
void DualDrvMotors::Break() void DualDrvMotors::Break()

View File

@ -55,4 +55,9 @@ void PwmChannel::Disable()
HAL_TIM_PWM_Stop(timer, channel); HAL_TIM_PWM_Stop(timer, channel);
} }
void PwmChannel::SetCompare(const std::uint32_t compare)
{
__HAL_TIM_SET_COMPARE(timer, channel, compare);
}
} }