Allegro A3930 BLDC driver

Files at this revision

API Documentation at this revision

Comitter:
Reiko
Date:
Sun Nov 10 15:36:47 2013 +0000
Parent:
0:a6123d12f08b
Commit message:
Added debounce to DIRO

Changed in this revision

a3930.cpp Show annotated file Show diff for this revision Revisions of this file
a3930.h Show annotated file Show diff for this revision Revisions of this file
--- a/a3930.cpp	Mon Nov 04 17:04:34 2013 +0000
+++ b/a3930.cpp	Sun Nov 10 15:36:47 2013 +0000
@@ -29,10 +29,21 @@
     extIO->setPin(coastPinNumber);
     extIO->clearPin(dirPinNumber);
     
-    interruptDiro.rise(this, &A3930::diroRise);
-    interruptDiro.fall(this, &A3930::diroFall);
+    /*interruptDiro.rise(this, &A3930::diroRise);
+    interruptDiro.fall(this, &A3930::diroFall);*/
     interruptTacho.rise(this, &A3930::tachoChanged);
     interruptTacho.fall(this, &A3930::tachoChanged);
+    
+    interruptDiro.attach_asserted(this, &A3930::diroRise);
+    interruptDiro.attach_deasserted(this, &A3930::diroFall);
+    /*interruptTacho.attach_asserted(this, &A3930::tachoChanged);
+    interruptTacho.attach_deasserted(this, &A3930::tachoChanged);*/
+    
+    interruptDiro.setSamplesTillAssert(3);
+    //interruptTacho.setSamplesTillAssert(2);
+    
+    interruptDiro.setSampleFrequency(500);
+    //interruptTacho.setSampleFrequency(1000);
 }
 
 void A3930::setPWM(float newPWM) {
@@ -40,16 +51,23 @@
     if (newPWM < -0.5) {
         pwm = -1 * newPWM;
         extIO->setPin(dirPinNumber);
-        extIO->setPin(coastPinNumber);
+        //extIO->setPin(coastPinNumber);
+        extIO->setPin(brakePinNumber);
     } else if (newPWM > 0.5) {
         pwm = newPWM;
         extIO->clearPin(dirPinNumber);
-        extIO->setPin(coastPinNumber);
+        //extIO->setPin(coastPinNumber);
+        extIO->setPin(brakePinNumber);
     } else {
-        extIO->clearPin(coastPinNumber);
+        extIO->clearPin(brakePinNumber);
     }
 }
 
+void A3930::setRawPWM(float newPWM) {
+    currentPWM = newPWM;
+    pwm = newPWM;
+}
+
 int A3930::getSpeed() {
     return currentSpeed;
 }
--- a/a3930.h	Mon Nov 04 17:04:34 2013 +0000
+++ b/a3930.h	Sun Nov 10 15:36:47 2013 +0000
@@ -3,6 +3,7 @@
 
 #include "mbed.h"
 #include "PCA9555.h"
+#include "PinDetect.h"
 
  /** Class for controlling motors trough PCA9555 */
 class A3930 {
@@ -43,6 +44,8 @@
      */
     void setPWM(float newPWM);
     
+    void setRawPWM(float newPWM);
+    
     int getStallLevel();
     
     void stallChange(void (*function)(void));
@@ -81,7 +84,10 @@
     unsigned int coastPinNumber;
     
     InterruptIn interruptTacho;
-    InterruptIn interruptDiro;
+    //InterruptIn interruptDiro;
+    
+    //PinDetect interruptTacho;
+    PinDetect interruptDiro;
     
     volatile int diro;
     volatile int pulses;