Simple motor controller library, using DIR, PWM, nSLP pin like pololu.
MotorControler.h
- Committer:
- sgrsn
- Date:
- 2021-02-21
- Branch:
- use_base
- Revision:
- 11:7493df5c5c40
- Parent:
- 9:a5d6835f7168
File content as of revision 11:7493df5c5c40:
#ifndef MOTORCONTROLER_H #define MOTORCONTROLER_H #include "mbed.h" #define FLIP_MOTOR_DIR 0 typedef enum{ CW = 0, CCW = 1, }MotorDirection; typedef enum{ SM = 0, LAP = 1, }ControlType; class MotorControler { public: MotorControler(PinName DIR, PinName PWM, PinName nSLP, ControlType control_type=SM); float operator = (float speed); float operator + (float speed); float operator += (float speed); float operator - (float speed); float operator -= (float speed); float operator * (float val); float operator *= (float val); float operator / (float val); float operator /= (float val); virtual void enableDriver(){} virtual void disableDriver(){} // speed(-1.0 - 1.0) void setSpeed(float speed); // dir(CW, or CCW) void setMotorDirection(MotorDirection dir); void setPinUsingSignMagnitude(int8_t dir, float speed); void setPinusingLockedUntiPhase(int8_t dir, float speed); // set PWM frequency // frequency[Hz] void setPwmFrequency(float frequency); protected: // if you want use LAP control, change DigitalOut -> PwmOut DIR_ DigitalOut DIR_; PwmOut PWM_; DigitalOut nSLP_; uint8_t reverse_direction_; ControlType control_type_; float current_speed_; }; class POLOLUControler : public MotorControler { public: POLOLUControler(PinName DIR, PinName PWM, PinName nSLP, ControlType control_type=SM) : MotorControler(DIR, PWM, nSLP, control_type) { } virtual void enableDriver() { nSLP_ = 1; } virtual void disableDriver() { nSLP_ = 0; } using MotorControler::operator=; using MotorControler::operator+; using MotorControler::operator+=; using MotorControler::operator-; using MotorControler::operator-=; using MotorControler::operator*; using MotorControler::operator*=; using MotorControler::operator/; using MotorControler::operator/=; }; class TEXNITISControler : public MotorControler { public: TEXNITISControler(PinName DIR, PinName PWM, PinName nSLP, ControlType control_type=SM) : MotorControler(DIR, PWM, nSLP, control_type) { nSLP_ = 1; } virtual void enableDriver() { // do nothing; } virtual void disableDriver() { PWM_ = 0; } using MotorControler::operator=; using MotorControler::operator+; using MotorControler::operator+=; using MotorControler::operator-; using MotorControler::operator-=; using MotorControler::operator*; using MotorControler::operator*=; using MotorControler::operator/; using MotorControler::operator/=; }; #endif