Library of routines to drive a MD25 motor control board

Dependents:   Nucleo_motors HTU21D_HELLOWORLD Major_dHome pixyMajordhome ... more

Committer:
jimherd
Date:
Thu May 19 12:42:06 2011 +0000
Revision:
0:e7f4a9247af2
Child:
1:8046f460a725
Initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jimherd 0:e7f4a9247af2 1 // ***********************************************************************
jimherd 0:e7f4a9247af2 2 // Class to control the MD25 Motor Controller.
jimherd 0:e7f4a9247af2 3 //
jimherd 0:e7f4a9247af2 4 // Based on Arduino code by Richie Reynolds
jimherd 0:e7f4a9247af2 5 // ***********************************************************************
jimherd 0:e7f4a9247af2 6 #ifndef MBED_MD25_h
jimherd 0:e7f4a9247af2 7 #define MBED_MD25_h
jimherd 0:e7f4a9247af2 8
jimherd 0:e7f4a9247af2 9 #include "mbed.h"
jimherd 0:e7f4a9247af2 10
jimherd 0:e7f4a9247af2 11 #define MD25_DEFAULT_ADDRESS 0xB0
jimherd 0:e7f4a9247af2 12 //
jimherd 0:e7f4a9247af2 13 // modes
jimherd 0:e7f4a9247af2 14 //
jimherd 0:e7f4a9247af2 15 // Mode Description
jimherd 0:e7f4a9247af2 16 // 0 Skid-steer with unsigned speed values (STOP = 128)
jimherd 0:e7f4a9247af2 17 // 1 Skid-steer with signed speed values (STOP = 0)
jimherd 0:e7f4a9247af2 18 // 2 Forward/turn steer with unsigned values (speed1 to control both motors, speed2 for turn)
jimherd 0:e7f4a9247af2 19 // 3 Forward/turn steer with signed values (speed1 to control both motors, speed2 for turn)
jimherd 0:e7f4a9247af2 20 //
jimherd 0:e7f4a9247af2 21 #define MODE_0 0
jimherd 0:e7f4a9247af2 22 #define MODE_1 1
jimherd 0:e7f4a9247af2 23 #define MODE_2 2
jimherd 0:e7f4a9247af2 24 #define MODE_3 3
jimherd 0:e7f4a9247af2 25
jimherd 0:e7f4a9247af2 26 //
jimherd 0:e7f4a9247af2 27 // register definitions
jimherd 0:e7f4a9247af2 28 //
jimherd 0:e7f4a9247af2 29 #define MD25_SPEED1_REG 0
jimherd 0:e7f4a9247af2 30 #define MD25_SPEED2_REG 1
jimherd 0:e7f4a9247af2 31 #define MD25_ENCODER1_REG 2
jimherd 0:e7f4a9247af2 32 #define MD25_ENCODER2_REG 6
jimherd 0:e7f4a9247af2 33 #define MD25_VOLTAGE_REG 10
jimherd 0:e7f4a9247af2 34 #define MD25_CURRENT1_REG 11
jimherd 0:e7f4a9247af2 35 #define MD25_CURRENT2_REG 12
jimherd 0:e7f4a9247af2 36 #define MD25_SOFTWAREVER_REG 13
jimherd 0:e7f4a9247af2 37 #define MD25_ACCELRATE_REG 14
jimherd 0:e7f4a9247af2 38 #define MD25_MODE_REG 15
jimherd 0:e7f4a9247af2 39 #define MD25_CMD_REG 16 // command register
jimherd 0:e7f4a9247af2 40 //
jimherd 0:e7f4a9247af2 41 // Command register command set
jimherd 0:e7f4a9247af2 42 //
jimherd 0:e7f4a9247af2 43 #define MD25_RESET_ENCODERS 0x20
jimherd 0:e7f4a9247af2 44 #define MD25_DIABLE SPEED_REGULATION 0x30
jimherd 0:e7f4a9247af2 45 #define MD25_ENABLE_SPEED_REGULATION 0x31
jimherd 0:e7f4a9247af2 46 #define MD25_DISABLE_TIMEOUT 0x32
jimherd 0:e7f4a9247af2 47 #define MD25_ENABLE_TIMEOUT 0x33
jimherd 0:e7f4a9247af2 48
jimherd 0:e7f4a9247af2 49 /** MD25 class
jimherd 0:e7f4a9247af2 50 *
jimherd 0:e7f4a9247af2 51 * Allow access to an MD25 Dual 12V 2.8A H-Bridge DC Motor Driver
jimherd 0:e7f4a9247af2 52 *
jimherd 0:e7f4a9247af2 53 * @code
jimherd 0:e7f4a9247af2 54 * MD25 motor_control(p9,p10); // assumes default address of 0xB0
jimherd 0:e7f4a9247af2 55 * or
jimherd 0:e7f4a9247af2 56 * MD25 motor_control(p9, p10, 0xB0);
jimherd 0:e7f4a9247af2 57 * @endcode
jimherd 0:e7f4a9247af2 58 */
jimherd 0:e7f4a9247af2 59 class MD25 {
jimherd 0:e7f4a9247af2 60 public:
jimherd 0:e7f4a9247af2 61 /** Constructor for the MD25 connected to specified I2C pins at a specified address
jimherd 0:e7f4a9247af2 62 *
jimherd 0:e7f4a9247af2 63 * @param sda I2C data pin
jimherd 0:e7f4a9247af2 64 * @param scl I2C clock pin
jimherd 0:e7f4a9247af2 65 * @param i2cAddress I2C address
jimherd 0:e7f4a9247af2 66 */
jimherd 0:e7f4a9247af2 67 MD25(PinName sda, PinName scl, int MD25_i2cAddress);
jimherd 0:e7f4a9247af2 68
jimherd 0:e7f4a9247af2 69 /** Constructor for the MD25 connected to specified I2C pins at default address
jimherd 0:e7f4a9247af2 70 *
jimherd 0:e7f4a9247af2 71 * @param sda I2C data pin
jimherd 0:e7f4a9247af2 72 * @param scl I2C clock pin
jimherd 0:e7f4a9247af2 73 */
jimherd 0:e7f4a9247af2 74 MD25(PinName sda, PinName scl);
jimherd 0:e7f4a9247af2 75
jimherd 0:e7f4a9247af2 76 int32_t getEncoder1();
jimherd 0:e7f4a9247af2 77 int32_t getEncoder2();
jimherd 0:e7f4a9247af2 78 void setSpeed1Reg(uint8_t speed);
jimherd 0:e7f4a9247af2 79 void setSpeed2Reg(uint8_t speed);
jimherd 0:e7f4a9247af2 80 void stopMotor1();
jimherd 0:e7f4a9247af2 81 void stopMotor2();
jimherd 0:e7f4a9247af2 82 void stopMotors();
jimherd 0:e7f4a9247af2 83 uint32_t getSoftwareVersion();
jimherd 0:e7f4a9247af2 84 float getBatteryVolts();
jimherd 0:e7f4a9247af2 85 uint8_t getAccelerationRate();
jimherd 0:e7f4a9247af2 86 uint8_t getMotor1Current();
jimherd 0:e7f4a9247af2 87 uint8_t getMotor2Current();
jimherd 0:e7f4a9247af2 88 uint8_t getMotor1Speed();
jimherd 0:e7f4a9247af2 89 uint8_t getMotor2Speed();
jimherd 0:e7f4a9247af2 90 uint8_t getMode();
jimherd 0:e7f4a9247af2 91 void setMode(uint8_t mode);
jimherd 0:e7f4a9247af2 92 void setAccelerationRate(uint8_t rate);
jimherd 0:e7f4a9247af2 93 void setSpeedRegisters(uint8_t speed_1, uint8_t speed_2);
jimherd 0:e7f4a9247af2 94 void setCommand(uint8_t command);
jimherd 0:e7f4a9247af2 95
jimherd 0:e7f4a9247af2 96 private:
jimherd 0:e7f4a9247af2 97 I2C _i2c;
jimherd 0:e7f4a9247af2 98 uint8_t current_mode;
jimherd 0:e7f4a9247af2 99 uint8_t MD25_i2cAddress;
jimherd 0:e7f4a9247af2 100
jimherd 0:e7f4a9247af2 101 uint8_t readRegisterbyte(uint8_t reg);
jimherd 0:e7f4a9247af2 102 void writeRegisterbyte(uint8_t reg, uint8_t value);
jimherd 0:e7f4a9247af2 103 };
jimherd 0:e7f4a9247af2 104
jimherd 0:e7f4a9247af2 105 #endif // MBED_md25_h