Default mbed pwm doesn't have enough resolution at high frequencies, thats why I implemented VNH5019 Motor carrier with FastPWM.

Dependencies:   FastPWM

Fork of VNH5019 by IEEE RAS METU

Revision:
0:5d3ab0ea7f27
Child:
1:5e8d9ed18f0f
diff -r 000000000000 -r 5d3ab0ea7f27 VNH5019.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VNH5019.h	Sat Feb 01 13:48:28 2014 +0000
@@ -0,0 +1,66 @@
+#ifndef DualVNH5019MotorShield_h
+#define DualVNH5019MotorShield_h
+
+#include <mbed.h>
+
+class DualVNH5019MotorShield
+{
+   public:
+      // default pin selection
+      DualVNH5019MotorShield(); // Default pin selection.
+
+                              // User-defined pin selection. 
+      DualVNH5019MotorShield(PinName INA1_, PinName INB1_, PinName ENDIAG1_, PinName CS1_, PinName PWM1_,
+                             PinName INA2_, PinName INB2_, PinName ENDIAG2_, PinName CS2_, PinName PWM2_);
+    
+      // Set motor speeds, from -1.0 to +1.0
+      void setM1Speed(float Speed);
+      void setM2Speed(float Speed);
+      void setSpeeds(float m1Speed, float m2Speed);
+
+      // stop (no current to the motors)
+      void setM1Stop();
+      void setM2Stop();
+
+      // brake, with strength 0..1
+      void setM1Brake(float Brake);
+      void setM2Brake(float Brake);
+      void setBrakes(float m1Brake, float m2Brake);
+      
+      // return the current supplied to the motors
+      float getM1CurrentMA();
+      float getM2CurrentMA();
+      
+      // fault
+      bool isM1Fault();
+      bool isM2Fault();
+
+      // If a fault occurs, then we follow the procedure from the data sheet to clear it
+      void clearM1Fault();
+      void clearM2Fault();
+      
+      // disable / enable (isFault() will return true if the motor is disabled).
+      // Disabling the motor also sets the speed to 0 and brakes to LOW.
+      void disableM1();
+      void disableM2();
+
+      void enableM1(bool Enable = true);
+      void enableM2(bool Enable = true);
+    
+   private:
+      void init(); // Initialize TIMER 1, set the PWM to 20kHZ. 
+
+      DigitalOut   INA1;
+      DigitalOut   INB1;
+      DigitalInOut ENDIAG1;
+      AnalogIn     CS1;
+      PwmOut       PWM1;
+
+      DigitalOut   INA2;
+      DigitalOut   INB2;
+      DigitalInOut ENDIAG2;
+      AnalogIn     CS2;
+      PwmOut       PWM2;
+};
+
+#endif