Code to let Gr20's BioRobotics2017 robot come to live.
Dependencies: FastPWM MODSERIAL QEI mbed
Diff: motor.h
- Revision:
- 7:b9a209f889f5
- Parent:
- 2:df0c6af898ac
- Child:
- 8:383a0fb48121
diff -r cddc73091ab5 -r b9a209f889f5 motor.h --- a/motor.h Mon Nov 13 09:34:39 2017 +0000 +++ b/motor.h Mon Nov 13 10:39:55 2017 +0000 @@ -11,8 +11,6 @@ * MOTOR CLASS * The D-action is used on a moving average filtered version of the error that * is put in, against (numerical) noise. - * - * __implementation can be found in main.cpp__ */ class Motor { @@ -21,76 +19,17 @@ * Constructor */ Motor(PinName pwm, PinName dir, PinName enc_a, PinName enc_b, - int pulses_per_rev, bool invert_dir = false) - : - encoder_(enc_a, enc_b, NC, NULL, QEI::X4_ENCODING), - dir_(dir), - speed_(pwm), - kPulsesPerRev_(pulses_per_rev), - kInvertDir_(invert_dir) - { - Stop(); - offset_ = 0; - speed_.period_us(PWM_PERIOD_US); - } - - /** - * Turn off motor - */ - void Stop() { - power_ = false; - dir_=0; - speed_=0; - } - - /** - * Start motor - */ - void Start() { - power_ = true; - } + int pulses_per_rev, bool invert_dir = false); + void Stop(); + void Start(); + + bool has_power(); + + void set_pwm(double pwm); - /** - * Is the motor allowed to move? - */ - bool has_power() { - return power_; - } - /** - * Apply PWM value in [-1,1] to motor - * Direction changes accordingly - * Only has effect when this.has_power() - */ - void set_pwm(double pwm) { - // only when allowed - if (power_) { - if (pwm<0) { - dir_ = kInvertDir_; - } else { - dir_ = !kInvertDir_; - } - if (abs(pwm)>1) { - speed_ = 1; - } else { - speed_ = abs(pwm); - } - } - } - - /** - * Get motor angle [deg] - */ - double get_angle() { - return offset_ + 360.0 * ((double)get_pulses()) / kPulsesPerRev_; - } - - /** - * Set the current motor angle to a given value [deg] (stored in offset) - */ - void set_angle(double angle) { - offset_ = angle - 360.0 * ((double)get_pulses()) / kPulsesPerRev_; - } + double get_angle(); + void set_angle(double angle); private: @@ -110,9 +49,7 @@ double offset_; // get encoder pulses; only for internal use - int get_pulses() { - return kInvertDir_?-encoder_.getPulses():encoder_.getPulses(); - } + int get_pulses(); };