Basketball robot mainboard firmware

Dependencies:   USBDevice mbed

Committer:
Reiko
Date:
Mon Sep 10 15:24:08 2018 +0000
Revision:
0:88887cfb2b04
Mainboard firmware for basketball robot

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Reiko 0:88887cfb2b04 1 #ifndef MOTOR_H
Reiko 0:88887cfb2b04 2 #define MOTOR_H
Reiko 0:88887cfb2b04 3 #include "mbed.h"
Reiko 0:88887cfb2b04 4 #include "PwmOut.h"
Reiko 0:88887cfb2b04 5
Reiko 0:88887cfb2b04 6 class Motor {
Reiko 0:88887cfb2b04 7 public:
Reiko 0:88887cfb2b04 8 //Motor() = default;
Reiko 0:88887cfb2b04 9 Motor(Serial *pc, PinName pwm, PinName dir1, PinName dir2, PinName fault, PinName encA, PinName encB);
Reiko 0:88887cfb2b04 10 //Motor (const Motor& ) = default;
Reiko 0:88887cfb2b04 11
Reiko 0:88887cfb2b04 12 uint8_t pid_on;
Reiko 0:88887cfb2b04 13 int16_t encTicks;
Reiko 0:88887cfb2b04 14 volatile int16_t speed;
Reiko 0:88887cfb2b04 15 float pgain, igain, dgain;
Reiko 0:88887cfb2b04 16
Reiko 0:88887cfb2b04 17 /*
Reiko 0:88887cfb2b04 18 * Run this to update speed
Reiko 0:88887cfb2b04 19 */
Reiko 0:88887cfb2b04 20 void pid2(int16_t encTicks);
Reiko 0:88887cfb2b04 21 int16_t getSpeed();
Reiko 0:88887cfb2b04 22 void setSpeed (int16_t speed);
Reiko 0:88887cfb2b04 23 void getPIDGain(char *gain);
Reiko 0:88887cfb2b04 24 void forward(float pwm);
Reiko 0:88887cfb2b04 25 void backward(float pwm);
Reiko 0:88887cfb2b04 26 void pidTick();
Reiko 0:88887cfb2b04 27 private:
Reiko 0:88887cfb2b04 28 static const unsigned int PWM_PERIOD_US = 2500;
Reiko 0:88887cfb2b04 29
Reiko 0:88887cfb2b04 30 Serial *_pc;
Reiko 0:88887cfb2b04 31 PwmOut _pwm;
Reiko 0:88887cfb2b04 32 DigitalOut _dir1;
Reiko 0:88887cfb2b04 33 DigitalOut _dir2;
Reiko 0:88887cfb2b04 34 DigitalIn _fault;
Reiko 0:88887cfb2b04 35 InterruptIn _encA;
Reiko 0:88887cfb2b04 36 InterruptIn _encB;
Reiko 0:88887cfb2b04 37
Reiko 0:88887cfb2b04 38 volatile int16_t ticks;
Reiko 0:88887cfb2b04 39 volatile uint8_t encNow;
Reiko 0:88887cfb2b04 40 volatile uint8_t encLast;
Reiko 0:88887cfb2b04 41 void encTick();
Reiko 0:88887cfb2b04 42
Reiko 0:88887cfb2b04 43 union doublebyte {
Reiko 0:88887cfb2b04 44 unsigned int value;
Reiko 0:88887cfb2b04 45 unsigned char bytes[2];
Reiko 0:88887cfb2b04 46 };
Reiko 0:88887cfb2b04 47
Reiko 0:88887cfb2b04 48 uint8_t enc_dir;
Reiko 0:88887cfb2b04 49 uint8_t enc_last;
Reiko 0:88887cfb2b04 50 uint8_t enc_now;
Reiko 0:88887cfb2b04 51
Reiko 0:88887cfb2b04 52 uint8_t dir;
Reiko 0:88887cfb2b04 53
Reiko 0:88887cfb2b04 54 int16_t currentPWM;
Reiko 0:88887cfb2b04 55 uint8_t motor_polarity;
Reiko 0:88887cfb2b04 56
Reiko 0:88887cfb2b04 57 float pidSpeed;
Reiko 0:88887cfb2b04 58 float pidError;
Reiko 0:88887cfb2b04 59 float pidErrorPrev;
Reiko 0:88887cfb2b04 60 float pidSetpoint;
Reiko 0:88887cfb2b04 61
Reiko 0:88887cfb2b04 62 float i;
Reiko 0:88887cfb2b04 63
Reiko 0:88887cfb2b04 64 /*
Reiko 0:88887cfb2b04 65 union doublebyte wcount;
Reiko 0:88887cfb2b04 66 union doublebyte decoder_count;
Reiko 0:88887cfb2b04 67
Reiko 0:88887cfb2b04 68 uint8_t dir;
Reiko 0:88887cfb2b04 69 */
Reiko 0:88887cfb2b04 70
Reiko 0:88887cfb2b04 71 uint8_t fail_counter;
Reiko 0:88887cfb2b04 72 uint8_t send_speed;
Reiko 0:88887cfb2b04 73 uint8_t failsafe;
Reiko 0:88887cfb2b04 74 uint8_t leds_on;
Reiko 0:88887cfb2b04 75
Reiko 0:88887cfb2b04 76 int16_t sp, sp_pid, der;
Reiko 0:88887cfb2b04 77 int16_t intgrl, prop;
Reiko 0:88887cfb2b04 78 //int16_t count, speed;
Reiko 0:88887cfb2b04 79 int16_t csum;
Reiko 0:88887cfb2b04 80 int16_t err, err_prev;
Reiko 0:88887cfb2b04 81
Reiko 0:88887cfb2b04 82 int16_t pwm, pwm_min, pwmmin;
Reiko 0:88887cfb2b04 83 uint8_t update_pid;
Reiko 0:88887cfb2b04 84
Reiko 0:88887cfb2b04 85 uint16_t stall_counter;
Reiko 0:88887cfb2b04 86 uint16_t stallCount;
Reiko 0:88887cfb2b04 87 uint16_t prevStallCount;
Reiko 0:88887cfb2b04 88 uint16_t stallWarningLimit;
Reiko 0:88887cfb2b04 89 uint16_t stallErrorLimit;
Reiko 0:88887cfb2b04 90 uint8_t stallLevel;
Reiko 0:88887cfb2b04 91 uint8_t stallChanged;
Reiko 0:88887cfb2b04 92 //int16_t currentPWM;
Reiko 0:88887cfb2b04 93
Reiko 0:88887cfb2b04 94 uint8_t counter;
Reiko 0:88887cfb2b04 95
Reiko 0:88887cfb2b04 96
Reiko 0:88887cfb2b04 97 void reset_pid();
Reiko 0:88887cfb2b04 98
Reiko 0:88887cfb2b04 99 };
Reiko 0:88887cfb2b04 100 #endif //MOTOR_H