Motor
Fork of Motor by
motor.h@4:2b77f4656e92, 2013-09-15 (annotated)
- Committer:
- mlaane
- Date:
- Sun Sep 15 14:57:03 2013 +0000
- Revision:
- 4:2b77f4656e92
- Parent:
- 3:94db629c0a83
- Child:
- 6:37199f371bf8
documentation; moved setPWM to private methods
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 | 0:5cafacc2a607 | 9 | public: |
mlaane | 4:2b77f4656e92 | 10 | /** Create an instance of the motor connected to specfied pins, and IO-expander. |
mlaane | 4:2b77f4656e92 | 11 | * |
mlaane | 4:2b77f4656e92 | 12 | * @param PWMpin Pin for PWM output |
mlaane | 4:2b77f4656e92 | 13 | * @param *ioExt Pointer to IO-expander object |
mlaane | 4:2b77f4656e92 | 14 | * @param dir1Pin Direction pin 1 number (on IO-expander) |
mlaane | 4:2b77f4656e92 | 15 | * @param dir2Pin Direction pin 2 number (on IO-expander) |
mlaane | 4:2b77f4656e92 | 16 | * @param encA Encoder pin |
mlaane | 4:2b77f4656e92 | 17 | * @param encB Encoder pin |
mlaane | 4:2b77f4656e92 | 18 | */ |
Reiko | 1:c97f8bcd6c0f | 19 | Motor(PinName PWMpin, PCA9555 *ioExt, unsigned int dir1Pin, unsigned int dir2Pin, PinName encA, PinName encB); |
mlaane | 4:2b77f4656e92 | 20 | |
mlaane | 4:2b77f4656e92 | 21 | /** Set speed setpoint |
mlaane | 4:2b77f4656e92 | 22 | * |
mlaane | 4:2b77f4656e92 | 23 | * @param newSpeed New setpoint |
mlaane | 4:2b77f4656e92 | 24 | */ |
Reiko | 0:5cafacc2a607 | 25 | void setSpeed(int newSpeed); |
mlaane | 4:2b77f4656e92 | 26 | |
mlaane | 4:2b77f4656e92 | 27 | /** Get current speed setpoint value */ |
Reiko | 0:5cafacc2a607 | 28 | int getSpeed(); |
mlaane | 4:2b77f4656e92 | 29 | |
mlaane | 4:2b77f4656e92 | 30 | /**Method that calculates appropriate PWM values for keeping motor speed close to setpoint |
mlaane | 4:2b77f4656e92 | 31 | * This method shoud be called periodically (60Hz) |
mlaane | 4:2b77f4656e92 | 32 | */ |
Reiko | 1:c97f8bcd6c0f | 33 | void pid(); |
Reiko | 0:5cafacc2a607 | 34 | |
Reiko | 0:5cafacc2a607 | 35 | private: |
Reiko | 1:c97f8bcd6c0f | 36 | PwmOut pwm; |
Reiko | 1:c97f8bcd6c0f | 37 | PCA9555 *extIO; |
Reiko | 1:c97f8bcd6c0f | 38 | unsigned int dir1; |
Reiko | 1:c97f8bcd6c0f | 39 | unsigned int dir2; |
Reiko | 1:c97f8bcd6c0f | 40 | QED qed; |
Reiko | 1:c97f8bcd6c0f | 41 | |
Reiko | 1:c97f8bcd6c0f | 42 | int currentSpeed; |
Reiko | 1:c97f8bcd6c0f | 43 | int getDecoderCount(); |
Reiko | 0:5cafacc2a607 | 44 | |
Reiko | 2:3faf5dcde08f | 45 | void resetPID(); |
Reiko | 2:3faf5dcde08f | 46 | |
mlaane | 4:2b77f4656e92 | 47 | /** Set pwm duty cycle |
mlaane | 4:2b77f4656e92 | 48 | * |
mlaane | 4:2b77f4656e92 | 49 | * @param newPWM Duty cycle |
mlaane | 4:2b77f4656e92 | 50 | */ |
mlaane | 4:2b77f4656e92 | 51 | void setPWM(int newPWM); |
mlaane | 4:2b77f4656e92 | 52 | |
Reiko | 1:c97f8bcd6c0f | 53 | //void pid(); |
Reiko | 0:5cafacc2a607 | 54 | |
Reiko | 1:c97f8bcd6c0f | 55 | int setPoint; |
Reiko | 3:94db629c0a83 | 56 | int pMulti; |
Reiko | 3:94db629c0a83 | 57 | int iDiv; |
Reiko | 3:94db629c0a83 | 58 | int dMulti; |
Reiko | 3:94db629c0a83 | 59 | int error; |
Reiko | 3:94db629c0a83 | 60 | int prevError; |
Reiko | 3:94db629c0a83 | 61 | int P; |
Reiko | 3:94db629c0a83 | 62 | int I; |
Reiko | 3:94db629c0a83 | 63 | int D; |
Reiko | 3:94db629c0a83 | 64 | int minPwm; |
Reiko | 3:94db629c0a83 | 65 | int pidMulti; |
Reiko | 3:94db629c0a83 | 66 | int iMax; |
Reiko | 0:5cafacc2a607 | 67 | }; |
Reiko | 0:5cafacc2a607 | 68 | |
Reiko | 0:5cafacc2a607 | 69 | #endif |