This library is an attempt to encapsulate the Pololu motor board MC33926 Motor Driver Carrier.

/media/uploads/buckeyes1997/0j1889.200.jpg

http://www.pololu.com/catalog/product/1213

Dual MC33926 Motor Driver Carrier

This dual brushed DC motor driver, based on Freescale’s MC33926 full H-bridge, has a wide operating range of 5 – 28 V and can deliver almost 3 A continuously (5 A peak) to each of its two motor channels. The MC33926 works with 3 – 5 V logic levels, supports ultrasonic (up to 20 kHz) PWM, and features current feedback, under-voltage protection, over-current protection, and over-temperature protection.

Revision:
1:69e4a93b718d
Parent:
0:b7c4b6de973e
--- a/Motor.cpp	Mon Feb 11 19:49:50 2013 +0000
+++ b/Motor.cpp	Mon Feb 11 20:53:20 2013 +0000
@@ -4,9 +4,9 @@
 
 Motor::Motor(PinName pwm, PinName dir1, PinName dir2): _pwm(pwm), _dir1(dir1), _dir2(dir2)
 {
-    _direction=1;
-    _pwm.period(0.00005);
-    _pwm = 0;
+    _direction=1;           //default fwd
+    _pwm.period(0.00005);   //20Khz
+    _pwm = 0;               //default pwm off
     _dir1 = 0;
     _dir2 = 0;
 
@@ -21,17 +21,51 @@
         _dir1=0;
         _dir2=1;
     }
+    if(speed > 1) {
+        speed = 1;
+    }
+    if(speed < -1) {
+        speed = -1;
+    }
+
     _pwm = abs(speed);
     return speed;
 }
 
 float Motor::speed(float speed)
 {
+    if(speed > 1) {
+        speed = 1;
+    }
+    if(speed < -1) {
+        speed = -1;
+    }
+    if(speed < 0) {
+        _dir1=1;
+        _dir2=0;
+    } else {
+        _dir1=0;
+        _dir2=1;
+    }
     _pwm = abs(speed);
     return speed;
 }
 
-Motor& Motor::operator= (float speed) { 
+Motor& Motor::operator= (float speed)
+{
+    if(speed > 1) {
+        speed = 1;
+    }
+    if(speed < -1) {
+        speed = -1;
+    }
+    if(speed < 0) {
+        _dir1=1;
+        _dir2=0;
+    } else {
+        _dir1=0;
+        _dir2=1;
+    }
     _pwm = abs(speed);
-   return *this;
+    return *this;
 }