Carbon Fibre / Mbed 2 deprecated Motor_test_harness

Dependencies:   Classic_PID iC_MU mbed-rtos mbed

Committer:
acodd
Date:
Wed May 27 07:13:54 2015 +0000
Revision:
2:dc684c402296
Parent:
1:1ad84260ff59
Child:
3:f8a5c1cee1fa
First version of a full control loop for the T3 head
;

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