Simple motor controller library, using DIR, PWM, nSLP pin like pololu.

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?

UserRevisionLine numberNew 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