Code to let Gr20's BioRobotics2017 robot come to live.

Dependencies:   FastPWM MODSERIAL QEI mbed

Committer:
megrootens
Date:
Mon Nov 13 10:39:55 2017 +0000
Revision:
7:b9a209f889f5
Parent:
2:df0c6af898ac
Child:
8:383a0fb48121
Moved implementation to separate .cpp files, by using static const variables for constants in namespaces and extern declarations for non-const vars.; Code compiles & runs on a board. **Not yet tested on the actual robot!**

Who changed what in which revision?

UserRevisionLine numberNew contents of line
megrootens 0:caa8ee3bd882 1 #ifndef _MOTOR_H_
megrootens 0:caa8ee3bd882 2 #define _MOTOR_H_
megrootens 0:caa8ee3bd882 3
megrootens 0:caa8ee3bd882 4 #include "FastPWM.h"
megrootens 0:caa8ee3bd882 5 #include "QEI.h"
megrootens 0:caa8ee3bd882 6
megrootens 2:df0c6af898ac 7 // Very high-frequency PWM signal so as to cut out noise.
megrootens 0:caa8ee3bd882 8 #define PWM_PERIOD_US 10
megrootens 0:caa8ee3bd882 9
megrootens 2:df0c6af898ac 10 /**
megrootens 2:df0c6af898ac 11 * MOTOR CLASS
megrootens 2:df0c6af898ac 12 * The D-action is used on a moving average filtered version of the error that
megrootens 2:df0c6af898ac 13 * is put in, against (numerical) noise.
megrootens 2:df0c6af898ac 14 */
megrootens 0:caa8ee3bd882 15 class Motor
megrootens 0:caa8ee3bd882 16 {
megrootens 0:caa8ee3bd882 17 public:
megrootens 2:df0c6af898ac 18 /**
megrootens 2:df0c6af898ac 19 * Constructor
megrootens 2:df0c6af898ac 20 */
megrootens 0:caa8ee3bd882 21 Motor(PinName pwm, PinName dir, PinName enc_a, PinName enc_b,
megrootens 7:b9a209f889f5 22 int pulses_per_rev, bool invert_dir = false);
megrootens 7:b9a209f889f5 23 void Stop();
megrootens 7:b9a209f889f5 24 void Start();
megrootens 7:b9a209f889f5 25
megrootens 7:b9a209f889f5 26 bool has_power();
megrootens 7:b9a209f889f5 27
megrootens 7:b9a209f889f5 28 void set_pwm(double pwm);
megrootens 0:caa8ee3bd882 29
megrootens 0:caa8ee3bd882 30
megrootens 7:b9a209f889f5 31 double get_angle();
megrootens 7:b9a209f889f5 32 void set_angle(double angle);
megrootens 0:caa8ee3bd882 33
megrootens 0:caa8ee3bd882 34 private:
megrootens 0:caa8ee3bd882 35
megrootens 2:df0c6af898ac 36 // Encoder, direction pin, pwm pin
megrootens 0:caa8ee3bd882 37 QEI encoder_;
megrootens 0:caa8ee3bd882 38 DigitalOut dir_;
megrootens 0:caa8ee3bd882 39 FastPWM speed_;
megrootens 2:df0c6af898ac 40
megrootens 2:df0c6af898ac 41 // encoder/gear box constants
megrootens 0:caa8ee3bd882 42 const int kPulsesPerRev_;
megrootens 0:caa8ee3bd882 43 const bool kInvertDir_;
megrootens 2:df0c6af898ac 44
megrootens 2:df0c6af898ac 45 // allowed to move
megrootens 0:caa8ee3bd882 46 bool power_;
megrootens 2:df0c6af898ac 47
megrootens 2:df0c6af898ac 48 // internal offset s.t. the angle can be set.
megrootens 0:caa8ee3bd882 49 double offset_;
megrootens 0:caa8ee3bd882 50
megrootens 2:df0c6af898ac 51 // get encoder pulses; only for internal use
megrootens 7:b9a209f889f5 52 int get_pulses();
megrootens 0:caa8ee3bd882 53
megrootens 0:caa8ee3bd882 54 };
megrootens 0:caa8ee3bd882 55
megrootens 2:df0c6af898ac 56 #endif