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

MotorControler.h

Committer:
sgrsn
Date:
2021-02-02
Branch:
SM_LAP_Switchng
Revision:
6:7955a025adee
Parent:
5:b46d1e179eb7
Child:
7:4454a344006a

File content as of revision 6:7955a025adee:

#ifndef MOTORCONTROLER_H
#define MOTORCONTROLER_H
#include "mbed.h"

#define FLIP_MOTOR_DIR 0

typedef enum{
    CW = 0,
    CCW = 1,
}MotorDirection;

typedef enum{
    POLOLU = 0,
    TEXNITIS = 1,
    HOGE = 2,
    FUGA = 3,
    OTHER = 4,
}DriverType;

typedef enum{
    SM = 0,
    LAP = 1,
}ControlType;

class MotorControler
{
    public:
    MotorControler(PinName DIR, PinName PWM, PinName nSLP, DriverType md_type=POLOLU, 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);
    
    void enableDriver();
    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);
    
    private:
    PwmOut DIR_;
    PwmOut PWM_;
    DigitalOut nSLP_;
    uint8_t reverse_direction_;
    DriverType md_type_;
    ControlType control_type_;
    float current_speed_;
};

#endif