Routines to control a MD03 H-bridge module.

Files at this revision

API Documentation at this revision

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