Wheel control software for satellite microcontroller running the motors on the Karbor
Dependencies: mbed ros_lib_melodic
src/motor.cpp@6:ed47deb76adf, 2021-06-08 (annotated)
- Committer:
- krogedal
- Date:
- Tue Jun 08 20:55:08 2021 +0000
- Revision:
- 6:ed47deb76adf
- Parent:
- 5:44b2454a5eea
Might work now?
Who changed what in which revision?
User | Revision | Line number | New 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 |