What is the limit?

Reply to this note

Please Login to reply.

Discussion

*

* Created on: 2021/5/17 9:48

* Author: ChenWei

*

*/

#include "stm32f1xx_hal.h"

#include "MotorDriver.h"

namespace motorDriver {

// motor driver for the 40mm linear actuator, left and right movement

MotorDriver::MotorDriver() :

m_left{

.pwmPin = GPIO_PIN_12,

.motorPwdnPin = GPIO_PIN_13,

.directionPin = GPIO_PIN_14,

.speedLimitHz = 5000, // max speed limit

.dutyRange = 1000 // duty cycle range: 0~100%

},

m_right{

.pwmPin = GPIO_PIN_9,

.motorPwdnPin = GPIO_PIN_10,

.directionPin = GPIO_PIN_8,

.speedLimitHz = 5000, // max speed limit

.dutyRange = 1000 // duty cycle range: 0~100%

} {

}

void MotorDriver::move(float32_t leftSpeed, float32_t rightSpeed) {

m_left.setSpeed(leftSpeed);

m_right.setSpeed(rightSpeed);

// move left motor

if (m_left.isMoving()) {

HAL_GPIO_WritePin(m_left.pwmPin, GPIO_HIGH);

} else {

HAL_GPIO_WritePin(m_left.pwmPin, GPIO_LOW);

}

// move right motor

if (m_right.isMoving()) {

HAL_GPIO_WritePin(m_right.pwmPin, GPIO_HIGH);

} else {

HAL_GPIO_WritePin(m_right.pwmPin, GPIO_LOW);

}

}

void MotorDriver::stop() {

m_left.stop();

m_right.stop();

// move left motor

if (m_left.isMoving()) {

HAL_GPIO_WritePin(m_left.pwmPin, GPIO_HIGH);

} else {

HAL_GPIO_WritePin(m_left.pwmPin, GPIO_LOW);

}

// move right motor

if (m_right.isMoving()) {

HAL_GPIO_WritePin(m_right.pwmPin, GPIO_HIGH);

} else {

HAL_GPIO_WritePin(m_right.pwmPin, GPIO_LOW);

}

}

void MotorDriver::setDirection(bool32_t direction) {

if (direction == DIR_LEFT) {

m_left.setDirection(DIRECTION_FORWARD);

m_right.setDirection(DIRECTION_BACKWARD);

} else if (direction == DIR_RIGHT) {

m_left.setDirection(DIRECTION_BACKWARD);

m_right.setDirection(DIRECTION_FORWARD);

} else {

// stop motors

stop();

}

}

bool32_t MotorDriver::isMoving() const {

return (m_left.isMoving() || m_right.isMoving());

}

}