Library of routines to drive a MD25 motor control board
Dependents: Nucleo_motors HTU21D_HELLOWORLD Major_dHome pixyMajordhome ... more
MD25.h@0:e7f4a9247af2, 2011-05-19 (annotated)
- 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?
User | Revision | Line number | New 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 |