Routines to control a MD03 H-bridge module.

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?

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