Simple motor controller library, using DIR, PWM, nSLP pin like pololu.
MotorControler.h@11:7493df5c5c40, 2021-02-21 (annotated)
- Committer:
- sgrsn
- Date:
- Sun Feb 21 10:34:19 2021 +0000
- Branch:
- use_base
- Revision:
- 11:7493df5c5c40
- Parent:
- 9:a5d6835f7168
Change nSLP pin default output when using TEXNITISController
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sgrsn | 0:e3207dd7809a | 1 | #ifndef MOTORCONTROLER_H |
sgrsn | 0:e3207dd7809a | 2 | #define MOTORCONTROLER_H |
sgrsn | 0:e3207dd7809a | 3 | #include "mbed.h" |
sgrsn | 0:e3207dd7809a | 4 | |
sgrsn | 0:e3207dd7809a | 5 | #define FLIP_MOTOR_DIR 0 |
sgrsn | 0:e3207dd7809a | 6 | |
sgrsn | 1:ed3dfe4ecc8a | 7 | typedef enum{ |
sgrsn | 1:ed3dfe4ecc8a | 8 | CW = 0, |
sgrsn | 1:ed3dfe4ecc8a | 9 | CCW = 1, |
sgrsn | 1:ed3dfe4ecc8a | 10 | }MotorDirection; |
sgrsn | 1:ed3dfe4ecc8a | 11 | |
sgrsn | 3:7acc824ca344 | 12 | typedef enum{ |
sgrsn | 6:7955a025adee | 13 | SM = 0, |
sgrsn | 6:7955a025adee | 14 | LAP = 1, |
sgrsn | 6:7955a025adee | 15 | }ControlType; |
sgrsn | 6:7955a025adee | 16 | |
sgrsn | 0:e3207dd7809a | 17 | class MotorControler |
sgrsn | 0:e3207dd7809a | 18 | { |
sgrsn | 0:e3207dd7809a | 19 | public: |
sgrsn | 9:a5d6835f7168 | 20 | MotorControler(PinName DIR, PinName PWM, PinName nSLP, ControlType control_type=SM); |
sgrsn | 5:b46d1e179eb7 | 21 | float operator = (float speed); |
sgrsn | 5:b46d1e179eb7 | 22 | float operator + (float speed); |
sgrsn | 5:b46d1e179eb7 | 23 | float operator += (float speed); |
sgrsn | 5:b46d1e179eb7 | 24 | float operator - (float speed); |
sgrsn | 5:b46d1e179eb7 | 25 | float operator -= (float speed); |
sgrsn | 5:b46d1e179eb7 | 26 | float operator * (float val); |
sgrsn | 5:b46d1e179eb7 | 27 | float operator *= (float val); |
sgrsn | 5:b46d1e179eb7 | 28 | float operator / (float val); |
sgrsn | 5:b46d1e179eb7 | 29 | float operator /= (float val); |
sgrsn | 5:b46d1e179eb7 | 30 | |
sgrsn | 9:a5d6835f7168 | 31 | virtual void enableDriver(){} |
sgrsn | 9:a5d6835f7168 | 32 | virtual void disableDriver(){} |
sgrsn | 1:ed3dfe4ecc8a | 33 | |
sgrsn | 1:ed3dfe4ecc8a | 34 | // speed(-1.0 - 1.0) |
sgrsn | 0:e3207dd7809a | 35 | void setSpeed(float speed); |
sgrsn | 0:e3207dd7809a | 36 | |
sgrsn | 1:ed3dfe4ecc8a | 37 | // dir(CW, or CCW) |
sgrsn | 1:ed3dfe4ecc8a | 38 | void setMotorDirection(MotorDirection dir); |
sgrsn | 6:7955a025adee | 39 | void setPinUsingSignMagnitude(int8_t dir, float speed); |
sgrsn | 6:7955a025adee | 40 | void setPinusingLockedUntiPhase(int8_t dir, float speed); |
sgrsn | 1:ed3dfe4ecc8a | 41 | |
sgrsn | 2:543ff0150de1 | 42 | // set PWM frequency |
sgrsn | 2:543ff0150de1 | 43 | // frequency[Hz] |
sgrsn | 2:543ff0150de1 | 44 | void setPwmFrequency(float frequency); |
sgrsn | 2:543ff0150de1 | 45 | |
sgrsn | 9:a5d6835f7168 | 46 | protected: |
sgrsn | 7:4454a344006a | 47 | // if you want use LAP control, change DigitalOut -> PwmOut DIR_ |
sgrsn | 7:4454a344006a | 48 | DigitalOut DIR_; |
sgrsn | 3:7acc824ca344 | 49 | PwmOut PWM_; |
sgrsn | 3:7acc824ca344 | 50 | DigitalOut nSLP_; |
sgrsn | 3:7acc824ca344 | 51 | uint8_t reverse_direction_; |
sgrsn | 6:7955a025adee | 52 | ControlType control_type_; |
sgrsn | 5:b46d1e179eb7 | 53 | float current_speed_; |
sgrsn | 0:e3207dd7809a | 54 | }; |
sgrsn | 0:e3207dd7809a | 55 | |
sgrsn | 9:a5d6835f7168 | 56 | class POLOLUControler : public MotorControler |
sgrsn | 9:a5d6835f7168 | 57 | { |
sgrsn | 9:a5d6835f7168 | 58 | public: |
sgrsn | 9:a5d6835f7168 | 59 | POLOLUControler(PinName DIR, PinName PWM, PinName nSLP, ControlType control_type=SM) : MotorControler(DIR, PWM, nSLP, control_type) |
sgrsn | 9:a5d6835f7168 | 60 | { |
sgrsn | 9:a5d6835f7168 | 61 | } |
sgrsn | 9:a5d6835f7168 | 62 | |
sgrsn | 9:a5d6835f7168 | 63 | virtual void enableDriver() |
sgrsn | 9:a5d6835f7168 | 64 | { |
sgrsn | 9:a5d6835f7168 | 65 | nSLP_ = 1; |
sgrsn | 9:a5d6835f7168 | 66 | } |
sgrsn | 9:a5d6835f7168 | 67 | |
sgrsn | 9:a5d6835f7168 | 68 | virtual void disableDriver() |
sgrsn | 9:a5d6835f7168 | 69 | { |
sgrsn | 9:a5d6835f7168 | 70 | nSLP_ = 0; |
sgrsn | 9:a5d6835f7168 | 71 | } |
sgrsn | 9:a5d6835f7168 | 72 | |
sgrsn | 9:a5d6835f7168 | 73 | using MotorControler::operator=; |
sgrsn | 9:a5d6835f7168 | 74 | using MotorControler::operator+; |
sgrsn | 9:a5d6835f7168 | 75 | using MotorControler::operator+=; |
sgrsn | 9:a5d6835f7168 | 76 | using MotorControler::operator-; |
sgrsn | 9:a5d6835f7168 | 77 | using MotorControler::operator-=; |
sgrsn | 9:a5d6835f7168 | 78 | using MotorControler::operator*; |
sgrsn | 9:a5d6835f7168 | 79 | using MotorControler::operator*=; |
sgrsn | 9:a5d6835f7168 | 80 | using MotorControler::operator/; |
sgrsn | 9:a5d6835f7168 | 81 | using MotorControler::operator/=; |
sgrsn | 9:a5d6835f7168 | 82 | }; |
sgrsn | 9:a5d6835f7168 | 83 | |
sgrsn | 9:a5d6835f7168 | 84 | |
sgrsn | 9:a5d6835f7168 | 85 | class TEXNITISControler : public MotorControler |
sgrsn | 9:a5d6835f7168 | 86 | { |
sgrsn | 9:a5d6835f7168 | 87 | public: |
sgrsn | 9:a5d6835f7168 | 88 | TEXNITISControler(PinName DIR, PinName PWM, PinName nSLP, ControlType control_type=SM) : MotorControler(DIR, PWM, nSLP, control_type) |
sgrsn | 9:a5d6835f7168 | 89 | { |
sgrsn | 11:7493df5c5c40 | 90 | nSLP_ = 1; |
sgrsn | 9:a5d6835f7168 | 91 | } |
sgrsn | 9:a5d6835f7168 | 92 | |
sgrsn | 9:a5d6835f7168 | 93 | virtual void enableDriver() |
sgrsn | 9:a5d6835f7168 | 94 | { |
sgrsn | 9:a5d6835f7168 | 95 | // do nothing; |
sgrsn | 9:a5d6835f7168 | 96 | } |
sgrsn | 9:a5d6835f7168 | 97 | |
sgrsn | 9:a5d6835f7168 | 98 | virtual void disableDriver() |
sgrsn | 9:a5d6835f7168 | 99 | { |
sgrsn | 9:a5d6835f7168 | 100 | PWM_ = 0; |
sgrsn | 9:a5d6835f7168 | 101 | } |
sgrsn | 9:a5d6835f7168 | 102 | |
sgrsn | 9:a5d6835f7168 | 103 | using MotorControler::operator=; |
sgrsn | 9:a5d6835f7168 | 104 | using MotorControler::operator+; |
sgrsn | 9:a5d6835f7168 | 105 | using MotorControler::operator+=; |
sgrsn | 9:a5d6835f7168 | 106 | using MotorControler::operator-; |
sgrsn | 9:a5d6835f7168 | 107 | using MotorControler::operator-=; |
sgrsn | 9:a5d6835f7168 | 108 | using MotorControler::operator*; |
sgrsn | 9:a5d6835f7168 | 109 | using MotorControler::operator*=; |
sgrsn | 9:a5d6835f7168 | 110 | using MotorControler::operator/; |
sgrsn | 9:a5d6835f7168 | 111 | using MotorControler::operator/=; |
sgrsn | 9:a5d6835f7168 | 112 | }; |
sgrsn | 9:a5d6835f7168 | 113 | |
sgrsn | 9:a5d6835f7168 | 114 | |
sgrsn | 0:e3207dd7809a | 115 | #endif |