Motor

Fork of Motor by Reiko Randoja

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?

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 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