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;
std::uint16_t pin;
IO() = default;
IO() = delete;
IO(GPIO_TypeDef* port, const unsigned short pin);
void Set(const bool state);

View File

@ -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);
};
}

View File

@ -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()

View File

@ -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);
}
}