Code to let Gr20's BioRobotics2017 robot come to live.
Dependencies: FastPWM MODSERIAL QEI mbed
motor.h@8:383a0fb48121, 2017-11-13 (annotated)
- Committer:
- megrootens
- Date:
- Mon Nov 13 10:45:29 2017 +0000
- Revision:
- 8:383a0fb48121
- Parent:
- 7:b9a209f889f5
Updated docs.
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 | 8:383a0fb48121 | 11 | * Motor representation. |
megrootens | 8:383a0fb48121 | 12 | * Speed (pwm); direction (dout); with QEI-encoder read-out. |
megrootens | 2:df0c6af898ac | 13 | */ |
megrootens | 0:caa8ee3bd882 | 14 | class Motor |
megrootens | 0:caa8ee3bd882 | 15 | { |
megrootens | 0:caa8ee3bd882 | 16 | public: |
megrootens | 2:df0c6af898ac | 17 | /** |
megrootens | 2:df0c6af898ac | 18 | * Constructor |
megrootens | 2:df0c6af898ac | 19 | */ |
megrootens | 0:caa8ee3bd882 | 20 | Motor(PinName pwm, PinName dir, PinName enc_a, PinName enc_b, |
megrootens | 7:b9a209f889f5 | 21 | int pulses_per_rev, bool invert_dir = false); |
megrootens | 7:b9a209f889f5 | 22 | void Stop(); |
megrootens | 7:b9a209f889f5 | 23 | void Start(); |
megrootens | 7:b9a209f889f5 | 24 | |
megrootens | 7:b9a209f889f5 | 25 | bool has_power(); |
megrootens | 7:b9a209f889f5 | 26 | |
megrootens | 7:b9a209f889f5 | 27 | void set_pwm(double pwm); |
megrootens | 0:caa8ee3bd882 | 28 | |
megrootens | 0:caa8ee3bd882 | 29 | |
megrootens | 7:b9a209f889f5 | 30 | double get_angle(); |
megrootens | 7:b9a209f889f5 | 31 | void set_angle(double angle); |
megrootens | 0:caa8ee3bd882 | 32 | |
megrootens | 0:caa8ee3bd882 | 33 | private: |
megrootens | 0:caa8ee3bd882 | 34 | |
megrootens | 2:df0c6af898ac | 35 | // Encoder, direction pin, pwm pin |
megrootens | 0:caa8ee3bd882 | 36 | QEI encoder_; |
megrootens | 0:caa8ee3bd882 | 37 | DigitalOut dir_; |
megrootens | 0:caa8ee3bd882 | 38 | FastPWM speed_; |
megrootens | 2:df0c6af898ac | 39 | |
megrootens | 2:df0c6af898ac | 40 | // encoder/gear box constants |
megrootens | 0:caa8ee3bd882 | 41 | const int kPulsesPerRev_; |
megrootens | 0:caa8ee3bd882 | 42 | const bool kInvertDir_; |
megrootens | 2:df0c6af898ac | 43 | |
megrootens | 2:df0c6af898ac | 44 | // allowed to move |
megrootens | 0:caa8ee3bd882 | 45 | bool power_; |
megrootens | 2:df0c6af898ac | 46 | |
megrootens | 2:df0c6af898ac | 47 | // internal offset s.t. the angle can be set. |
megrootens | 0:caa8ee3bd882 | 48 | double offset_; |
megrootens | 0:caa8ee3bd882 | 49 | |
megrootens | 2:df0c6af898ac | 50 | // get encoder pulses; only for internal use |
megrootens | 7:b9a209f889f5 | 51 | int get_pulses(); |
megrootens | 0:caa8ee3bd882 | 52 | |
megrootens | 0:caa8ee3bd882 | 53 | }; |
megrootens | 0:caa8ee3bd882 | 54 | |
megrootens | 2:df0c6af898ac | 55 | #endif |