Routines to control a MD03 H-bridge module.
MD03.cpp@1:0afd9f1a4e4f, 2015-11-07 (annotated)
- Committer:
- jimherd
- Date:
- Sat Nov 07 22:31:25 2015 +0000
- Revision:
- 1:0afd9f1a4e4f
- Parent:
- 0:7efb3e6f7c7a
Working version
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 | 1:0afd9f1a4e4f | 10 | |
jimherd | 1:0afd9f1a4e4f | 11 | _i2c.frequency(100000); |
jimherd | 0:7efb3e6f7c7a | 12 | } |
jimherd | 0:7efb3e6f7c7a | 13 | |
jimherd | 0:7efb3e6f7c7a | 14 | void MD03::set_speed(int speed) |
jimherd | 0:7efb3e6f7c7a | 15 | { |
jimherd | 0:7efb3e6f7c7a | 16 | char data[2]; |
jimherd | 0:7efb3e6f7c7a | 17 | |
jimherd | 0:7efb3e6f7c7a | 18 | data[0] = MD03_SPEED; |
jimherd | 0:7efb3e6f7c7a | 19 | data[1] = ((speed * 255)/100); |
jimherd | 0:7efb3e6f7c7a | 20 | _i2c.write(_writeOpcode, data, 2); |
jimherd | 0:7efb3e6f7c7a | 21 | } |
jimherd | 0:7efb3e6f7c7a | 22 | |
jimherd | 0:7efb3e6f7c7a | 23 | void MD03::set_accel(int acceleration) |
jimherd | 0:7efb3e6f7c7a | 24 | { |
jimherd | 0:7efb3e6f7c7a | 25 | char data[2]; |
jimherd | 0:7efb3e6f7c7a | 26 | |
jimherd | 0:7efb3e6f7c7a | 27 | data[0] = MD03_ACCELERATION; |
jimherd | 0:7efb3e6f7c7a | 28 | data[1] = 255 - ((acceleration * 255)/100); |
jimherd | 0:7efb3e6f7c7a | 29 | _i2c.write(_writeOpcode, data, 2); |
jimherd | 0:7efb3e6f7c7a | 30 | } |
jimherd | 0:7efb3e6f7c7a | 31 | |
jimherd | 0:7efb3e6f7c7a | 32 | void MD03::stop(void) |
jimherd | 0:7efb3e6f7c7a | 33 | { |
jimherd | 0:7efb3e6f7c7a | 34 | char data[2]; |
jimherd | 0:7efb3e6f7c7a | 35 | |
jimherd | 0:7efb3e6f7c7a | 36 | data[0] = MD03_COMMAND; |
jimherd | 0:7efb3e6f7c7a | 37 | data[1] = MD03_CMD_STOP; |
jimherd | 0:7efb3e6f7c7a | 38 | _i2c.write(_writeOpcode, data, 2); |
jimherd | 0:7efb3e6f7c7a | 39 | } |
jimherd | 0:7efb3e6f7c7a | 40 | |
jimherd | 0:7efb3e6f7c7a | 41 | void MD03::move_forward(void) |
jimherd | 0:7efb3e6f7c7a | 42 | { |
jimherd | 0:7efb3e6f7c7a | 43 | char data[2]; |
jimherd | 0:7efb3e6f7c7a | 44 | |
jimherd | 0:7efb3e6f7c7a | 45 | data[0] = MD03_COMMAND; |
jimherd | 0:7efb3e6f7c7a | 46 | data[1] = MD03_CMD_FORWARD; |
jimherd | 0:7efb3e6f7c7a | 47 | _i2c.write(_writeOpcode, data, 2); |
jimherd | 0:7efb3e6f7c7a | 48 | } |
jimherd | 0:7efb3e6f7c7a | 49 | |
jimherd | 0:7efb3e6f7c7a | 50 | void MD03::move_reverse(void) |
jimherd | 0:7efb3e6f7c7a | 51 | { |
jimherd | 0:7efb3e6f7c7a | 52 | char data[2]; |
jimherd | 0:7efb3e6f7c7a | 53 | |
jimherd | 0:7efb3e6f7c7a | 54 | data[0] = MD03_COMMAND; |
jimherd | 0:7efb3e6f7c7a | 55 | data[1] = MD03_CMD_REVERSE; |
jimherd | 0:7efb3e6f7c7a | 56 | _i2c.write(_writeOpcode, data, 2); |
jimherd | 0:7efb3e6f7c7a | 57 | } |
jimherd | 0:7efb3e6f7c7a | 58 | |
jimherd | 0:7efb3e6f7c7a | 59 | char MD03::read_reg(int reg) |
jimherd | 0:7efb3e6f7c7a | 60 | { |
jimherd | 0:7efb3e6f7c7a | 61 | char data[2]; |
jimherd | 0:7efb3e6f7c7a | 62 | |
jimherd | 0:7efb3e6f7c7a | 63 | data[0] = reg; |
jimherd | 0:7efb3e6f7c7a | 64 | _i2c.write(_writeOpcode, data, 1); |
jimherd | 0:7efb3e6f7c7a | 65 | _i2c.read(_readOpcode, data, 1); |
jimherd | 0:7efb3e6f7c7a | 66 | return data[0]; |
jimherd | 0:7efb3e6f7c7a | 67 | } |