Simple motor controller library, using DIR, PWM, nSLP pin like pololu.
Diff: MotorControler.h
- Branch:
- use_base
- Revision:
- 9:a5d6835f7168
- Parent:
- 7:4454a344006a
- Child:
- 11:7493df5c5c40
diff -r ad953e0e3c0f -r a5d6835f7168 MotorControler.h --- a/MotorControler.h Sat Feb 20 08:05:15 2021 +0000 +++ b/MotorControler.h Sun Feb 21 09:23:01 2021 +0000 @@ -10,14 +10,6 @@ }MotorDirection; typedef enum{ - POLOLU = 0, - TEXNITIS = 1, - HOGE = 2, - FUGA = 3, - OTHER = 4, -}DriverType; - -typedef enum{ SM = 0, LAP = 1, }ControlType; @@ -25,7 +17,7 @@ class MotorControler { public: - MotorControler(PinName DIR, PinName PWM, PinName nSLP, DriverType md_type=POLOLU, ControlType control_type=SM); + MotorControler(PinName DIR, PinName PWM, PinName nSLP, ControlType control_type=SM); float operator = (float speed); float operator + (float speed); float operator += (float speed); @@ -36,8 +28,8 @@ float operator / (float val); float operator /= (float val); - void enableDriver(); - void disableDriver(); + virtual void enableDriver(){} + virtual void disableDriver(){} // speed(-1.0 - 1.0) void setSpeed(float speed); @@ -51,15 +43,73 @@ // frequency[Hz] void setPwmFrequency(float frequency); - private: + protected: // if you want use LAP control, change DigitalOut -> PwmOut DIR_ DigitalOut DIR_; PwmOut PWM_; DigitalOut nSLP_; uint8_t reverse_direction_; - DriverType md_type_; 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_ = 0; + } + + 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 \ No newline at end of file