baseline build

Dependencies:   FastPWM mbed-os mbed

Committer:
jrhodes5150
Date:
Mon Jun 19 16:04:47 2017 +0000
Revision:
1:909f2393bc01
Parent:
0:8a420ac6394e
added fastPWM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jrhodes5150 0:8a420ac6394e 1
jrhodes5150 0:8a420ac6394e 2 #include "CMSerial.h"
jrhodes5150 0:8a420ac6394e 3 #include "DeviceProperties.h"
jrhodes5150 0:8a420ac6394e 4
jrhodes5150 0:8a420ac6394e 5 const char VERSION_STRING[] = "0.6";
jrhodes5150 0:8a420ac6394e 6
jrhodes5150 0:8a420ac6394e 7
jrhodes5150 0:8a420ac6394e 8 CMSerial::CMSerial(void) : led(LED2), serial(p13, p14)
jrhodes5150 0:8a420ac6394e 9 {
jrhodes5150 0:8a420ac6394e 10 lineLength = 0;
jrhodes5150 0:8a420ac6394e 11 serial.baud(115200);
jrhodes5150 0:8a420ac6394e 12 threadSerial.start(this, &CMSerial::ThreadEntry);
jrhodes5150 0:8a420ac6394e 13 }
jrhodes5150 0:8a420ac6394e 14
jrhodes5150 0:8a420ac6394e 15 void CMSerial::ThreadEntry(void)
jrhodes5150 0:8a420ac6394e 16 {
jrhodes5150 0:8a420ac6394e 17 while(true)
jrhodes5150 0:8a420ac6394e 18 {
jrhodes5150 0:8a420ac6394e 19 char c = serial.getc();
jrhodes5150 0:8a420ac6394e 20 led = !led;
jrhodes5150 0:8a420ac6394e 21 if( c == '\n' )
jrhodes5150 0:8a420ac6394e 22 continue;
jrhodes5150 0:8a420ac6394e 23 if (c == '\r')
jrhodes5150 0:8a420ac6394e 24 {
jrhodes5150 0:8a420ac6394e 25 line[lineLength] = 0;
jrhodes5150 0:8a420ac6394e 26 ProcessCommand();
jrhodes5150 0:8a420ac6394e 27 lineLength = 0;
jrhodes5150 0:8a420ac6394e 28 continue;
jrhodes5150 0:8a420ac6394e 29 }
jrhodes5150 0:8a420ac6394e 30 if (lineLength < sizeof(line) - 1)
jrhodes5150 0:8a420ac6394e 31 line[lineLength++] = c;
jrhodes5150 0:8a420ac6394e 32 }
jrhodes5150 0:8a420ac6394e 33 }
jrhodes5150 0:8a420ac6394e 34
jrhodes5150 0:8a420ac6394e 35 void CMSerial::ProcessCommand(void)
jrhodes5150 0:8a420ac6394e 36 {
jrhodes5150 0:8a420ac6394e 37
jrhodes5150 0:8a420ac6394e 38 if (CommandIs("status"))
jrhodes5150 0:8a420ac6394e 39 {
jrhodes5150 0:8a420ac6394e 40 serial.printf("<status");
jrhodes5150 0:8a420ac6394e 41 serial.printf(" version=\"%s\"", VERSION_STRING);
jrhodes5150 0:8a420ac6394e 42 serial.printf(" AcquisitionNumber=\"%d\"", Device.GetAcquisitionNumber());
jrhodes5150 0:8a420ac6394e 43 serial.printf(" AcquisitionSamples=\"%d\"", Device.GetAcquisitionSampleCount());
jrhodes5150 0:8a420ac6394e 44 // Control Parameters
jrhodes5150 0:8a420ac6394e 45 serial.printf(" OutputMode=\"%d\"", (int)Device.deviceConfig.outputMode);
jrhodes5150 0:8a420ac6394e 46 serial.printf(" ConstantVoltage=\"%f\"", Device.deviceConfig.constantVoltage);
jrhodes5150 0:8a420ac6394e 47 serial.printf(" ConstantPower=\"%f\"", Device.deviceConfig.constantPower);
jrhodes5150 0:8a420ac6394e 48 serial.printf(" KP=\"%lf\"", Device.deviceConfig.kp);
jrhodes5150 0:8a420ac6394e 49 serial.printf(" KI=\"%lf\"", Device.deviceConfig.ki);
jrhodes5150 0:8a420ac6394e 50 serial.printf(" KD=\"%lf\"", Device.deviceConfig.kd);
jrhodes5150 0:8a420ac6394e 51 serial.printf(" VoltageCal=\"%lf\"", Device.deviceConfig.voltageCal);
jrhodes5150 0:8a420ac6394e 52 serial.printf(" CurrentCal=\"%lf\"", Device.deviceConfig.currentCal);
jrhodes5150 0:8a420ac6394e 53 serial.printf(" vLim=\"%lf\"", Device.deviceConfig.vLim);
jrhodes5150 0:8a420ac6394e 54 serial.printf(" iLim=\"%lf\"", Device.deviceConfig.iLim);
jrhodes5150 0:8a420ac6394e 55 // Activation Parameters
jrhodes5150 0:8a420ac6394e 56 serial.printf(" PwmFrequency=\"%lf\"", Device.GetActualPWMFrequency());
jrhodes5150 0:8a420ac6394e 57 serial.printf(" OpenLoopDuration=\"%d\"", Device.deviceConfig.msOpenLoopDuration);
jrhodes5150 0:8a420ac6394e 58 serial.printf(" TotalDuration=\"%lf\"", Device.deviceConfig.TotalDurationSeconds);
jrhodes5150 0:8a420ac6394e 59 serial.printf(" RampDuration=\"%lf\"", Device.deviceConfig.msRampDuration);
jrhodes5150 0:8a420ac6394e 60 serial.printf(" RampStartPower=\"%lf\"", Device.deviceConfig.rampStartPower);
jrhodes5150 0:8a420ac6394e 61 serial.printf(" RampEndPower=\"%lf\"", Device.deviceConfig.rampEndPower);
jrhodes5150 0:8a420ac6394e 62 serial.printf(" StartVoltage=\"%lf\"", Device.deviceConfig.startVoltage);
jrhodes5150 0:8a420ac6394e 63 serial.printf(" SamplePeriod=\"%d\"", Device.deviceConfig.msSamplePeriod);
jrhodes5150 0:8a420ac6394e 64 serial.printf("/>\r\n");
jrhodes5150 0:8a420ac6394e 65 return;
jrhodes5150 0:8a420ac6394e 66 }
jrhodes5150 0:8a420ac6394e 67
jrhodes5150 0:8a420ac6394e 68 if( CommandIs("GetSample"))
jrhodes5150 0:8a420ac6394e 69 {
jrhodes5150 0:8a420ac6394e 70 int acquisition = (int)GetNumericArgument(1, 0);
jrhodes5150 0:8a420ac6394e 71 int sample = (int)GetNumericArgument(2, 0);
jrhodes5150 0:8a420ac6394e 72 AcquisitionData sampleData = Device.GetAcquisitionSample(acquisition, sample);
jrhodes5150 0:8a420ac6394e 73 serial.printf("<sample");
jrhodes5150 0:8a420ac6394e 74 serial.printf(" Time=\"%f\"", sampleData.timestampMilliseconds);
jrhodes5150 0:8a420ac6394e 75 serial.printf(" TargetVoltage=\"%f\"", Device.deviceConfig.constantVoltage);
jrhodes5150 0:8a420ac6394e 76 serial.printf(" Isns=\"%f\"", sampleData.iSense);
jrhodes5150 0:8a420ac6394e 77 serial.printf(" Vsns=\"%f\"", sampleData.vSense);
jrhodes5150 0:8a420ac6394e 78 serial.printf(" Irms=\"%f\"", sampleData.iRMS);
jrhodes5150 0:8a420ac6394e 79 serial.printf(" Vrms=\"%f\"", sampleData.vRMS);
jrhodes5150 0:8a420ac6394e 80 serial.printf("/>\r\n");
jrhodes5150 0:8a420ac6394e 81 return;
jrhodes5150 0:8a420ac6394e 82 }
jrhodes5150 0:8a420ac6394e 83
jrhodes5150 0:8a420ac6394e 84 if (CommandIs("version"))
jrhodes5150 0:8a420ac6394e 85 {
jrhodes5150 0:8a420ac6394e 86 serial.printf("%s\r\n", VERSION_STRING);
jrhodes5150 0:8a420ac6394e 87 return;
jrhodes5150 0:8a420ac6394e 88 }
jrhodes5150 0:8a420ac6394e 89
jrhodes5150 0:8a420ac6394e 90 if( CommandIs("OutputMode"))
jrhodes5150 0:8a420ac6394e 91 {
jrhodes5150 0:8a420ac6394e 92 Device.deviceConfig.outputMode = (OutputMode) (int)GetNumericArgument(1, (int)Device.deviceConfig.outputMode);
jrhodes5150 0:8a420ac6394e 93 serial.printf("%d\r\n", Device.deviceConfig.outputMode);
jrhodes5150 0:8a420ac6394e 94 return;
jrhodes5150 0:8a420ac6394e 95 }
jrhodes5150 0:8a420ac6394e 96
jrhodes5150 0:8a420ac6394e 97 if( CommandIs("ConstantVoltage"))
jrhodes5150 0:8a420ac6394e 98 {
jrhodes5150 0:8a420ac6394e 99 Device.deviceConfig.constantVoltage = GetNumericArgument(1, Device.deviceConfig.constantVoltage);
jrhodes5150 0:8a420ac6394e 100 serial.printf("%lf\r\n", Device.deviceConfig.constantVoltage);
jrhodes5150 0:8a420ac6394e 101 return;
jrhodes5150 0:8a420ac6394e 102 }
jrhodes5150 0:8a420ac6394e 103
jrhodes5150 0:8a420ac6394e 104 if( CommandIs("ConstantPower"))
jrhodes5150 0:8a420ac6394e 105 {
jrhodes5150 0:8a420ac6394e 106 Device.deviceConfig.constantPower = GetNumericArgument(1, Device.deviceConfig.constantPower);
jrhodes5150 0:8a420ac6394e 107 serial.printf("%lf\r\n", Device.deviceConfig.constantPower);
jrhodes5150 0:8a420ac6394e 108 return;
jrhodes5150 0:8a420ac6394e 109 }
jrhodes5150 0:8a420ac6394e 110
jrhodes5150 0:8a420ac6394e 111 if( CommandIs("KP"))
jrhodes5150 0:8a420ac6394e 112 {
jrhodes5150 0:8a420ac6394e 113 Device.deviceConfig.kp = GetNumericArgument(1, Device.deviceConfig.kp);
jrhodes5150 0:8a420ac6394e 114 serial.printf("%lf\r\n", Device.deviceConfig.kp);
jrhodes5150 0:8a420ac6394e 115 return;
jrhodes5150 0:8a420ac6394e 116 }
jrhodes5150 0:8a420ac6394e 117
jrhodes5150 0:8a420ac6394e 118 if( CommandIs("KI"))
jrhodes5150 0:8a420ac6394e 119 {
jrhodes5150 0:8a420ac6394e 120 Device.deviceConfig.ki = GetNumericArgument(1, Device.deviceConfig.ki);
jrhodes5150 0:8a420ac6394e 121 serial.printf("%lf\r\n", Device.deviceConfig.ki);
jrhodes5150 0:8a420ac6394e 122 return;
jrhodes5150 0:8a420ac6394e 123 }
jrhodes5150 0:8a420ac6394e 124
jrhodes5150 0:8a420ac6394e 125 if( CommandIs("KD"))
jrhodes5150 0:8a420ac6394e 126 {
jrhodes5150 0:8a420ac6394e 127 Device.deviceConfig.kd = GetNumericArgument(1, Device.deviceConfig.kd);
jrhodes5150 0:8a420ac6394e 128 serial.printf("%lf\r\n", Device.deviceConfig.kd);
jrhodes5150 0:8a420ac6394e 129 return;
jrhodes5150 0:8a420ac6394e 130 }
jrhodes5150 0:8a420ac6394e 131
jrhodes5150 0:8a420ac6394e 132 if( CommandIs("VoltageCal"))
jrhodes5150 0:8a420ac6394e 133 {
jrhodes5150 0:8a420ac6394e 134 Device.deviceConfig.voltageCal = GetNumericArgument(1, Device.deviceConfig.voltageCal);
jrhodes5150 0:8a420ac6394e 135 serial.printf("%lf\r\n", Device.deviceConfig.voltageCal);
jrhodes5150 0:8a420ac6394e 136 return;
jrhodes5150 0:8a420ac6394e 137 }
jrhodes5150 0:8a420ac6394e 138
jrhodes5150 0:8a420ac6394e 139 if( CommandIs("CurrentCal"))
jrhodes5150 0:8a420ac6394e 140 {
jrhodes5150 0:8a420ac6394e 141 Device.deviceConfig.currentCal = GetNumericArgument(1, Device.deviceConfig.currentCal);
jrhodes5150 0:8a420ac6394e 142 serial.printf("%lf\r\n", Device.deviceConfig.currentCal);
jrhodes5150 0:8a420ac6394e 143 return;
jrhodes5150 0:8a420ac6394e 144 }
jrhodes5150 0:8a420ac6394e 145
jrhodes5150 0:8a420ac6394e 146 if( CommandIs("vLim"))
jrhodes5150 0:8a420ac6394e 147 {
jrhodes5150 0:8a420ac6394e 148 Device.deviceConfig.vLim = GetNumericArgument(1, Device.deviceConfig.vLim);
jrhodes5150 0:8a420ac6394e 149 serial.printf("%lf\r\n", Device.deviceConfig.vLim);
jrhodes5150 0:8a420ac6394e 150 return;
jrhodes5150 0:8a420ac6394e 151 }
jrhodes5150 0:8a420ac6394e 152
jrhodes5150 0:8a420ac6394e 153 if( CommandIs("iLim"))
jrhodes5150 0:8a420ac6394e 154 {
jrhodes5150 0:8a420ac6394e 155 Device.deviceConfig.iLim = GetNumericArgument(1, Device.deviceConfig.iLim);
jrhodes5150 0:8a420ac6394e 156 serial.printf("%lf\r\n", Device.deviceConfig.iLim);
jrhodes5150 0:8a420ac6394e 157 return;
jrhodes5150 0:8a420ac6394e 158 }
jrhodes5150 0:8a420ac6394e 159
jrhodes5150 0:8a420ac6394e 160 // Activation Parameters
jrhodes5150 0:8a420ac6394e 161 if( CommandIs("PwmFrequency"))
jrhodes5150 0:8a420ac6394e 162 {
jrhodes5150 0:8a420ac6394e 163 Device.deviceConfig.pwmFrequency = GetNumericArgument(1, Device.deviceConfig.pwmFrequency);
jrhodes5150 0:8a420ac6394e 164 serial.printf("%lf\r\n", Device.deviceConfig.pwmFrequency);
jrhodes5150 0:8a420ac6394e 165 return;
jrhodes5150 0:8a420ac6394e 166 }
jrhodes5150 0:8a420ac6394e 167
jrhodes5150 0:8a420ac6394e 168 if( CommandIs("OpenLoopDuration"))
jrhodes5150 0:8a420ac6394e 169 {
jrhodes5150 0:8a420ac6394e 170 Device.deviceConfig.msOpenLoopDuration = GetNumericArgument(1, Device.deviceConfig.msOpenLoopDuration);
jrhodes5150 0:8a420ac6394e 171 serial.printf("%lf\r\n", Device.deviceConfig.msOpenLoopDuration);
jrhodes5150 0:8a420ac6394e 172 return;
jrhodes5150 0:8a420ac6394e 173 }
jrhodes5150 0:8a420ac6394e 174
jrhodes5150 0:8a420ac6394e 175 if( CommandIs("TotalDuration"))
jrhodes5150 0:8a420ac6394e 176 {
jrhodes5150 0:8a420ac6394e 177 Device.deviceConfig.TotalDurationSeconds = GetNumericArgument(1, Device.deviceConfig.TotalDurationSeconds);
jrhodes5150 0:8a420ac6394e 178 serial.printf("%lf\r\n", Device.deviceConfig.TotalDurationSeconds);
jrhodes5150 0:8a420ac6394e 179 return;
jrhodes5150 0:8a420ac6394e 180 }
jrhodes5150 0:8a420ac6394e 181
jrhodes5150 0:8a420ac6394e 182 if( CommandIs("RampDuration"))
jrhodes5150 0:8a420ac6394e 183 {
jrhodes5150 0:8a420ac6394e 184 Device.deviceConfig.msRampDuration = GetNumericArgument(1, Device.deviceConfig.msRampDuration);
jrhodes5150 0:8a420ac6394e 185 serial.printf("%lf\r\n", Device.deviceConfig.msRampDuration);
jrhodes5150 0:8a420ac6394e 186 return;
jrhodes5150 0:8a420ac6394e 187 }
jrhodes5150 0:8a420ac6394e 188
jrhodes5150 0:8a420ac6394e 189 if( CommandIs("RampStartPower"))
jrhodes5150 0:8a420ac6394e 190 {
jrhodes5150 0:8a420ac6394e 191 Device.deviceConfig.rampStartPower = GetNumericArgument(1, Device.deviceConfig.rampStartPower);
jrhodes5150 0:8a420ac6394e 192 serial.printf("%lf\r\n", Device.deviceConfig.rampStartPower);
jrhodes5150 0:8a420ac6394e 193 return;
jrhodes5150 0:8a420ac6394e 194 }
jrhodes5150 0:8a420ac6394e 195
jrhodes5150 0:8a420ac6394e 196 if( CommandIs("RampEndPower"))
jrhodes5150 0:8a420ac6394e 197 {
jrhodes5150 0:8a420ac6394e 198 Device.deviceConfig.rampEndPower = GetNumericArgument(1, Device.deviceConfig.rampEndPower);
jrhodes5150 0:8a420ac6394e 199 serial.printf("%lf\r\n", Device.deviceConfig.rampEndPower);
jrhodes5150 0:8a420ac6394e 200 return;
jrhodes5150 0:8a420ac6394e 201 }
jrhodes5150 0:8a420ac6394e 202
jrhodes5150 0:8a420ac6394e 203 if( CommandIs("StartVoltage"))
jrhodes5150 0:8a420ac6394e 204 {
jrhodes5150 0:8a420ac6394e 205 Device.deviceConfig.startVoltage = GetNumericArgument(1, Device.deviceConfig.startVoltage);
jrhodes5150 0:8a420ac6394e 206 serial.printf("%lf\r\n", Device.deviceConfig.startVoltage);
jrhodes5150 0:8a420ac6394e 207 return;
jrhodes5150 0:8a420ac6394e 208 }
jrhodes5150 0:8a420ac6394e 209
jrhodes5150 0:8a420ac6394e 210 if( CommandIs("SamplePeriod"))
jrhodes5150 0:8a420ac6394e 211 {
jrhodes5150 0:8a420ac6394e 212 Device.deviceConfig.msSamplePeriod = GetNumericArgument(1, Device.deviceConfig.msSamplePeriod);
jrhodes5150 0:8a420ac6394e 213 serial.printf("%lf\r\n", Device.deviceConfig.msSamplePeriod);
jrhodes5150 0:8a420ac6394e 214 return;
jrhodes5150 0:8a420ac6394e 215 }
jrhodes5150 0:8a420ac6394e 216
jrhodes5150 0:8a420ac6394e 217 serial.printf("Unrecognized command: %s\r\n", line);
jrhodes5150 0:8a420ac6394e 218 }
jrhodes5150 0:8a420ac6394e 219
jrhodes5150 0:8a420ac6394e 220 bool CMSerial::CommandIs(const char *command)
jrhodes5150 0:8a420ac6394e 221 {
jrhodes5150 0:8a420ac6394e 222 int length = strlen(command);
jrhodes5150 0:8a420ac6394e 223 if (strncmp(command, line, length) != 0)
jrhodes5150 0:8a420ac6394e 224 return false;
jrhodes5150 0:8a420ac6394e 225 if (line[length]!=0 && line[length]!=' ')
jrhodes5150 0:8a420ac6394e 226 return false;
jrhodes5150 0:8a420ac6394e 227 return true;
jrhodes5150 0:8a420ac6394e 228 }
jrhodes5150 0:8a420ac6394e 229
jrhodes5150 0:8a420ac6394e 230 double CMSerial::GetNumericArgument(int index, double defaultValue)
jrhodes5150 0:8a420ac6394e 231 {
jrhodes5150 0:8a420ac6394e 232 // for the moment we just require that arguments be separated by a single space
jrhodes5150 0:8a420ac6394e 233 const char *start = line;
jrhodes5150 0:8a420ac6394e 234 for (int i=0; i<index; ++i)
jrhodes5150 0:8a420ac6394e 235 {
jrhodes5150 0:8a420ac6394e 236 start = strchr(start, ' ');
jrhodes5150 0:8a420ac6394e 237 if (start == NULL)
jrhodes5150 0:8a420ac6394e 238 return defaultValue;
jrhodes5150 0:8a420ac6394e 239 ++start;
jrhodes5150 0:8a420ac6394e 240 }
jrhodes5150 0:8a420ac6394e 241
jrhodes5150 0:8a420ac6394e 242 double result;
jrhodes5150 0:8a420ac6394e 243 if (1 != sscanf(start, "%lf", &result))
jrhodes5150 0:8a420ac6394e 244 return defaultValue;
jrhodes5150 0:8a420ac6394e 245 return result;
jrhodes5150 0:8a420ac6394e 246 }
jrhodes5150 0:8a420ac6394e 247