Kaarel Adamson / motor

Fork of motor by Karl Oskar Lember

Committer:
kolibakter
Date:
Thu Oct 13 15:24:37 2016 +0000
Revision:
0:910b46b1e4ae
Child:
1:2911b1a7b611
Added initial version of copy from https://github.com/jaantti/Mainboard-mbed-source

Who changed what in which revision?

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