Motor
Fork of Motor by
motor.h@6:37199f371bf8, 2013-09-16 (annotated)
- Committer:
- Reiko
- Date:
- Mon Sep 16 17:54:14 2013 +0000
- Revision:
- 6:37199f371bf8
- Parent:
- 5:99fa6dffea40
- Parent:
- 4:2b77f4656e92
- Child:
- 7:fbd3fa0445e5
Merge
Who changed what in which revision?
User | Revision | Line number | New 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 |