Motor

Fork of Motor by Reiko Randoja

Committer:
Reiko
Date:
Mon Sep 16 17:53:13 2013 +0000
Revision:
5:99fa6dffea40
Parent:
3:94db629c0a83
Child:
6:37199f371bf8
Changed PI controller parameters, started with stall detection

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"
Reiko 0:5cafacc2a607 7
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:
Reiko 1:c97f8bcd6c0f 13 Motor(PinName PWMpin, PCA9555 *ioExt, unsigned int dir1Pin, unsigned int dir2Pin, PinName encA, PinName encB);
Reiko 0:5cafacc2a607 14
Reiko 3:94db629c0a83 15 void setPWM(int newPWM);
Reiko 0:5cafacc2a607 16 void setSpeed(int newSpeed);
Reiko 0:5cafacc2a607 17 int getSpeed();
Reiko 1:c97f8bcd6c0f 18 void pid();
Reiko 5:99fa6dffea40 19
Reiko 5:99fa6dffea40 20 void stallWarning(void (*function)(void));
Reiko 5:99fa6dffea40 21
Reiko 5:99fa6dffea40 22 template<typename T>
Reiko 5:99fa6dffea40 23 void stallWarning(T *object, void (T::*member)(void)) {
Reiko 5:99fa6dffea40 24 stallWarningCallback.attach(object, member);
Reiko 5:99fa6dffea40 25 }
Reiko 5:99fa6dffea40 26
Reiko 5:99fa6dffea40 27 void stallError(void (*function)(void));
Reiko 5:99fa6dffea40 28
Reiko 5:99fa6dffea40 29 template<typename T>
Reiko 5:99fa6dffea40 30 void stallError(T *object, void (T::*member)(void)) {
Reiko 5:99fa6dffea40 31 stallErrorCallback.attach(object, member);
Reiko 5:99fa6dffea40 32 }
Reiko 0:5cafacc2a607 33
Reiko 0:5cafacc2a607 34 private:
Reiko 1:c97f8bcd6c0f 35 PwmOut pwm;
Reiko 1:c97f8bcd6c0f 36 PCA9555 *extIO;
Reiko 1:c97f8bcd6c0f 37 unsigned int dir1;
Reiko 1:c97f8bcd6c0f 38 unsigned int dir2;
Reiko 1:c97f8bcd6c0f 39 QED qed;
Reiko 1:c97f8bcd6c0f 40
Reiko 1:c97f8bcd6c0f 41 int currentSpeed;
Reiko 1:c97f8bcd6c0f 42 int getDecoderCount();
Reiko 0:5cafacc2a607 43
Reiko 2:3faf5dcde08f 44 void resetPID();
Reiko 2:3faf5dcde08f 45
Reiko 1:c97f8bcd6c0f 46 int setPoint;
Reiko 3:94db629c0a83 47 int pMulti;
Reiko 3:94db629c0a83 48 int iDiv;
Reiko 3:94db629c0a83 49 int dMulti;
Reiko 3:94db629c0a83 50 int error;
Reiko 3:94db629c0a83 51 int prevError;
Reiko 3:94db629c0a83 52 int P;
Reiko 3:94db629c0a83 53 int I;
Reiko 3:94db629c0a83 54 int D;
Reiko 3:94db629c0a83 55 int minPwm;
Reiko 3:94db629c0a83 56 int pidMulti;
Reiko 3:94db629c0a83 57 int iMax;
Reiko 5:99fa6dffea40 58
Reiko 5:99fa6dffea40 59 int currentPWM;
Reiko 5:99fa6dffea40 60 int stallCounter;
Reiko 5:99fa6dffea40 61 int stallCounterLimit;
Reiko 0:5cafacc2a607 62 };
Reiko 0:5cafacc2a607 63
Reiko 0:5cafacc2a607 64 #endif