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