![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Basketball robot mainboard firmware
motor/motor.h@0:88887cfb2b04, 2018-09-10 (annotated)
- 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?
User | Revision | Line number | New 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 |