Motor

Committer:
Reiko
Date:
Mon Sep 16 17:54:14 2013 +0000
Revision:
6:37199f371bf8
Parent:
5:99fa6dffea40
Parent:
4:2b77f4656e92
Merge

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Reiko 0:5cafacc2a607 1 #ifndef MOTOR_H
Reiko 0:5cafacc2a607 2 #define MOTOR_H
Reiko 0:5cafacc2a607 3
Reiko 0:5cafacc2a607 4 #include "mbed.h"
Reiko 1:c97f8bcd6c0f 5 #include "PCA9555.h"
Reiko 1:c97f8bcd6c0f 6 #include "qed.h"
mlaane 4:2b77f4656e92 7 /** Class for controlling motors trough PCA9555 */
Reiko 0:5cafacc2a607 8 class Motor {
Reiko 5:99fa6dffea40 9 protected:
Reiko 5:99fa6dffea40 10 FunctionPointer stallWarningCallback;
Reiko 5:99fa6dffea40 11 FunctionPointer stallErrorCallback;
Reiko 0:5cafacc2a607 12 public:
mlaane 4:2b77f4656e92 13 /** Create an instance of the motor connected to specfied pins, and IO-expander.
mlaane 4:2b77f4656e92 14 *
mlaane 4:2b77f4656e92 15 * @param PWMpin Pin for PWM output
mlaane 4:2b77f4656e92 16 * @param *ioExt Pointer to IO-expander object
mlaane 4:2b77f4656e92 17 * @param dir1Pin Direction pin 1 number (on IO-expander)
mlaane 4:2b77f4656e92 18 * @param dir2Pin Direction pin 2 number (on IO-expander)
mlaane 4:2b77f4656e92 19 * @param encA Encoder pin
mlaane 4:2b77f4656e92 20 * @param encB Encoder pin
mlaane 4:2b77f4656e92 21 */
Reiko 1:c97f8bcd6c0f 22 Motor(PinName PWMpin, PCA9555 *ioExt, unsigned int dir1Pin, unsigned int dir2Pin, PinName encA, PinName encB);
mlaane 4:2b77f4656e92 23
mlaane 4:2b77f4656e92 24 /** Set speed setpoint
mlaane 4:2b77f4656e92 25 *
mlaane 4:2b77f4656e92 26 * @param newSpeed New setpoint
mlaane 4:2b77f4656e92 27 */
Reiko 0:5cafacc2a607 28 void setSpeed(int newSpeed);
mlaane 4:2b77f4656e92 29
mlaane 4:2b77f4656e92 30 /** Get current speed setpoint value */
Reiko 0:5cafacc2a607 31 int getSpeed();
mlaane 4:2b77f4656e92 32
mlaane 4:2b77f4656e92 33 /**Method that calculates appropriate PWM values for keeping motor speed close to setpoint
mlaane 4:2b77f4656e92 34 * This method shoud be called periodically (60Hz)
mlaane 4:2b77f4656e92 35 */
Reiko 1:c97f8bcd6c0f 36 void pid();
Reiko 5:99fa6dffea40 37
Reiko 5:99fa6dffea40 38 void stallWarning(void (*function)(void));
Reiko 5:99fa6dffea40 39
Reiko 5:99fa6dffea40 40 template<typename T>
Reiko 5:99fa6dffea40 41 void stallWarning(T *object, void (T::*member)(void)) {
Reiko 5:99fa6dffea40 42 stallWarningCallback.attach(object, member);
Reiko 5:99fa6dffea40 43 }
Reiko 5:99fa6dffea40 44
Reiko 5:99fa6dffea40 45 void stallError(void (*function)(void));
Reiko 5:99fa6dffea40 46
Reiko 5:99fa6dffea40 47 template<typename T>
Reiko 5:99fa6dffea40 48 void stallError(T *object, void (T::*member)(void)) {
Reiko 5:99fa6dffea40 49 stallErrorCallback.attach(object, member);
Reiko 5:99fa6dffea40 50 }
Reiko 0:5cafacc2a607 51
Reiko 0:5cafacc2a607 52 private:
Reiko 1:c97f8bcd6c0f 53 PwmOut pwm;
Reiko 1:c97f8bcd6c0f 54 PCA9555 *extIO;
Reiko 1:c97f8bcd6c0f 55 unsigned int dir1;
Reiko 1:c97f8bcd6c0f 56 unsigned int dir2;
Reiko 1:c97f8bcd6c0f 57 QED qed;
Reiko 1:c97f8bcd6c0f 58
Reiko 1:c97f8bcd6c0f 59 int currentSpeed;
Reiko 1:c97f8bcd6c0f 60 int getDecoderCount();
Reiko 0:5cafacc2a607 61
Reiko 2:3faf5dcde08f 62 void resetPID();
Reiko 2:3faf5dcde08f 63
Reiko 6:37199f371bf8 64 <<<<<<< local
Reiko 6:37199f371bf8 65 =======
mlaane 4:2b77f4656e92 66 /** Set pwm duty cycle
mlaane 4:2b77f4656e92 67 *
mlaane 4:2b77f4656e92 68 * @param newPWM Duty cycle
mlaane 4:2b77f4656e92 69 */
mlaane 4:2b77f4656e92 70 void setPWM(int newPWM);
mlaane 4:2b77f4656e92 71
Reiko 1:c97f8bcd6c0f 72 //void pid();
Reiko 0:5cafacc2a607 73
Reiko 6:37199f371bf8 74 >>>>>>> other
Reiko 1:c97f8bcd6c0f 75 int setPoint;
Reiko 3:94db629c0a83 76 int pMulti;
Reiko 3:94db629c0a83 77 int iDiv;
Reiko 3:94db629c0a83 78 int dMulti;
Reiko 3:94db629c0a83 79 int error;
Reiko 3:94db629c0a83 80 int prevError;
Reiko 3:94db629c0a83 81 int P;
Reiko 3:94db629c0a83 82 int I;
Reiko 3:94db629c0a83 83 int D;
Reiko 3:94db629c0a83 84 int minPwm;
Reiko 3:94db629c0a83 85 int pidMulti;
Reiko 3:94db629c0a83 86 int iMax;
Reiko 5:99fa6dffea40 87
Reiko 5:99fa6dffea40 88 int currentPWM;
Reiko 5:99fa6dffea40 89 int stallCounter;
Reiko 5:99fa6dffea40 90 int stallCounterLimit;
Reiko 0:5cafacc2a607 91 };
Reiko 0:5cafacc2a607 92
Reiko 0:5cafacc2a607 93 #endif