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