Routines to control a MD03 H-bridge module.

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?

UserRevisionLine numberNew 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 }