Library for driving a motor with one PWM and one DIR signal using PI control.
Fork of Motor2 by
motor.h
00001 #ifndef MOTOR_H 00002 #define MOTOR_H 00003 00004 #include "mbed.h" 00005 #include "PCA9555.h" 00006 #include "qed.h" 00007 /** Class for controlling motors trough PCA9555 */ 00008 class Motor { 00009 protected: 00010 FunctionPointer stallChangeCallback; 00011 FunctionPointer stallEndCallback; 00012 FunctionPointer stallWarningCallback; 00013 FunctionPointer stallErrorCallback; 00014 public: 00015 /** Create an instance of the motor connected to specfied pins, and IO-expander. 00016 * 00017 * @param PWMpin Pin for PWM output 00018 * @param *ioExt Pointer to IO-expander object 00019 * @param dir1Pin Direction pin 1 number (on IO-expander) 00020 * @param dir2Pin Direction pin 2 number (on IO-expander) 00021 * @param encA Encoder pin 00022 * @param encB Encoder pin 00023 */ 00024 Motor(PinName PWMpin, PCA9555 *ioExt, unsigned int dirPin, PinName encA, PinName encB); 00025 00026 /** Set speed setpoint 00027 * 00028 * @param newSpeed New setpoint 00029 */ 00030 void setSpeed(int newSpeed); 00031 00032 /** Get current speed setpoint value */ 00033 int getSpeed(); 00034 00035 /**Method that calculates appropriate PWM values for keeping motor speed close to setpoint 00036 * This method shoud be called periodically (60Hz) 00037 */ 00038 void pid(); 00039 00040 int getStallLevel(); 00041 00042 void stallChange(void (*function)(void)); 00043 00044 template<typename T> 00045 void stallChange(T *object, void (T::*member)(void)) { 00046 stallChangeCallback.attach(object, member); 00047 } 00048 00049 void stallEnd(void (*function)(void)); 00050 00051 template<typename T> 00052 void stallEnd(T *object, void (T::*member)(void)) { 00053 stallEndCallback.attach(object, member); 00054 } 00055 00056 void stallWarning(void (*function)(void)); 00057 00058 template<typename T> 00059 void stallWarning(T *object, void (T::*member)(void)) { 00060 stallWarningCallback.attach(object, member); 00061 } 00062 00063 void stallError(void (*function)(void)); 00064 00065 template<typename T> 00066 void stallError(T *object, void (T::*member)(void)) { 00067 stallErrorCallback.attach(object, member); 00068 } 00069 00070 private: 00071 PwmOut pwm; 00072 PCA9555 *extIO; 00073 unsigned int dir; 00074 QED qed; 00075 00076 int currentSpeed; 00077 int getDecoderCount(); 00078 00079 void resetPID(); 00080 00081 /** Set pwm duty cycle 00082 * 00083 * @param newPWM Duty cycle 00084 */ 00085 void setPWM(int newPWM); 00086 00087 //void pid(); 00088 00089 int setPoint; 00090 int pMulti; 00091 int iMulti; 00092 int dMulti; 00093 int error; 00094 int prevError; 00095 int P; 00096 int I; 00097 int D; 00098 int minPwm; 00099 int pidMulti; 00100 int iMax; 00101 00102 int pwmPeriod; 00103 00104 int currentPWM; 00105 int stallCount; 00106 int prevStallCount; 00107 int stallWarningLimit; 00108 int stallErrorLimit; 00109 int stallLevel; 00110 }; 00111 00112 #endif
Generated on Fri Jul 15 2022 14:17:41 by 1.7.2