Allegro A3930 BLDC driver

Revision:
0:a6123d12f08b
Child:
1:464cd2cb852e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/a3930.h	Mon Nov 04 17:04:34 2013 +0000
@@ -0,0 +1,119 @@
+#ifndef A3930_H
+#define A3930_H
+
+#include "mbed.h"
+#include "PCA9555.h"
+
+ /** Class for controlling motors trough PCA9555 */
+class A3930 {
+protected:
+    FunctionPointer stallChangeCallback;
+    FunctionPointer stallEndCallback;
+    FunctionPointer stallWarningCallback;
+    FunctionPointer stallErrorCallback;
+public:
+    /** Create an instance of the motor connected to specfied pins, and IO-expander.
+     *
+     * @param PWMpin Pin for PWM output
+     * @param *ioExt Pointer to IO-expander object
+     * @param dir1Pin Direction pin 1 number (on IO-expander)
+     * @param dir2Pin Direction pin 2 number (on IO-expander)
+     * @param encA Encoder pin
+     * @param encB Encoder pin
+     */
+    A3930(PinName PWMpin, PCA9555 *ioExt, unsigned int dirPin, unsigned int brakePin, unsigned int coastPin, PinName tachoPin, PinName diroPin);
+    
+    /** Set speed setpoint
+     *
+     * @param newSpeed New setpoint
+     */
+    void setSpeed(int newSpeed);
+    
+    /** Get current speed setpoint value */
+    int getSpeed();
+    
+    /**Method that calculates appropriate PWM values for keeping motor speed close to setpoint
+    *     This method shoud be called periodically (60Hz)
+    */
+    void pid();
+    
+    /** Set pwm duty cycle
+     *
+     * @param newPWM Duty cycle
+     */
+    void setPWM(float newPWM);
+    
+    int getStallLevel();
+    
+    void stallChange(void (*function)(void));
+    
+    template<typename T>
+    void stallChange(T *object, void (T::*member)(void)) { 
+        stallChangeCallback.attach(object, member); 
+    }
+    
+    void stallEnd(void (*function)(void));
+    
+    template<typename T>
+    void stallEnd(T *object, void (T::*member)(void)) { 
+        stallEndCallback.attach(object, member); 
+    }
+    
+    void stallWarning(void (*function)(void));
+    
+    template<typename T>
+    void stallWarning(T *object, void (T::*member)(void)) { 
+        stallWarningCallback.attach(object, member); 
+    }
+    
+    void stallError(void (*function)(void));
+    
+    template<typename T>
+    void stallError(T *object, void (T::*member)(void)) { 
+        stallErrorCallback.attach(object, member); 
+    }
+ 
+private:
+    PwmOut pwm;
+    PCA9555 *extIO;
+    unsigned int dirPinNumber;
+    unsigned int brakePinNumber;
+    unsigned int coastPinNumber;
+    
+    InterruptIn interruptTacho;
+    InterruptIn interruptDiro;
+    
+    volatile int diro;
+    volatile int pulses;
+    
+    int currentSpeed;
+    int getDecoderCount();
+    
+    void tachoChanged();
+    void diroRise();
+    void diroFall();
+    
+    void resetPID();
+
+    int setPoint;
+    float pMulti;
+    float iMulti;
+    float dMulti;
+    int error;
+    int prevError;
+    float P;
+    float I;
+    float D;
+    float minPwm;
+    
+    float pwmPeriod;
+    
+    float currentPWM;
+    int stallCount;
+    int prevStallCount;
+    int stallWarningLimit;
+    int stallErrorLimit;
+    int stallLevel;
+};
+
+#endif
\ No newline at end of file