Library of routines to drive a MD25 motor control board

Dependents:   Nucleo_motors HTU21D_HELLOWORLD Major_dHome pixyMajordhome ... more

MD25.h

Committer:
jimherd
Date:
2011-05-19
Revision:
0:e7f4a9247af2
Child:
1:8046f460a725

File content as of revision 0:e7f4a9247af2:

// ***********************************************************************
// Class to control the MD25 Motor Controller.
//
// Based on Arduino code by Richie Reynolds
// ***********************************************************************
#ifndef MBED_MD25_h
#define MBED_MD25_h

#include "mbed.h"

#define     MD25_DEFAULT_ADDRESS    0xB0
//
// modes
//
//  Mode        Description
//   0    Skid-steer with unsigned speed values (STOP = 128)
//   1    Skid-steer with signed speed values  (STOP = 0)
//   2    Forward/turn steer with unsigned values (speed1 to control both motors, speed2 for turn)
//   3    Forward/turn steer with signed values (speed1 to control both motors, speed2 for turn)
//
#define     MODE_0       0
#define     MODE_1       1
#define     MODE_2       2
#define     MODE_3       3

//
// register definitions
//
#define     MD25_SPEED1_REG         0
#define     MD25_SPEED2_REG         1
#define     MD25_ENCODER1_REG       2
#define     MD25_ENCODER2_REG       6
#define     MD25_VOLTAGE_REG        10
#define     MD25_CURRENT1_REG       11
#define     MD25_CURRENT2_REG       12
#define     MD25_SOFTWAREVER_REG    13
#define     MD25_ACCELRATE_REG      14
#define     MD25_MODE_REG           15
#define     MD25_CMD_REG            16        // command register
//
// Command register command set
//
#define     MD25_RESET_ENCODERS             0x20
#define     MD25_DIABLE SPEED_REGULATION    0x30
#define     MD25_ENABLE_SPEED_REGULATION    0x31
#define     MD25_DISABLE_TIMEOUT            0x32
#define     MD25_ENABLE_TIMEOUT             0x33

/** MD25 class
 *
 * Allow access to an MD25 Dual 12V 2.8A H-Bridge DC Motor Driver
 *
 * @code
 *      MD25  motor_control(p9,p10);   // assumes default address of 0xB0
 * or
 *      MD25  motor_control(p9, p10, 0xB0);
 * @endcode
 */
class MD25 {
public:
    /** Constructor for the MD25 connected to specified I2C pins at a specified address
     *
     * @param   sda         I2C data pin
     * @param   scl         I2C clock pin
     * @param   i2cAddress  I2C address
     */
    MD25(PinName sda, PinName scl, int MD25_i2cAddress);

    /** Constructor for the MD25 connected to specified I2C pins at default address
     *
     * @param   sda         I2C data pin
     * @param   scl         I2C clock pin
     */
    MD25(PinName sda, PinName scl);

    int32_t getEncoder1();
    int32_t getEncoder2();
    void setSpeed1Reg(uint8_t speed);
    void setSpeed2Reg(uint8_t speed);
    void stopMotor1();
    void stopMotor2();
    void stopMotors();
    uint32_t getSoftwareVersion();
    float getBatteryVolts();
    uint8_t getAccelerationRate();
    uint8_t getMotor1Current();
    uint8_t getMotor2Current();
    uint8_t getMotor1Speed();
    uint8_t getMotor2Speed();
    uint8_t getMode();
    void setMode(uint8_t mode);
    void setAccelerationRate(uint8_t rate);
    void setSpeedRegisters(uint8_t speed_1, uint8_t speed_2);
    void setCommand(uint8_t command);

private:
    I2C      _i2c;
    uint8_t  current_mode;
    uint8_t   MD25_i2cAddress;

    uint8_t readRegisterbyte(uint8_t reg);
    void writeRegisterbyte(uint8_t reg, uint8_t value);
};

#endif // MBED_md25_h