Wheel control software for satellite microcontroller running the motors on the Karbor

Dependencies:   mbed ros_lib_melodic

Committer:
krogedal
Date:
Tue Jun 08 15:04:33 2021 +0000
Revision:
5:44b2454a5eea
Parent:
3:4b6080e86761
Child:
6:ed47deb76adf
Minor bug fixes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
krogedal 0:441289ea4e29 1 #ifndef KARBOT_MOTOR_CONTROL_H
krogedal 0:441289ea4e29 2 #define KARBOT_MOTOR_CONTROL_H
krogedal 0:441289ea4e29 3
krogedal 0:441289ea4e29 4 /* Karbot motor control class
krogedal 0:441289ea4e29 5 * Written by Simon Krogedal
krogedal 0:441289ea4e29 6 * 27/05/21
krogedal 0:441289ea4e29 7 * Team 9 4th Year project
krogedal 0:441289ea4e29 8 *
krogedal 0:441289ea4e29 9 * for NUCLEO-F401RE
krogedal 0:441289ea4e29 10 *
krogedal 0:441289ea4e29 11 */
krogedal 0:441289ea4e29 12
krogedal 0:441289ea4e29 13 #include "encoder.h"
krogedal 0:441289ea4e29 14 #include "motor.h"
krogedal 3:4b6080e86761 15
krogedal 3:4b6080e86761 16 /* This class controls the speed of an individual motor, helping the system keep
krogedal 3:4b6080e86761 17 * symmetric with asymmetric components. It is based on the encoder class
krogedal 3:4b6080e86761 18 * and contains a pointer to a motor object. With two of these the motion
krogedal 3:4b6080e86761 19 * controller can drive the robot to the desired points.
krogedal 3:4b6080e86761 20 */
krogedal 3:4b6080e86761 21 class MotorControl : public encoder {
krogedal 0:441289ea4e29 22 private:
krogedal 3:4b6080e86761 23 motor* mot; // motor object
krogedal 0:441289ea4e29 24
krogedal 3:4b6080e86761 25 double Kp, // Proportional gain
krogedal 3:4b6080e86761 26 Ti, // Integral gain time
krogedal 3:4b6080e86761 27 r_speed, // Speed set point
krogedal 3:4b6080e86761 28 r_clicks, // Same but in the "encoder language"
krogedal 3:4b6080e86761 29 max_speed, // The max speed of the motor (not used)
krogedal 3:4b6080e86761 30 output, // PWM output duty cycle
krogedal 3:4b6080e86761 31 prev_error; // Previous error, used for intergral control
krogedal 3:4b6080e86761 32
krogedal 3:4b6080e86761 33 bool dir, // Drivign direction (not used)
krogedal 3:4b6080e86761 34 max_out; // Flag triggered when output is saturated (not used)
krogedal 0:441289ea4e29 35
krogedal 3:4b6080e86761 36 double getError(void); // Calculate current error
krogedal 0:441289ea4e29 37
krogedal 3:4b6080e86761 38 void algorithm(void); // Control algorithm
krogedal 0:441289ea4e29 39
krogedal 0:441289ea4e29 40 public:
krogedal 3:4b6080e86761 41 // Constructor takes encoder pins and constants, and a motor object and contorller gains
krogedal 5:44b2454a5eea 42 MotorControl(PinName a, PinName b, int r, bool c, double p, motor* m, double ms, double kp, double ti, double diameter);
krogedal 0:441289ea4e29 43
krogedal 3:4b6080e86761 44 void setSpeed(double s); // Set the speed of the wheel
krogedal 3:4b6080e86761 45 void drive(void); // Drive at set speet
krogedal 3:4b6080e86761 46 void stop(void); // Stop motor
krogedal 3:4b6080e86761 47 void driveManual(void); // Drive at set speed in open loop
krogedal 3:4b6080e86761 48 void samplecall(void); // Sample encoder and update read speed value
krogedal 3:4b6080e86761 49 void setK(double k); // Set gain (used for Z-N tuning
krogedal 5:44b2454a5eea 50 //void start(void); // This function is overridden to avoid bugs
krogedal 3:4b6080e86761 51 double getOutput(void); // Returns current duty cycle
krogedal 3:4b6080e86761 52 bool checkFlag(void); // Check whether max out flag is set
krogedal 0:441289ea4e29 53 };
krogedal 0:441289ea4e29 54
krogedal 0:441289ea4e29 55 #endif