Carbon Fibre / Mbed 2 deprecated Motor_test_harness

Dependencies:   Classic_PID iC_MU mbed-rtos mbed

Committer:
acodd
Date:
Thu Jun 25 09:41:26 2015 +0000
Revision:
4:4dafa4113982
Parent:
3:f8a5c1cee1fa
Test Harness for a single axis

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ms523 0:7ce0bc67f60f 1 #include "mbed.h"
ms523 0:7ce0bc67f60f 2 #include "iC_MU.h"
ms523 0:7ce0bc67f60f 3 #include "rtos.h"
ms523 0:7ce0bc67f60f 4 #include "Classic_PID.h"
ms523 0:7ce0bc67f60f 5
ms523 0:7ce0bc67f60f 6 extern Serial pc;
ms523 0:7ce0bc67f60f 7 extern Classic_PID PanVelocityPID;
ms523 0:7ce0bc67f60f 8 extern Classic_PID TiltVelocityPID;
acodd 2:dc684c402296 9 void Profile(void);
acodd 2:dc684c402296 10 extern float Demand_Count_Rate;
ms523 0:7ce0bc67f60f 11
ms523 0:7ce0bc67f60f 12 extern bool joystick;
acodd 2:dc684c402296 13 extern bool scoping;
acodd 2:dc684c402296 14
acodd 2:dc684c402296 15 extern float fade_tilt;
acodd 2:dc684c402296 16 extern float fade_time;
acodd 2:dc684c402296 17 extern float D;
acodd 4:4dafa4113982 18 extern float T;
acodd 4:4dafa4113982 19 extern float ts;
acodd 2:dc684c402296 20 extern int DoMove;
acodd 2:dc684c402296 21 extern float T_Position;
acodd 2:dc684c402296 22 extern float T_Kp;
acodd 2:dc684c402296 23 extern float Vff;
acodd 2:dc684c402296 24 float setting;
acodd 2:dc684c402296 25 extern float Time;
acodd 2:dc684c402296 26
acodd 2:dc684c402296 27 extern float Joy_Zoom;
ms523 0:7ce0bc67f60f 28
acodd 4:4dafa4113982 29 extern double drive;
acodd 4:4dafa4113982 30
ms523 0:7ce0bc67f60f 31 // Returns the new set point entered via the keyboard
ms523 0:7ce0bc67f60f 32 int ServiceKeyboard ()
ms523 0:7ce0bc67f60f 33 {
ms523 0:7ce0bc67f60f 34 int key; // The keypress by the user
ms523 0:7ce0bc67f60f 35 int value = 0; // The variable to return
ms523 0:7ce0bc67f60f 36
ms523 0:7ce0bc67f60f 37 key = pc.getc(); // Read the intial keypress
ms523 0:7ce0bc67f60f 38
acodd 2:dc684c402296 39 switch (key) {
acodd 2:dc684c402296 40 // List keypresses used:
acodd 2:dc684c402296 41 case 'q':
acodd 2:dc684c402296 42 pc.printf("\n\r Toggle joystick = j \n\r Scope = s \n\r Fade = f \n\r Stop = c \n\r Set POS gains k, v, \n\r Set Vel Vff, kp: l, m \n\r Set fade time: t \n\r Save Shot = 1");
acodd 4:4dafa4113982 43 pc.printf("\n\r Zoom Value (1-10) = z \n\r Drive const speed = d");
acodd 2:dc684c402296 44 break;
acodd 2:dc684c402296 45 // Save a shot position:
acodd 2:dc684c402296 46 case '1':
acodd 2:dc684c402296 47
acodd 2:dc684c402296 48 fade_tilt = T_Position;
acodd 2:dc684c402296 49 pc.printf("\n\r Saving this postion as %f", fade_tilt);
acodd 2:dc684c402296 50 break;
acodd 2:dc684c402296 51 // Switch Joystick Mode on and off
acodd 2:dc684c402296 52 case 'j':
acodd 2:dc684c402296 53 joystick = !joystick;
acodd 2:dc684c402296 54 if(joystick) {
acodd 2:dc684c402296 55 pc.printf("\n\r Under Joystick Control");
acodd 2:dc684c402296 56 } else {
acodd 2:dc684c402296 57 // Stop both axes
acodd 2:dc684c402296 58 //PanVelocityPID.setSetPoint(0);
acodd 2:dc684c402296 59 //TiltVelocityPID.setSetPoint(0);
acodd 3:f8a5c1cee1fa 60 pc.printf("\n\r Under Full Profiler Control");
acodd 2:dc684c402296 61 pc.printf("\n\r");
ms523 0:7ce0bc67f60f 62 }
acodd 2:dc684c402296 63 break;
acodd 2:dc684c402296 64 // Turn on Scope Tool:
acodd 2:dc684c402296 65 case 's':
acodd 2:dc684c402296 66 if (!scoping) {
acodd 2:dc684c402296 67 Time = 0;
acodd 4:4dafa4113982 68 pc.printf("\n\r Time, Tilt_JoyStickDem, P_Error, T_Position, P, Motor_Speed, Demand_Speed");
acodd 4:4dafa4113982 69
acodd 4:4dafa4113982 70 scoping = true;
acodd 2:dc684c402296 71 } else {
acodd 2:dc684c402296 72 scoping = false;
acodd 2:dc684c402296 73 }
acodd 2:dc684c402296 74
acodd 2:dc684c402296 75 break;
acodd 2:dc684c402296 76 // Calling A Fade:
acodd 2:dc684c402296 77 case 'f':
acodd 2:dc684c402296 78 if (DoMove == 0) {
acodd 4:4dafa4113982 79 //fade_time = 15;
acodd 2:dc684c402296 80 Profile();
acodd 4:4dafa4113982 81 pc.printf("\n\r Fade Distance: %f", D);
acodd 4:4dafa4113982 82 pc.printf("\n\r Fade Time = %f, Ramp segment = %f",T, ts);
acodd 2:dc684c402296 83 DoMove = 1;
acodd 2:dc684c402296 84 }
acodd 2:dc684c402296 85 break;
acodd 2:dc684c402296 86 // We are going to set the fade time...
acodd 2:dc684c402296 87 case 't':
acodd 2:dc684c402296 88 pc.printf("\n\r New Fade Time: ");
acodd 2:dc684c402296 89 key = pc.getc();
ms523 0:7ce0bc67f60f 90 do {
ms523 0:7ce0bc67f60f 91 key = pc.getc(); // Wait for a keypress
ms523 0:7ce0bc67f60f 92 if(key >= '0' && key <= '9') { // Check it is a number
ms523 0:7ce0bc67f60f 93 value *= 10; // Index the old number
ms523 0:7ce0bc67f60f 94 value += (key - '0'); // Add on the new number
ms523 0:7ce0bc67f60f 95 pc.printf("%c",key); // Display the new number
ms523 0:7ce0bc67f60f 96 }
ms523 0:7ce0bc67f60f 97 } while(key != 0x0D);
acodd 2:dc684c402296 98 setting = value;
acodd 2:dc684c402296 99 fade_time = (setting);
acodd 2:dc684c402296 100 pc.printf("\n\r");
acodd 2:dc684c402296 101 break;
acodd 2:dc684c402296 102 // Stop a fade
acodd 2:dc684c402296 103 case 'c':
acodd 2:dc684c402296 104 if (DoMove == 1) {
acodd 2:dc684c402296 105 pc.printf("\n\r Fade Stop");
acodd 2:dc684c402296 106 DoMove = 0;
acodd 2:dc684c402296 107 //TiltVelocityPID.setSetPoint(0);
acodd 2:dc684c402296 108 }
acodd 2:dc684c402296 109 break;
acodd 2:dc684c402296 110 // Set Tilt Kp
acodd 2:dc684c402296 111 case 'k':
acodd 2:dc684c402296 112 pc.printf("\n\r New Tilt Pos Kp (Multiply by 100): ");
acodd 2:dc684c402296 113 key = pc.getc();
acodd 2:dc684c402296 114 do {
acodd 2:dc684c402296 115 key = pc.getc(); // Wait for a keypress
acodd 2:dc684c402296 116 if(key >= '0' && key <= '9') { // Check it is a number
acodd 2:dc684c402296 117 value *= 10; // Index the old number
acodd 2:dc684c402296 118 value += (key - '0'); // Add on the new number
acodd 2:dc684c402296 119 pc.printf("%c",key); // Display the new number
ms523 0:7ce0bc67f60f 120 }
acodd 2:dc684c402296 121 } while(key != 0x0D);
acodd 2:dc684c402296 122 setting = value;
acodd 2:dc684c402296 123 T_Kp = (setting/100);
acodd 2:dc684c402296 124 //TiltVelocityPID.setKp(value);
acodd 2:dc684c402296 125 pc.printf("\n\r");
acodd 2:dc684c402296 126 break;
acodd 2:dc684c402296 127 // We are going to set Pos Feedforward gain for tilt...
acodd 2:dc684c402296 128 case 'v':
acodd 2:dc684c402296 129 pc.printf("\n\r New Tilt Pos Vff (Multiply by 100): ");
acodd 2:dc684c402296 130 key = pc.getc();
ms523 0:7ce0bc67f60f 131 do {
ms523 0:7ce0bc67f60f 132 key = pc.getc(); // Wait for a keypress
ms523 0:7ce0bc67f60f 133 if(key >= '0' && key <= '9') { // Check it is a number
ms523 0:7ce0bc67f60f 134 value *= 10; // Index the old number
ms523 0:7ce0bc67f60f 135 value += (key - '0'); // Add on the new number
ms523 0:7ce0bc67f60f 136 pc.printf("%c",key); // Display the new number
ms523 0:7ce0bc67f60f 137 }
ms523 0:7ce0bc67f60f 138 } while(key != 0x0D);
acodd 2:dc684c402296 139 setting = value;
acodd 2:dc684c402296 140 Vff = (setting/100);
acodd 2:dc684c402296 141 pc.printf("\n\r");
acodd 2:dc684c402296 142 break;
acodd 2:dc684c402296 143 // We are going to set Kvelff gain for tilt...
acodd 2:dc684c402296 144 case 'l':
acodd 2:dc684c402296 145 pc.printf("\n\r New Tilt Velocity Vff (Multiply by 100): ");
acodd 2:dc684c402296 146 key = pc.getc();
acodd 2:dc684c402296 147 do {
acodd 2:dc684c402296 148 key = pc.getc(); // Wait for a keypress
acodd 2:dc684c402296 149 if(key >= '0' && key <= '9') { // Check it is a number
acodd 2:dc684c402296 150 value *= 10; // Index the old number
acodd 2:dc684c402296 151 value += (key - '0'); // Add on the new number
acodd 2:dc684c402296 152 pc.printf("%c",key); // Display the new number
acodd 2:dc684c402296 153 }
acodd 2:dc684c402296 154 } while(key != 0x0D);
acodd 2:dc684c402296 155 setting = value;
acodd 2:dc684c402296 156 TiltVelocityPID.setKvelff(setting/100);
acodd 2:dc684c402296 157 pc.printf("\n\r");
acodd 2:dc684c402296 158 break;
acodd 2:dc684c402296 159 // Set Tilt Velocity Kp
acodd 2:dc684c402296 160 case 'm':
acodd 2:dc684c402296 161 pc.printf("\n\r New Tilt Velocity Kp (Multiply by 100): ");
acodd 2:dc684c402296 162 key = pc.getc();
acodd 2:dc684c402296 163 do {
acodd 2:dc684c402296 164 key = pc.getc(); // Wait for a keypress
acodd 2:dc684c402296 165 if(key >= '0' && key <= '9') { // Check it is a number
acodd 2:dc684c402296 166 value *= 10; // Index the old number
acodd 2:dc684c402296 167 value += (key - '0'); // Add on the new number
acodd 2:dc684c402296 168 pc.printf("%c",key); // Display the new number
acodd 2:dc684c402296 169 }
acodd 2:dc684c402296 170 } while(key != 0x0D);
acodd 2:dc684c402296 171 setting = value;
acodd 2:dc684c402296 172 TiltVelocityPID.setKp(setting/100);
acodd 2:dc684c402296 173 pc.printf("\n\r");
acodd 2:dc684c402296 174 break;
acodd 2:dc684c402296 175 // Set Zoom level for Zoom proportional
acodd 2:dc684c402296 176 case 'z':
acodd 2:dc684c402296 177 pc.printf("\n\r Set Zoom Scalar Low 1-9 High): ");
acodd 2:dc684c402296 178 key = pc.getc();
acodd 2:dc684c402296 179 do {
acodd 2:dc684c402296 180 key = pc.getc(); // Wait for a keypress
acodd 2:dc684c402296 181 if(key >= '0' && key <= '9') { // Check it is a number
acodd 2:dc684c402296 182 value *= 10; // Index the old number
acodd 2:dc684c402296 183 value += (key - '0'); // Add on the new number
acodd 2:dc684c402296 184 pc.printf("%c",key); // Display the new number
acodd 2:dc684c402296 185 }
acodd 2:dc684c402296 186 } while(key != 0x0D);
acodd 2:dc684c402296 187 setting = value;
acodd 2:dc684c402296 188 Joy_Zoom = (setting);
acodd 2:dc684c402296 189 pc.printf("\n\r");
acodd 2:dc684c402296 190 break;
acodd 4:4dafa4113982 191 // We are going to set Pos Feedforward gain for tilt...
acodd 4:4dafa4113982 192 case 'd':
acodd 4:4dafa4113982 193 pc.printf("\n\r Drive const speed (Multiply by 100): ");
acodd 4:4dafa4113982 194 key = pc.getc();
acodd 4:4dafa4113982 195 do {
acodd 4:4dafa4113982 196 key = pc.getc(); // Wait for a keypress
acodd 4:4dafa4113982 197 if(key >= '0' && key <= '9') { // Check it is a number
acodd 4:4dafa4113982 198 value *= 10; // Index the old number
acodd 4:4dafa4113982 199 value += (key - '0'); // Add on the new number
acodd 4:4dafa4113982 200 pc.printf("%c",key); // Display the new number
acodd 4:4dafa4113982 201 }
acodd 4:4dafa4113982 202 } while(key != 0x0D);
acodd 4:4dafa4113982 203 setting = value;
acodd 4:4dafa4113982 204 drive = setting;
acodd 4:4dafa4113982 205 pc.printf("\n\r New Speed is = %f", (drive/100));
acodd 4:4dafa4113982 206 break;
ms523 0:7ce0bc67f60f 207 }
ms523 0:7ce0bc67f60f 208 return(1);
acodd 2:dc684c402296 209 }
acodd 2:dc684c402296 210
acodd 2:dc684c402296 211
acodd 2:dc684c402296 212
acodd 2:dc684c402296 213
acodd 3:f8a5c1cee1fa 214
acodd 4:4dafa4113982 215