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:
0:441289ea4e29
Minor bug fixes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
krogedal 0:441289ea4e29 1 /* Karbot motor class
krogedal 0:441289ea4e29 2 * Written by Simon Krogedal
krogedal 0:441289ea4e29 3 * 27/05/21
krogedal 0:441289ea4e29 4 * Team 9 4th Year project
krogedal 0:441289ea4e29 5 *
krogedal 0:441289ea4e29 6 * for NUCLEO-F401RE
krogedal 0:441289ea4e29 7 *
krogedal 0:441289ea4e29 8 */
krogedal 0:441289ea4e29 9
krogedal 5:44b2454a5eea 10
krogedal 0:441289ea4e29 11 #include "motor.h"
krogedal 0:441289ea4e29 12
krogedal 0:441289ea4e29 13 motor::motor(PinName pwm_pin, PinName dir_pin, double period) : output(pwm_pin), dir(dir_pin), T(period) {
krogedal 0:441289ea4e29 14 output.period(T); //this period is not going to change during the run
krogedal 0:441289ea4e29 15 dir = 1; //forward is active high
krogedal 0:441289ea4e29 16 dutCyc = 0.1; //just need a default value to avoid bugs
krogedal 0:441289ea4e29 17 stop(); //starts off
krogedal 0:441289ea4e29 18 }
krogedal 0:441289ea4e29 19
krogedal 0:441289ea4e29 20 void motor::drive(void) {
krogedal 0:441289ea4e29 21 driving = 1;
krogedal 0:441289ea4e29 22 output.write(dutCyc);
krogedal 0:441289ea4e29 23 }
krogedal 0:441289ea4e29 24
krogedal 0:441289ea4e29 25 void motor::stop(void) {
krogedal 0:441289ea4e29 26 driving = 0;
krogedal 0:441289ea4e29 27 output.write(0.0); //just constant low
krogedal 0:441289ea4e29 28 }
krogedal 0:441289ea4e29 29
krogedal 0:441289ea4e29 30 void motor::setOut(double dc) { //set duty cycle as a number between -1 and 1, where 1 is full force forward, -1 is backwards and 0 is still
krogedal 0:441289ea4e29 31 if(dc < 0.0) {
krogedal 0:441289ea4e29 32 dir = 0;
krogedal 0:441289ea4e29 33 if(dc < -1.0)
krogedal 0:441289ea4e29 34 dutCyc = 1.0;
krogedal 0:441289ea4e29 35 else
krogedal 0:441289ea4e29 36 dutCyc = -dc;
krogedal 0:441289ea4e29 37 }
krogedal 0:441289ea4e29 38 else {
krogedal 0:441289ea4e29 39 dir = 1;
krogedal 0:441289ea4e29 40 if(dc > 1.0)
krogedal 0:441289ea4e29 41 dutCyc = 1.0;
krogedal 0:441289ea4e29 42 else
krogedal 0:441289ea4e29 43 dutCyc = dc;
krogedal 0:441289ea4e29 44 }
krogedal 0:441289ea4e29 45 if(driving)
krogedal 0:441289ea4e29 46 output.write(dutCyc);
krogedal 0:441289ea4e29 47 }
krogedal 0:441289ea4e29 48
krogedal 0:441289ea4e29 49 double motor::getPeriod(void) {return T;}
krogedal 0:441289ea4e29 50
krogedal 0:441289ea4e29 51 double motor::getDuty(void) {return dutCyc;}
krogedal 0:441289ea4e29 52