motor drive libary to use speed control, coasting and dynamic braking. NOTE, dynamic braking my result in large currents. this may or may not set the motor driver on fire/break it/other undesired effects. so read the data sheet folks.

Dependents:   motordrivertestprogram Initialmbedrobotprogram mbedrobot ipod ... more

Files at this revision

API Documentation at this revision

Comitter:
littlexc
Date:
Fri Nov 19 12:32:06 2010 +0000
Parent:
1:3da7302dc9ae
Child:
3:8822f4955035
Commit message:
allows more control over the motordriver. returns duty on pmw line

Changed in this revision

motordriver.cpp Show annotated file Show diff for this revision Revisions of this file
motordriver.h Show annotated file Show diff for this revision Revisions of this file
--- a/motordriver.cpp	Thu Nov 11 15:32:55 2010 +0000
+++ b/motordriver.cpp	Fri Nov 19 12:32:06 2010 +0000
@@ -46,30 +46,36 @@
     sign = 0;//i.e nothing.
 }
 
-void Motor::speed(float speed) {
+float Motor::speed(float speed) {
+    float temp = 0;
     if (sign == 0) {
         _fwd = (speed > 0.0);
         _rev = (speed < 0.0);
-        _pwm = abs(speed);
+        temp = abs(speed);
+        _pwm = temp;
     } else if (sign == 1) {
         if (speed < 0) {
             _fwd = (speed > 0.0);
             _rev = (speed < 0.0);
             _pwm = 0;
+            temp = 0;
         } else {
             _fwd = (speed > 0.0);
             _rev = (speed < 0.0);
-            _pwm = abs(speed);
+            temp = abs(speed);
+            _pwm = temp;
         }
     } else if (sign == -1) {
         if (speed > 0) {
             _fwd = (speed > 0.0);
             _rev = (speed < 0.0);
             _pwm = 0;
+            temp = 0;
         } else {
             _fwd = (speed > 0.0);
             _rev = (speed < 0.0);
-            _pwm = abs(speed);
+            temp = abs(speed);
+            _pwm = temp;
         }
     }
     if (speed > 0)
@@ -79,7 +85,7 @@
     } else if (speed == 0) {
         sign = 0;
     }
-
+    return temp;
 }
 //  (additions)
 void Motor::coast(void) {
@@ -89,14 +95,15 @@
     sign = 0;
 }
 
-void Motor::stop(void) {
+float Motor::stop(float duty) {
     if (Brakeable == 1) {
         _fwd = 1;
         _rev = 1;
-        _pwm = 0.5;
+        _pwm = duty;
         sign = 0;
+        return duty;
     } else
-        return;
+        return 0;
 }
 
 /*
--- a/motordriver.h	Thu Nov 11 15:32:55 2010 +0000
+++ b/motordriver.h	Fri Nov 19 12:32:06 2010 +0000
@@ -42,35 +42,38 @@
 * @param pwm A PwmOut pin, driving the H-bridge enable line to control the speed
 * @param fwd A DigitalOut, set high when the motor should go forward
 * @param rev A DigitalOut, set high when the motor should go backwards
-* @param set if the motor driver is able to do braking 0 false 1 true. (addition)
+* @param set if the motor driver is able to do braking 0 false 1 true.
 */
         Motor(PinName pwm, PinName fwd, PinName rev, int brakeable);
   
-/** Set the speed of the motor (addition)
+/** Set the speed of the motor 
 * 
-* @param speed The speed of the motor as a normalised value between -1.0 and 1.0
+* @param speed The speed of the motor as a normalised value between -1.0 and 1.0.
+* @return the applied speed to the motor after checking to ensure motor doesn't switch from forward to reverse without stopping.
 */
-        void speed(float speed);
+        float speed(float speed);
         
 /** Set the the motor to coast
 * 
-* @param void motor coasts until another instruction is recived
+* @param void 
+* @return motor coasts until another instruction is recived.
 */        
   
         void coast(void);
 
-/** Set the motor to dynamicaly brake (addition)
+/** Set the motor to dynamicaly brake
 * 
-* @param void motor dynamicaly brakes until another instruction is recived
+* @param float 0 - 1.0 provides some control over how hard the motor brakes. 
+* @return duty applied to motor driver. -1 is error, motor driver can't brake.
 */
 
-        void stop(void);
+        float stop(float duty);
         
     protected:
         PwmOut _pwm;
         DigitalOut _fwd;
         DigitalOut _rev;
-        int Brakeable; // (addition)
+        int Brakeable; // cna the motor driver break
         int sign; //prevents throwing the motor from full foward to full reverse and stuff melting.
  
 };