bad dc motor controller with current mode

Dependencies:   mbed FastPWM3

Committer:
bwang
Date:
Sun Feb 03 03:38:05 2019 +0000
Revision:
0:2b1edabdd26b
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bwang 0:2b1edabdd26b 1 #include "mbed.h"
bwang 0:2b1edabdd26b 2 #include "CommandProcessor.h"
bwang 0:2b1edabdd26b 3
bwang 0:2b1edabdd26b 4 #include "globals.h"
bwang 0:2b1edabdd26b 5
bwang 0:2b1edabdd26b 6 int tokenize(char *buf, char **out, int max) {
bwang 0:2b1edabdd26b 7 char* tok;
bwang 0:2b1edabdd26b 8 int k = 0;
bwang 0:2b1edabdd26b 9
bwang 0:2b1edabdd26b 10 tok = strtok(buf, " ");
bwang 0:2b1edabdd26b 11
bwang 0:2b1edabdd26b 12 while(tok != NULL && k < max) {
bwang 0:2b1edabdd26b 13 out[k] = tok;
bwang 0:2b1edabdd26b 14 k++;
bwang 0:2b1edabdd26b 15 tok = strtok(NULL, " ");
bwang 0:2b1edabdd26b 16 }
bwang 0:2b1edabdd26b 17 return k;
bwang 0:2b1edabdd26b 18 }
bwang 0:2b1edabdd26b 19
bwang 0:2b1edabdd26b 20 #define __check(x) if(strcmp(s, #x) == 0) return &x
bwang 0:2b1edabdd26b 21
bwang 0:2b1edabdd26b 22 float* checkf(char *s) {
bwang 0:2b1edabdd26b 23 __check(KP);
bwang 0:2b1edabdd26b 24 __check(KI);
bwang 0:2b1edabdd26b 25 __check(I_LIMIT);
bwang 0:2b1edabdd26b 26 __check(F_SW);
bwang 0:2b1edabdd26b 27 __check(THROTTLE_DEADBAND);
bwang 0:2b1edabdd26b 28 __check(ANALOG_THROTTLE_LOW);
bwang 0:2b1edabdd26b 29 __check(ANALOG_THROTTLE_HI);
bwang 0:2b1edabdd26b 30 return NULL;
bwang 0:2b1edabdd26b 31 }
bwang 0:2b1edabdd26b 32
bwang 0:2b1edabdd26b 33 int* checkn(char *s) {
bwang 0:2b1edabdd26b 34 return NULL;
bwang 0:2b1edabdd26b 35 }
bwang 0:2b1edabdd26b 36
bwang 0:2b1edabdd26b 37 #define __strcase(in, out) case in:strcpy(result, out);break
bwang 0:2b1edabdd26b 38 #define __intcase(in, out) if (strcmp(buf, in) == 0) return out
bwang 0:2b1edabdd26b 39
bwang 0:2b1edabdd26b 40 char* src_to_str(int n) {
bwang 0:2b1edabdd26b 41 static char result[12];
bwang 0:2b1edabdd26b 42 switch (n) {
bwang 0:2b1edabdd26b 43 __strcase(CMD_SRC_RC, "RC");
bwang 0:2b1edabdd26b 44 __strcase(CMD_SRC_ANALOG, "Analog");
bwang 0:2b1edabdd26b 45 __strcase(CMD_SRC_TERMINAL, "Terminal");
bwang 0:2b1edabdd26b 46 __strcase(CMD_SRC_SERIAL, "Serial");
bwang 0:2b1edabdd26b 47 __strcase(CMD_SRC_CAN, "CAN");
bwang 0:2b1edabdd26b 48 __strcase(CMD_SRC_INTERNAL, "Internal");
bwang 0:2b1edabdd26b 49 default:
bwang 0:2b1edabdd26b 50 strcpy(result, "Invalid");
bwang 0:2b1edabdd26b 51 break;
bwang 0:2b1edabdd26b 52 }
bwang 0:2b1edabdd26b 53 return result;
bwang 0:2b1edabdd26b 54 }
bwang 0:2b1edabdd26b 55
bwang 0:2b1edabdd26b 56 int str_to_src(char *buf) {
bwang 0:2b1edabdd26b 57 __intcase("rc", CMD_SRC_RC);
bwang 0:2b1edabdd26b 58 __intcase("analog", CMD_SRC_ANALOG);
bwang 0:2b1edabdd26b 59 __intcase("terminal", CMD_SRC_TERMINAL);
bwang 0:2b1edabdd26b 60 __intcase("serial", CMD_SRC_SERIAL);
bwang 0:2b1edabdd26b 61 __intcase("can", CMD_SRC_CAN);
bwang 0:2b1edabdd26b 62 __intcase("internal", CMD_SRC_INTERNAL);
bwang 0:2b1edabdd26b 63 return -1;
bwang 0:2b1edabdd26b 64 }
bwang 0:2b1edabdd26b 65
bwang 0:2b1edabdd26b 66
bwang 0:2b1edabdd26b 67 char* op_to_str(int n) {
bwang 0:2b1edabdd26b 68 static char result[24];
bwang 0:2b1edabdd26b 69 switch(n) {
bwang 0:2b1edabdd26b 70 __strcase(OP_TORQUE, "Torque loop");
bwang 0:2b1edabdd26b 71 __strcase(OP_DRIVING, "Driving map");
bwang 0:2b1edabdd26b 72 __strcase(OP_SPEED, "Open-loop speed");
bwang 0:2b1edabdd26b 73 __strcase(OP_POSITION, "Position loop");
bwang 0:2b1edabdd26b 74 default:
bwang 0:2b1edabdd26b 75 strcpy(result, "Invalid");
bwang 0:2b1edabdd26b 76 break;
bwang 0:2b1edabdd26b 77 }
bwang 0:2b1edabdd26b 78 return result;
bwang 0:2b1edabdd26b 79 }
bwang 0:2b1edabdd26b 80
bwang 0:2b1edabdd26b 81 int str_to_op(char *buf) {
bwang 0:2b1edabdd26b 82 __intcase("torque", OP_TORQUE);
bwang 0:2b1edabdd26b 83 __intcase("driving", OP_DRIVING);
bwang 0:2b1edabdd26b 84 __intcase("speed", OP_SPEED);
bwang 0:2b1edabdd26b 85 __intcase("pos", OP_POSITION);
bwang 0:2b1edabdd26b 86 __intcase("position", OP_POSITION);
bwang 0:2b1edabdd26b 87 return -1;
bwang 0:2b1edabdd26b 88 }