robot

Dependencies:   FastPWM3 mbed

Committer:
bwang
Date:
Sat Nov 10 09:21:51 2018 +0000
Revision:
234:ad68d7f8eff1
Parent:
232:47f6cf4f9126
Child:
235:fe49ec4e9c97
11/10/2018 04:21 - cmd_setp() sets setpoint to zero if there are errors present (to avoid sudden start of motor if errors are cleared)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bwang 181:d3510c8beab6 1 #include "mbed.h"
bwang 181:d3510c8beab6 2 #include "CommandProcessor.h"
bwang 181:d3510c8beab6 3 #include "PreferenceWriter.h"
bwang 181:d3510c8beab6 4
bwang 181:d3510c8beab6 5 #include "prefs.h"
bwang 181:d3510c8beab6 6 #include "globals.h"
bwang 181:d3510c8beab6 7
bwang 196:7172e6e28867 8 #include "hardware.h"
bwang 185:5c102874b490 9 #include "defaults.h"
bwang 185:5c102874b490 10 #include "derived.h"
bwang 181:d3510c8beab6 11
bwang 234:ad68d7f8eff1 12 #include "errors.h"
bwang 232:47f6cf4f9126 13 #include "Calibration.h"
bwang 232:47f6cf4f9126 14
bwang 181:d3510c8beab6 15 void cmd_setp(Serial *pc, char *buf) {
bwang 234:ad68d7f8eff1 16 if (BREMS_src == CMD_SRC_TERMINAL) {
bwang 234:ad68d7f8eff1 17 if (!checks_passed()) {
bwang 234:ad68d7f8eff1 18 pc->printf("%s\n", "Errors present, setting to 0.0");
bwang 234:ad68d7f8eff1 19 } else {
bwang 234:ad68d7f8eff1 20 control.user_cmd = atof(buf);
bwang 234:ad68d7f8eff1 21 }
bwang 234:ad68d7f8eff1 22 }
bwang 181:d3510c8beab6 23 }
bwang 181:d3510c8beab6 24
bwang 181:d3510c8beab6 25 void cmd_mode(Serial *pc, char *buf) {
bwang 200:4999d5e6c63d 26 if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) {
bwang 200:4999d5e6c63d 27 pc->printf("%s\n", "Turn off motor first");
bwang 200:4999d5e6c63d 28 return;
bwang 200:4999d5e6c63d 29 }
bwang 181:d3510c8beab6 30 int n = str_to_mode(buf);
bwang 181:d3510c8beab6 31 if (n < 0) {
bwang 181:d3510c8beab6 32 pc->printf("%s\n", "Invalid Mode");
bwang 181:d3510c8beab6 33 return;
bwang 181:d3510c8beab6 34 }
bwang 181:d3510c8beab6 35 BREMS_mode = n;
bwang 232:47f6cf4f9126 36
bwang 232:47f6cf4f9126 37 //ZERO and CHR are special modes - they execute run-once functions
bwang 232:47f6cf4f9126 38 //and override commutation, then exit to CFG
bwang 232:47f6cf4f9126 39 if (BREMS_mode == MODE_ZERO) {
bwang 232:47f6cf4f9126 40 calibrate_position(&io);
bwang 232:47f6cf4f9126 41 control.user_cmd = 0.0f;
bwang 232:47f6cf4f9126 42 BREMS_mode = MODE_CFG;
bwang 232:47f6cf4f9126 43 }
bwang 232:47f6cf4f9126 44 else if (BREMS_mode == MODE_CHR) {
bwang 232:47f6cf4f9126 45 control.user_cmd = 0.0f;
bwang 232:47f6cf4f9126 46 BREMS_mode = MODE_CFG;
bwang 232:47f6cf4f9126 47 }
bwang 232:47f6cf4f9126 48 else
bwang 232:47f6cf4f9126 49 {
bwang 232:47f6cf4f9126 50 pc->printf("Set mode to %s\n", mode_to_str(n));
bwang 232:47f6cf4f9126 51 }
bwang 181:d3510c8beab6 52 }
bwang 181:d3510c8beab6 53
bwang 181:d3510c8beab6 54 void cmd_src(Serial *pc, char *buf) {
bwang 200:4999d5e6c63d 55 if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) {
bwang 200:4999d5e6c63d 56 pc->printf("%s\n", "Turn off motor first");
bwang 200:4999d5e6c63d 57 return;
bwang 200:4999d5e6c63d 58 }
bwang 181:d3510c8beab6 59 int n = str_to_src(buf);
bwang 181:d3510c8beab6 60 if (n < 0) {
bwang 181:d3510c8beab6 61 pc->printf("%s\n", "Invalid Source");
bwang 181:d3510c8beab6 62 return;
bwang 181:d3510c8beab6 63 }
bwang 181:d3510c8beab6 64 BREMS_src = n;
bwang 181:d3510c8beab6 65 pc->printf("Set source to %s\n", src_to_str(n));
bwang 181:d3510c8beab6 66 }
bwang 181:d3510c8beab6 67
bwang 181:d3510c8beab6 68 void cmd_op(Serial *pc, char *buf) {
bwang 200:4999d5e6c63d 69 if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) {
bwang 200:4999d5e6c63d 70 pc->printf("%s\n", "Turn off motor first");
bwang 200:4999d5e6c63d 71 return;
bwang 200:4999d5e6c63d 72 }
bwang 181:d3510c8beab6 73 int n = str_to_op(buf);
bwang 181:d3510c8beab6 74 if (n < 0) {
bwang 181:d3510c8beab6 75 pc->printf("%s\n", "Invalid Source");
bwang 181:d3510c8beab6 76 return;
bwang 181:d3510c8beab6 77 }
bwang 181:d3510c8beab6 78 BREMS_op = n;
bwang 181:d3510c8beab6 79 pc->printf("Set operation to %s\n", op_to_str(n));
bwang 181:d3510c8beab6 80 }
bwang 181:d3510c8beab6 81
bwang 181:d3510c8beab6 82 void cmd_exit(Serial *pc) {
bwang 205:5cfe6d7e08a3 83 if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) {
bwang 205:5cfe6d7e08a3 84 pc->printf("%s\n", "Turn off motor first");
bwang 205:5cfe6d7e08a3 85 return;
bwang 205:5cfe6d7e08a3 86 }
bwang 181:d3510c8beab6 87 BREMS_mode = MODE_RUN;
bwang 181:d3510c8beab6 88 pc->printf("%s\n", "Run mode ON");
bwang 181:d3510c8beab6 89 }