Code to let Gr20's BioRobotics2017 robot come to live.
Dependencies: FastPWM MODSERIAL QEI mbed
motor.h@7:b9a209f889f5, 2017-11-13 (annotated)
- 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?
User | Revision | Line number | New 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 |