Allegro A3930 BLDC driver
a3930.h
- Committer:
- Reiko
- Date:
- 2013-11-10
- Revision:
- 1:464cd2cb852e
- Parent:
- 0:a6123d12f08b
File content as of revision 1:464cd2cb852e:
#ifndef A3930_H #define A3930_H #include "mbed.h" #include "PCA9555.h" #include "PinDetect.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); void setRawPWM(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; //PinDetect interruptTacho; PinDetect 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