Kalibriersoftware Stromwerte

Dependencies:   Matrix mbed

Committer:
Racer01014
Date:
Sat Nov 28 13:50:31 2015 +0000
Revision:
1:ea5f520dcdc1
Parent:
0:5e35c180ed4a
-

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Racer01014 0:5e35c180ed4a 1 #include "mbed.h"
Racer01014 0:5e35c180ed4a 2 #include "Matrix.h"
Racer01014 0:5e35c180ed4a 3 #include "USBSerial.h"
Racer01014 1:ea5f520dcdc1 4 #include "Ticker.h"
Racer01014 1:ea5f520dcdc1 5
Racer01014 1:ea5f520dcdc1 6 //************************************* DEFINES *****************************************************
Racer01014 1:ea5f520dcdc1 7
Racer01014 1:ea5f520dcdc1 8 #define PI 3.1415926
Racer01014 1:ea5f520dcdc1 9 #define Gravity 9.81
Racer01014 1:ea5f520dcdc1 10
Racer01014 1:ea5f520dcdc1 11 //***************************************************************************************************
Racer01014 1:ea5f520dcdc1 12 //Current_Factors ------- Calibrated in A (Ampere)
Racer01014 1:ea5f520dcdc1 13
Racer01014 1:ea5f520dcdc1 14 #define Mot_curr_fac 0.00039021 // Factor for calculation
Racer01014 1:ea5f520dcdc1 15 #define Mot_curr_off 10034.87 // Offset
Racer01014 1:ea5f520dcdc1 16
Racer01014 1:ea5f520dcdc1 17 #define Bra_curr_fac 0.00028048
Racer01014 1:ea5f520dcdc1 18 #define Bra_curr_off 49481.61 // Offset
Racer01014 1:ea5f520dcdc1 19
Racer01014 1:ea5f520dcdc1 20 //***************************************************************************************************
Racer01014 1:ea5f520dcdc1 21 //Voltage_Factors ------- Calibrated in V (Volt)
Racer01014 1:ea5f520dcdc1 22
Racer01014 1:ea5f520dcdc1 23 #define Mot_volt_fac 0.00050860 // Factor for calculation
Racer01014 1:ea5f520dcdc1 24 #define Mot_volt_off 25.80 // Offset
Racer01014 1:ea5f520dcdc1 25
Racer01014 1:ea5f520dcdc1 26 #define Bra_volt_fac 0.00051015 // Factor for calculation
Racer01014 1:ea5f520dcdc1 27 #define Bra_volt_off 33.63 // Offset
Racer01014 1:ea5f520dcdc1 28
Racer01014 1:ea5f520dcdc1 29 //***************************************************************************************************
Racer01014 1:ea5f520dcdc1 30 //DMS_Factors ------- Calibrated in g (Gramm)
Racer01014 1:ea5f520dcdc1 31
Racer01014 1:ea5f520dcdc1 32 #define DMS_fac 0.019467 // Factor for calculation, gives back gramms
Racer01014 1:ea5f520dcdc1 33 #define DMS_off 1629.33 // Offset
Racer01014 1:ea5f520dcdc1 34
Racer01014 1:ea5f520dcdc1 35 //*******LEVER********
Racer01014 1:ea5f520dcdc1 36 #define Lever 0.05 // Length of lever
Racer01014 0:5e35c180ed4a 37
Racer01014 0:5e35c180ed4a 38 //***************************************************************************************************
Racer01014 0:5e35c180ed4a 39 //Outputs
Racer01014 0:5e35c180ed4a 40
Racer01014 0:5e35c180ed4a 41 DigitalOut Multiplex_select_A (p26);
Racer01014 0:5e35c180ed4a 42 DigitalOut Multiplex_select_B (p25);
Racer01014 1:ea5f520dcdc1 43 DigitalOut File(LED1);
Racer01014 0:5e35c180ed4a 44
Racer01014 0:5e35c180ed4a 45 //***************************************************************************************************
Racer01014 0:5e35c180ed4a 46 //Inputs
Racer01014 0:5e35c180ed4a 47
Racer01014 0:5e35c180ed4a 48 AnalogIn Messkanal_X (p15);
Racer01014 0:5e35c180ed4a 49 AnalogIn Messkanal_Y (p16);
Racer01014 1:ea5f520dcdc1 50 AnalogIn Messkanal_DMS (p17);
Racer01014 1:ea5f520dcdc1 51
Racer01014 1:ea5f520dcdc1 52 //***************************************************************************************************
Racer01014 1:ea5f520dcdc1 53 //Interrupts
Racer01014 0:5e35c180ed4a 54
Racer01014 1:ea5f520dcdc1 55 InterruptIn Lichtschranke(p29);
Racer01014 1:ea5f520dcdc1 56
Racer01014 1:ea5f520dcdc1 57 //***************************************************************************************************
Racer01014 1:ea5f520dcdc1 58 //Ticker
Racer01014 1:ea5f520dcdc1 59
Racer01014 1:ea5f520dcdc1 60 Ticker Puls;
Racer01014 0:5e35c180ed4a 61
Racer01014 0:5e35c180ed4a 62 //***************************************************************************************************
Racer01014 0:5e35c180ed4a 63 //PWM
Racer01014 0:5e35c180ed4a 64
Racer01014 0:5e35c180ed4a 65 PwmOut Motor(p23);
Racer01014 0:5e35c180ed4a 66 PwmOut Bremse(p21);
Racer01014 0:5e35c180ed4a 67
Racer01014 0:5e35c180ed4a 68 //***************************************************************************************************
Racer01014 0:5e35c180ed4a 69 //Communication
Racer01014 0:5e35c180ed4a 70
Racer01014 0:5e35c180ed4a 71 Serial pc(USBTX, USBRX);
Racer01014 0:5e35c180ed4a 72
Racer01014 1:ea5f520dcdc1 73 //***************************************************************************************************
Racer01014 1:ea5f520dcdc1 74 //File System
Racer01014 1:ea5f520dcdc1 75
Racer01014 1:ea5f520dcdc1 76 LocalFileSystem local("local");
Racer01014 1:ea5f520dcdc1 77
Racer01014 1:ea5f520dcdc1 78 //***************************************************************************************************
Racer01014 1:ea5f520dcdc1 79 //Variablen
Racer01014 0:5e35c180ed4a 80
Racer01014 0:5e35c180ed4a 81
Racer01014 1:ea5f520dcdc1 82 volatile float rps_old, rps, time_passed, Motorspannung, Bremsenspannung , Motorstrom, An_In_0, Bremsenstrom, Temperatur_0, Temperatur_1, Temperatur_2, DMS_Out;
Racer01014 1:ea5f520dcdc1 83 volatile float P_Mech[2000], P_Elec[2000], PE, PM, eta;
Racer01014 1:ea5f520dcdc1 84 float counter = 0;
Racer01014 0:5e35c180ed4a 85
Racer01014 0:5e35c180ed4a 86
Racer01014 0:5e35c180ed4a 87 //***************************************************************************************************
Racer01014 0:5e35c180ed4a 88 //read sensors via multiplexer
Racer01014 0:5e35c180ed4a 89
Racer01014 0:5e35c180ed4a 90 void read_sensors()
Racer01014 0:5e35c180ed4a 91 {
Racer01014 0:5e35c180ed4a 92
Racer01014 0:5e35c180ed4a 93 Multiplex_select_A = 0;
Racer01014 0:5e35c180ed4a 94 Multiplex_select_B = 0;
Racer01014 1:ea5f520dcdc1 95 wait_us(1);
Racer01014 0:5e35c180ed4a 96 An_In_0 = Messkanal_X.read_u16();
Racer01014 1:ea5f520dcdc1 97 Motorspannung = (Messkanal_Y.read_u16()-Mot_volt_off) * Mot_volt_fac;
Racer01014 1:ea5f520dcdc1 98
Racer01014 0:5e35c180ed4a 99 Multiplex_select_A = 1;
Racer01014 1:ea5f520dcdc1 100 wait_us(1);
Racer01014 0:5e35c180ed4a 101 Temperatur_0 = Messkanal_X.read_u16();
Racer01014 1:ea5f520dcdc1 102 Motorstrom = (Messkanal_Y.read_u16() - Mot_curr_off) * Mot_curr_fac;
Racer01014 1:ea5f520dcdc1 103
Racer01014 0:5e35c180ed4a 104 Multiplex_select_A = 0;
Racer01014 0:5e35c180ed4a 105 Multiplex_select_B = 1;
Racer01014 1:ea5f520dcdc1 106 wait_us(1);
Racer01014 0:5e35c180ed4a 107 Temperatur_1 = Messkanal_X.read_u16();
Racer01014 1:ea5f520dcdc1 108 Bremsenspannung = (Messkanal_Y.read_u16() - Bra_volt_off) * Bra_curr_fac;
Racer01014 1:ea5f520dcdc1 109
Racer01014 0:5e35c180ed4a 110 Multiplex_select_A = 1;
Racer01014 1:ea5f520dcdc1 111 wait_us(1);
Racer01014 1:ea5f520dcdc1 112 Temperatur_2 = Messkanal_X.read_u16();
Racer01014 1:ea5f520dcdc1 113 Bremsenstrom = (Messkanal_Y.read_u16() - Bra_curr_off) * Bra_curr_fac;
Racer01014 1:ea5f520dcdc1 114
Racer01014 1:ea5f520dcdc1 115 DMS_Out = (Messkanal_DMS.read_u16() - DMS_off) * DMS_fac;
Racer01014 1:ea5f520dcdc1 116
Racer01014 0:5e35c180ed4a 117 }
Racer01014 0:5e35c180ed4a 118
Racer01014 0:5e35c180ed4a 119 //***************************************************************************************************
Racer01014 0:5e35c180ed4a 120 //Safety Circuit
Racer01014 0:5e35c180ed4a 121
Racer01014 0:5e35c180ed4a 122 int safety()
Racer01014 0:5e35c180ed4a 123 {
Racer01014 0:5e35c180ed4a 124 int Temp_max;
Racer01014 0:5e35c180ed4a 125 read_sensors();
Racer01014 1:ea5f520dcdc1 126
Racer01014 0:5e35c180ed4a 127 if( (Temperatur_0 < Temp_max) && (Temperatur_1 < Temp_max) && (Temperatur_2 < Temp_max))
Racer01014 0:5e35c180ed4a 128 return(0);
Racer01014 0:5e35c180ed4a 129 else
Racer01014 0:5e35c180ed4a 130 return(1);
Racer01014 0:5e35c180ed4a 131 }
Racer01014 1:ea5f520dcdc1 132
Racer01014 0:5e35c180ed4a 133 //***************************************************************************************************
Racer01014 0:5e35c180ed4a 134 //Checkup @ Start
Racer01014 0:5e35c180ed4a 135
Racer01014 0:5e35c180ed4a 136 int checkup()
Racer01014 0:5e35c180ed4a 137 {
Racer01014 1:ea5f520dcdc1 138 return(1);
Racer01014 1:ea5f520dcdc1 139 }
Racer01014 0:5e35c180ed4a 140
Racer01014 1:ea5f520dcdc1 141 //***************************************************************************************************
Racer01014 1:ea5f520dcdc1 142 //Increase Counter to get rpm
Racer01014 1:ea5f520dcdc1 143
Racer01014 1:ea5f520dcdc1 144 void rpm_counter()
Racer01014 1:ea5f520dcdc1 145 {
Racer01014 1:ea5f520dcdc1 146 counter++;
Racer01014 1:ea5f520dcdc1 147 }
Racer01014 0:5e35c180ed4a 148
Racer01014 0:5e35c180ed4a 149 //***************************************************************************************************
Racer01014 0:5e35c180ed4a 150 //send values
Racer01014 0:5e35c180ed4a 151
Racer01014 0:5e35c180ed4a 152 void send_data(void)
Racer01014 0:5e35c180ed4a 153 {
Racer01014 1:ea5f520dcdc1 154 /*
Racer01014 1:ea5f520dcdc1 155 pc.printf(" [Temperatur1, Motorspannung]; 0 %5.2f deg; 1 %5.2f V;", Temperatur_0, Motorspannung);
Racer01014 1:ea5f520dcdc1 156 pc.printf(" [Temperatur2, Motorstrom]; 0 %5.2f deg; 1 %5.2f A;", Temperatur_1, Motorstrom);
Racer01014 1:ea5f520dcdc1 157 pc.printf(" [Temperatur3, Bremsenspannung]; 0 %5.2f deg; 1 %5.2f V;", Temperatur_2, Bremsenspannung);
Racer01014 1:ea5f520dcdc1 158 pc.printf(" [Aux, Bremsenstrom]; 0 %5.2f ; 1 %5.2f ;", An_In_0, Bremsenstrom);
Racer01014 1:ea5f520dcdc1 159 pc.printf(" [DMS-Kanal]; 0 %5.2f ;", DMS_Out);
Racer01014 1:ea5f520dcdc1 160 pc.printf(" [Temp_1, Temp_2]; %5.2f deg; %5.2f deg;", Temperatur_0, Temperatur_1);
Racer01014 1:ea5f520dcdc1 161 pc.printf(" [Temp_3, Analog_0; %5.2f deg; %5.2f deg;", Temperatur_2, An_In_0);
Racer01014 1:ea5f520dcdc1 162 */
Racer01014 1:ea5f520dcdc1 163 pc.printf(" [Motorstrom, Motorspannung]; %5.2f A ; %5.2f A ;", Motorstrom, Motorspannung);
Racer01014 1:ea5f520dcdc1 164 pc.printf(" [Bremsenstrom, Bremsenspannung]; %5.2f V ; %5.2f V ;", Bremsenstrom, Bremsenspannung);
Racer01014 1:ea5f520dcdc1 165 pc.printf(" [Kraft]; %5.2f ;", DMS_Out);
Racer01014 1:ea5f520dcdc1 166 pc.printf(" [rps]; %5.2f ;", rps);
Racer01014 1:ea5f520dcdc1 167 pc.printf(" [P_Mech, P_Elec]; %5.2f W ; %5.2f W ;", PM, PE );
Racer01014 1:ea5f520dcdc1 168 pc.printf(" [rpm]; %5.2f ;", rps*60);
Racer01014 1:ea5f520dcdc1 169 pc.printf(" [eta]; %5.2f ;", eta);
Racer01014 0:5e35c180ed4a 170 pc.printf(" \r\n\r\n");
Racer01014 1:ea5f520dcdc1 171 // wait_ms(5);
Racer01014 0:5e35c180ed4a 172 }
Racer01014 1:ea5f520dcdc1 173
Racer01014 1:ea5f520dcdc1 174 //***************************************************************************************************
Racer01014 1:ea5f520dcdc1 175 //calc rpm
Racer01014 1:ea5f520dcdc1 176
Racer01014 1:ea5f520dcdc1 177 void calc_rps()
Racer01014 1:ea5f520dcdc1 178 {
Racer01014 1:ea5f520dcdc1 179 rps = counter/5;
Racer01014 1:ea5f520dcdc1 180 counter=0;
Racer01014 1:ea5f520dcdc1 181 rps_old = rps;
Racer01014 1:ea5f520dcdc1 182 }
Racer01014 1:ea5f520dcdc1 183
Racer01014 0:5e35c180ed4a 184
Racer01014 0:5e35c180ed4a 185 //***************************************************************************************************
Racer01014 0:5e35c180ed4a 186 // MAIN:
Racer01014 0:5e35c180ed4a 187
Racer01014 0:5e35c180ed4a 188 int main(void)
Racer01014 0:5e35c180ed4a 189 {
Racer01014 0:5e35c180ed4a 190 //********************* VARIABLEN *****************************
Racer01014 1:ea5f520dcdc1 191
Racer01014 1:ea5f520dcdc1 192
Racer01014 1:ea5f520dcdc1 193 bool lock = 0;
Racer01014 1:ea5f520dcdc1 194 //
Racer01014 1:ea5f520dcdc1 195 time_passed=0;
Racer01014 1:ea5f520dcdc1 196 Motor.period_us(200);
Racer01014 0:5e35c180ed4a 197 Bremse.period_us(200);
Racer01014 0:5e35c180ed4a 198
Racer01014 1:ea5f520dcdc1 199 Motor.pulsewidth_us(100);
Racer01014 1:ea5f520dcdc1 200 Bremse.pulsewidth_us(193);
Racer01014 0:5e35c180ed4a 201
Racer01014 0:5e35c180ed4a 202 // Matrix Values(1,4);
Racer01014 1:ea5f520dcdc1 203 File=0;
Racer01014 1:ea5f520dcdc1 204 Lichtschranke.fall(&rpm_counter); // Call function rpm_counter
Racer01014 1:ea5f520dcdc1 205 Puls.attach(&calc_rps, 1.0);
Racer01014 1:ea5f520dcdc1 206 wait(3);
Racer01014 1:ea5f520dcdc1 207 //FILE *fp = fopen("/local/Values.txt", "w");
Racer01014 1:ea5f520dcdc1 208 // fprintf(fp, "Motorstrom [A], Motorspannung [V], Bremsenstrom [A], Bremsenspannung [V], Kraft [g], Umdrehungen [1/s] \r\n");
Racer01014 0:5e35c180ed4a 209
Racer01014 0:5e35c180ed4a 210 //************************ MAIN ********************************
Racer01014 0:5e35c180ed4a 211
Racer01014 1:ea5f520dcdc1 212
Racer01014 1:ea5f520dcdc1 213 while(1) {
Racer01014 0:5e35c180ed4a 214
Racer01014 0:5e35c180ed4a 215
Racer01014 1:ea5f520dcdc1 216
Racer01014 1:ea5f520dcdc1 217 for (int i = 0; i<2000; i++) {
Racer01014 1:ea5f520dcdc1 218 read_sensors();
Racer01014 1:ea5f520dcdc1 219 P_Elec[i] = Motorstrom * Motorspannung;
Racer01014 1:ea5f520dcdc1 220 P_Mech[i] = ((DMS_Out / 1000) * Lever * Gravity * 2 * PI * rps);
Racer01014 1:ea5f520dcdc1 221 }
Racer01014 1:ea5f520dcdc1 222
Racer01014 1:ea5f520dcdc1 223 for (int i = 0; i<2000; i++) {
Racer01014 1:ea5f520dcdc1 224 PE = P_Elec[i] + PE;
Racer01014 1:ea5f520dcdc1 225 PM = P_Mech[i] + PM;
Racer01014 1:ea5f520dcdc1 226 }
Racer01014 1:ea5f520dcdc1 227 PE = PE / 2000;
Racer01014 1:ea5f520dcdc1 228 PM = PM / 2000;
Racer01014 1:ea5f520dcdc1 229 eta = PM / PE;
Racer01014 1:ea5f520dcdc1 230 send_data();
Racer01014 1:ea5f520dcdc1 231
Racer01014 1:ea5f520dcdc1 232 /*
Racer01014 1:ea5f520dcdc1 233 wait_ms(500);
Racer01014 1:ea5f520dcdc1 234
Racer01014 1:ea5f520dcdc1 235 if(((rps - rps_old) < 1) && lock) {
Racer01014 1:ea5f520dcdc1 236 lock = 0;
Racer01014 1:ea5f520dcdc1 237 File = 1;
Racer01014 1:ea5f520dcdc1 238 fprintf(fp, "\r\n");
Racer01014 1:ea5f520dcdc1 239
Racer01014 1:ea5f520dcdc1 240 for (int b=0; b<1000; b++) {
Racer01014 1:ea5f520dcdc1 241 read_sensors();
Racer01014 1:ea5f520dcdc1 242 File = !File;
Racer01014 1:ea5f520dcdc1 243 fprintf(fp, "%5.2f; %5.2f; ", Motorstrom, Motorspannung);
Racer01014 1:ea5f520dcdc1 244 fprintf(fp, "%5.2f; %5.2f; ", Bremsenstrom, Bremsenspannung);
Racer01014 1:ea5f520dcdc1 245 fprintf(fp, "%5.2f; %5.2f; ", DMS_Out, rps);
Racer01014 1:ea5f520dcdc1 246 fprintf(fp, "\r\n");
Racer01014 1:ea5f520dcdc1 247 File = !File;
Racer01014 1:ea5f520dcdc1 248 }
Racer01014 1:ea5f520dcdc1 249 fclose(fp);
Racer01014 1:ea5f520dcdc1 250 File = 0;
Racer01014 1:ea5f520dcdc1 251 Motor.pulsewidth_us(200);
Racer01014 1:ea5f520dcdc1 252
Racer01014 1:ea5f520dcdc1 253 }
Racer01014 1:ea5f520dcdc1 254 */
Racer01014 1:ea5f520dcdc1 255
Racer01014 1:ea5f520dcdc1 256
Racer01014 0:5e35c180ed4a 257
Racer01014 0:5e35c180ed4a 258 //********************* Messprozedur ****************************
Racer01014 0:5e35c180ed4a 259 //*********************
Racer01014 0:5e35c180ed4a 260
Racer01014 1:ea5f520dcdc1 261 }
Racer01014 1:ea5f520dcdc1 262
Racer01014 0:5e35c180ed4a 263 }