Allegro A3930 BLDC driver
Diff: a3930.h
- 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