Routines to control a MD03 H-bridge module.
Revision 0:7efb3e6f7c7a, committed 2015-06-25
- Comitter:
- jimherd
- Date:
- Thu Jun 25 19:55:40 2015 +0000
- Child:
- 1:0afd9f1a4e4f
- Commit message:
- First version of library to control an MD03 H-bridge unit.
Changed in this revision
MD03.cpp | Show annotated file Show diff for this revision Revisions of this file |
MD03.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MD03.cpp Thu Jun 25 19:55:40 2015 +0000 @@ -0,0 +1,65 @@ +/* + * MD03 : 24v 20A H-bridge motor driver in I2C bus + */ +#include "mbed.h" +#include "MD03.h" + +MD03::MD03(PinName sda, PinName scl, int i2cAddress) : _i2c(sda, scl) { + _writeOpcode = i2cAddress & 0xFE; + _readOpcode = i2cAddress | 0x01; +} + +void MD03::set_speed(int speed) +{ +char data[2]; + + data[0] = MD03_SPEED; + data[1] = ((speed * 255)/100); + _i2c.write(_writeOpcode, data, 2); +} + +void MD03::set_accel(int acceleration) +{ +char data[2]; + + data[0] = MD03_ACCELERATION; + data[1] = 255 - ((acceleration * 255)/100); + _i2c.write(_writeOpcode, data, 2); +} + +void MD03::stop(void) +{ +char data[2]; + + data[0] = MD03_COMMAND; + data[1] = MD03_CMD_STOP; + _i2c.write(_writeOpcode, data, 2); +} + +void MD03::move_forward(void) +{ +char data[2]; + + data[0] = MD03_COMMAND; + data[1] = MD03_CMD_FORWARD; + _i2c.write(_writeOpcode, data, 2); +} + +void MD03::move_reverse(void) +{ +char data[2]; + + data[0] = MD03_COMMAND; + data[1] = MD03_CMD_REVERSE; + _i2c.write(_writeOpcode, data, 2); +} + +char MD03::read_reg(int reg) +{ +char data[2]; + + data[0] = reg; + _i2c.write(_writeOpcode, data, 1); + _i2c.read(_readOpcode, data, 1); + return data[0]; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MD03.h Thu Jun 25 19:55:40 2015 +0000 @@ -0,0 +1,44 @@ +/* + */ +#include "mbed.h" + +#ifndef MD03_H +#define MD03_H + +/* + * list of registers + */ +#define MD03_COMMAND 0x00 +#define MD03_STATUS 0x01 +#define MD03_SPEED 0x02 +#define MD03_ACCELERATION 0x03 +#define MD03_TEMPERATURE 0x04 +#define MD03_MOTOR_CURRENT 0x05 +#define MD03_SOFTWARE_REV 0x07 +/* + * list of command that can be sent to command register + */ +#define MD03_CMD_STOP 0x00 +#define MD03_CMD_FORWARD 0x01 +#define MD03_CMD_REVERSE 0x02 + +class MD03 { +public: + MD03(PinName sda, PinName scl, int i2cAddress); + + void set_speed(int speed); + void set_accel(int acceleration); + void stop(void); + void move_forward(void); + void move_reverse(void); + char read_reg(int register); + +protected: +// I2C &_i2c; + I2C _i2c; + char address; + char _writeOpcode, _readOpcode; + }; + + #endif + \ No newline at end of file