/** * @file motorControl.h * @author Alexander Klein (alex@kleiax.de) * @brief * @version 0.1 * @date 2021-12-09 * * @copyright Copyright (c) 2021 * */ #ifndef MOTOR_CONTROL_H #define MOTOR_CONTROL_H #include #include #include #define DELAY 10 #define PWMFREQ 16000 #define PWMRES 8 #define POWERSTEPS 2 // A total of 20 levels ( 100 / SPEED_STEPS ) * RUN_MOTOR_CONTROL_DELAY = 500ms #define PWMMIN 50 #define PWMMAX 95 // Max 98% of 2^PWM_RES /** * @brief * */ class MotorControl { public: MotorControl(); void init(uint8_t pwm_pin, uint8_t pwm_channel, uint8_t dir_1, uint8_t dir_2); void loop(); void runMotorControl(); /** * @brief Set the minimum duty cycle * * @param min duty cycle in percent */ void setMinPwm(uint8_t min); /** * @brief Set the maximum duty cycle * * @param max duty cycle in percent */ void setMaxPwm(uint8_t max); void setPowerSteps(uint8_t steps); // Min anfahrkurve einbauen void setTargetPower(int8_t power); void setDelay(uint8_t delay); // Min anfahrkurve einbauen void stop(); /** * @brief * */ void emergencyStop(); int8_t getPower(); int8_t getTargetPower(); bool isTargetPowerReached(); bool isAccelerationPositive(); bool isAccelerationNegative(); private: void setRealPower(int8_t power); void increasePower(int8_t power); int8_t target_power = 0; int8_t power = 0; uint8_t direction = 0; // 0 = stop, 1 = forward, 2 = backward uint8_t pwm_pin; uint8_t pwm_channel; uint8_t pwm_min = PWMMIN; uint8_t pwm_max = PWMMAX; uint8_t dir_1; uint8_t dir_2; uint8_t delay = DELAY; uint8_t powersteps = POWERSTEPS; }; #endif // MOTOR_CONTROL_H