Routines to control a MD03 H-bridge module.
MD03.cpp@0:7efb3e6f7c7a, 2015-06-25 (annotated)
- Committer:
- jimherd
- Date:
- Thu Jun 25 19:55:40 2015 +0000
- Revision:
- 0:7efb3e6f7c7a
- Child:
- 1:0afd9f1a4e4f
First version of library to control an MD03 H-bridge unit.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jimherd | 0:7efb3e6f7c7a | 1 | /* |
jimherd | 0:7efb3e6f7c7a | 2 | * MD03 : 24v 20A H-bridge motor driver in I2C bus |
jimherd | 0:7efb3e6f7c7a | 3 | */ |
jimherd | 0:7efb3e6f7c7a | 4 | #include "mbed.h" |
jimherd | 0:7efb3e6f7c7a | 5 | #include "MD03.h" |
jimherd | 0:7efb3e6f7c7a | 6 | |
jimherd | 0:7efb3e6f7c7a | 7 | MD03::MD03(PinName sda, PinName scl, int i2cAddress) : _i2c(sda, scl) { |
jimherd | 0:7efb3e6f7c7a | 8 | _writeOpcode = i2cAddress & 0xFE; |
jimherd | 0:7efb3e6f7c7a | 9 | _readOpcode = i2cAddress | 0x01; |
jimherd | 0:7efb3e6f7c7a | 10 | } |
jimherd | 0:7efb3e6f7c7a | 11 | |
jimherd | 0:7efb3e6f7c7a | 12 | void MD03::set_speed(int speed) |
jimherd | 0:7efb3e6f7c7a | 13 | { |
jimherd | 0:7efb3e6f7c7a | 14 | char data[2]; |
jimherd | 0:7efb3e6f7c7a | 15 | |
jimherd | 0:7efb3e6f7c7a | 16 | data[0] = MD03_SPEED; |
jimherd | 0:7efb3e6f7c7a | 17 | data[1] = ((speed * 255)/100); |
jimherd | 0:7efb3e6f7c7a | 18 | _i2c.write(_writeOpcode, data, 2); |
jimherd | 0:7efb3e6f7c7a | 19 | } |
jimherd | 0:7efb3e6f7c7a | 20 | |
jimherd | 0:7efb3e6f7c7a | 21 | void MD03::set_accel(int acceleration) |
jimherd | 0:7efb3e6f7c7a | 22 | { |
jimherd | 0:7efb3e6f7c7a | 23 | char data[2]; |
jimherd | 0:7efb3e6f7c7a | 24 | |
jimherd | 0:7efb3e6f7c7a | 25 | data[0] = MD03_ACCELERATION; |
jimherd | 0:7efb3e6f7c7a | 26 | data[1] = 255 - ((acceleration * 255)/100); |
jimherd | 0:7efb3e6f7c7a | 27 | _i2c.write(_writeOpcode, data, 2); |
jimherd | 0:7efb3e6f7c7a | 28 | } |
jimherd | 0:7efb3e6f7c7a | 29 | |
jimherd | 0:7efb3e6f7c7a | 30 | void MD03::stop(void) |
jimherd | 0:7efb3e6f7c7a | 31 | { |
jimherd | 0:7efb3e6f7c7a | 32 | char data[2]; |
jimherd | 0:7efb3e6f7c7a | 33 | |
jimherd | 0:7efb3e6f7c7a | 34 | data[0] = MD03_COMMAND; |
jimherd | 0:7efb3e6f7c7a | 35 | data[1] = MD03_CMD_STOP; |
jimherd | 0:7efb3e6f7c7a | 36 | _i2c.write(_writeOpcode, data, 2); |
jimherd | 0:7efb3e6f7c7a | 37 | } |
jimherd | 0:7efb3e6f7c7a | 38 | |
jimherd | 0:7efb3e6f7c7a | 39 | void MD03::move_forward(void) |
jimherd | 0:7efb3e6f7c7a | 40 | { |
jimherd | 0:7efb3e6f7c7a | 41 | char data[2]; |
jimherd | 0:7efb3e6f7c7a | 42 | |
jimherd | 0:7efb3e6f7c7a | 43 | data[0] = MD03_COMMAND; |
jimherd | 0:7efb3e6f7c7a | 44 | data[1] = MD03_CMD_FORWARD; |
jimherd | 0:7efb3e6f7c7a | 45 | _i2c.write(_writeOpcode, data, 2); |
jimherd | 0:7efb3e6f7c7a | 46 | } |
jimherd | 0:7efb3e6f7c7a | 47 | |
jimherd | 0:7efb3e6f7c7a | 48 | void MD03::move_reverse(void) |
jimherd | 0:7efb3e6f7c7a | 49 | { |
jimherd | 0:7efb3e6f7c7a | 50 | char data[2]; |
jimherd | 0:7efb3e6f7c7a | 51 | |
jimherd | 0:7efb3e6f7c7a | 52 | data[0] = MD03_COMMAND; |
jimherd | 0:7efb3e6f7c7a | 53 | data[1] = MD03_CMD_REVERSE; |
jimherd | 0:7efb3e6f7c7a | 54 | _i2c.write(_writeOpcode, data, 2); |
jimherd | 0:7efb3e6f7c7a | 55 | } |
jimherd | 0:7efb3e6f7c7a | 56 | |
jimherd | 0:7efb3e6f7c7a | 57 | char MD03::read_reg(int reg) |
jimherd | 0:7efb3e6f7c7a | 58 | { |
jimherd | 0:7efb3e6f7c7a | 59 | char data[2]; |
jimherd | 0:7efb3e6f7c7a | 60 | |
jimherd | 0:7efb3e6f7c7a | 61 | data[0] = reg; |
jimherd | 0:7efb3e6f7c7a | 62 | _i2c.write(_writeOpcode, data, 1); |
jimherd | 0:7efb3e6f7c7a | 63 | _i2c.read(_readOpcode, data, 1); |
jimherd | 0:7efb3e6f7c7a | 64 | return data[0]; |
jimherd | 0:7efb3e6f7c7a | 65 | } |