Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Motor 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 dir1Pin, unsigned int dir2Pin, 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 dir1; 00074 unsigned int dir2; 00075 QED qed; 00076 00077 int currentSpeed; 00078 int getDecoderCount(); 00079 00080 void resetPID(); 00081 00082 /** Set pwm duty cycle 00083 * 00084 * @param newPWM Duty cycle 00085 */ 00086 void setPWM(int newPWM); 00087 00088 //void pid(); 00089 00090 int setPoint; 00091 int pMulti; 00092 int iMulti; 00093 int dMulti; 00094 int error; 00095 int prevError; 00096 int P; 00097 int I; 00098 int D; 00099 int minPwm; 00100 int pidMulti; 00101 int iMax; 00102 00103 int pwmPeriod; 00104 00105 int currentPWM; 00106 int stallCount; 00107 int prevStallCount; 00108 int stallWarningLimit; 00109 int stallErrorLimit; 00110 int stallLevel; 00111 }; 00112 00113 #endif
Generated on Thu Aug 4 2022 03:39:56 by
1.7.2
