Reiko Randoja / Mbed 2 deprecated ut_bbr_2018

Dependencies:   mbed USBDevice

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers motor.h Source File

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