H2M Teststand
/
Pruefprogramm_Motorteststand
Kalibriersoftware Stromwerte
Pruefprogramm_Motorteststand.cpp
- Committer:
- Racer01014
- Date:
- 2015-11-28
- Revision:
- 1:ea5f520dcdc1
- Parent:
- 0:5e35c180ed4a
File content as of revision 1:ea5f520dcdc1:
#include "mbed.h" #include "Matrix.h" #include "USBSerial.h" #include "Ticker.h" //************************************* DEFINES ***************************************************** #define PI 3.1415926 #define Gravity 9.81 //*************************************************************************************************** //Current_Factors ------- Calibrated in A (Ampere) #define Mot_curr_fac 0.00039021 // Factor for calculation #define Mot_curr_off 10034.87 // Offset #define Bra_curr_fac 0.00028048 #define Bra_curr_off 49481.61 // Offset //*************************************************************************************************** //Voltage_Factors ------- Calibrated in V (Volt) #define Mot_volt_fac 0.00050860 // Factor for calculation #define Mot_volt_off 25.80 // Offset #define Bra_volt_fac 0.00051015 // Factor for calculation #define Bra_volt_off 33.63 // Offset //*************************************************************************************************** //DMS_Factors ------- Calibrated in g (Gramm) #define DMS_fac 0.019467 // Factor for calculation, gives back gramms #define DMS_off 1629.33 // Offset //*******LEVER******** #define Lever 0.05 // Length of lever //*************************************************************************************************** //Outputs DigitalOut Multiplex_select_A (p26); DigitalOut Multiplex_select_B (p25); DigitalOut File(LED1); //*************************************************************************************************** //Inputs AnalogIn Messkanal_X (p15); AnalogIn Messkanal_Y (p16); AnalogIn Messkanal_DMS (p17); //*************************************************************************************************** //Interrupts InterruptIn Lichtschranke(p29); //*************************************************************************************************** //Ticker Ticker Puls; //*************************************************************************************************** //PWM PwmOut Motor(p23); PwmOut Bremse(p21); //*************************************************************************************************** //Communication Serial pc(USBTX, USBRX); //*************************************************************************************************** //File System LocalFileSystem local("local"); //*************************************************************************************************** //Variablen volatile float rps_old, rps, time_passed, Motorspannung, Bremsenspannung , Motorstrom, An_In_0, Bremsenstrom, Temperatur_0, Temperatur_1, Temperatur_2, DMS_Out; volatile float P_Mech[2000], P_Elec[2000], PE, PM, eta; float counter = 0; //*************************************************************************************************** //read sensors via multiplexer void read_sensors() { Multiplex_select_A = 0; Multiplex_select_B = 0; wait_us(1); An_In_0 = Messkanal_X.read_u16(); Motorspannung = (Messkanal_Y.read_u16()-Mot_volt_off) * Mot_volt_fac; Multiplex_select_A = 1; wait_us(1); Temperatur_0 = Messkanal_X.read_u16(); Motorstrom = (Messkanal_Y.read_u16() - Mot_curr_off) * Mot_curr_fac; Multiplex_select_A = 0; Multiplex_select_B = 1; wait_us(1); Temperatur_1 = Messkanal_X.read_u16(); Bremsenspannung = (Messkanal_Y.read_u16() - Bra_volt_off) * Bra_curr_fac; Multiplex_select_A = 1; wait_us(1); Temperatur_2 = Messkanal_X.read_u16(); Bremsenstrom = (Messkanal_Y.read_u16() - Bra_curr_off) * Bra_curr_fac; DMS_Out = (Messkanal_DMS.read_u16() - DMS_off) * DMS_fac; } //*************************************************************************************************** //Safety Circuit int safety() { int Temp_max; read_sensors(); if( (Temperatur_0 < Temp_max) && (Temperatur_1 < Temp_max) && (Temperatur_2 < Temp_max)) return(0); else return(1); } //*************************************************************************************************** //Checkup @ Start int checkup() { return(1); } //*************************************************************************************************** //Increase Counter to get rpm void rpm_counter() { counter++; } //*************************************************************************************************** //send values void send_data(void) { /* pc.printf(" [Temperatur1, Motorspannung]; 0 %5.2f deg; 1 %5.2f V;", Temperatur_0, Motorspannung); pc.printf(" [Temperatur2, Motorstrom]; 0 %5.2f deg; 1 %5.2f A;", Temperatur_1, Motorstrom); pc.printf(" [Temperatur3, Bremsenspannung]; 0 %5.2f deg; 1 %5.2f V;", Temperatur_2, Bremsenspannung); pc.printf(" [Aux, Bremsenstrom]; 0 %5.2f ; 1 %5.2f ;", An_In_0, Bremsenstrom); pc.printf(" [DMS-Kanal]; 0 %5.2f ;", DMS_Out); pc.printf(" [Temp_1, Temp_2]; %5.2f deg; %5.2f deg;", Temperatur_0, Temperatur_1); pc.printf(" [Temp_3, Analog_0; %5.2f deg; %5.2f deg;", Temperatur_2, An_In_0); */ pc.printf(" [Motorstrom, Motorspannung]; %5.2f A ; %5.2f A ;", Motorstrom, Motorspannung); pc.printf(" [Bremsenstrom, Bremsenspannung]; %5.2f V ; %5.2f V ;", Bremsenstrom, Bremsenspannung); pc.printf(" [Kraft]; %5.2f ;", DMS_Out); pc.printf(" [rps]; %5.2f ;", rps); pc.printf(" [P_Mech, P_Elec]; %5.2f W ; %5.2f W ;", PM, PE ); pc.printf(" [rpm]; %5.2f ;", rps*60); pc.printf(" [eta]; %5.2f ;", eta); pc.printf(" \r\n\r\n"); // wait_ms(5); } //*************************************************************************************************** //calc rpm void calc_rps() { rps = counter/5; counter=0; rps_old = rps; } //*************************************************************************************************** // MAIN: int main(void) { //********************* VARIABLEN ***************************** bool lock = 0; // time_passed=0; Motor.period_us(200); Bremse.period_us(200); Motor.pulsewidth_us(100); Bremse.pulsewidth_us(193); // Matrix Values(1,4); File=0; Lichtschranke.fall(&rpm_counter); // Call function rpm_counter Puls.attach(&calc_rps, 1.0); wait(3); //FILE *fp = fopen("/local/Values.txt", "w"); // fprintf(fp, "Motorstrom [A], Motorspannung [V], Bremsenstrom [A], Bremsenspannung [V], Kraft [g], Umdrehungen [1/s] \r\n"); //************************ MAIN ******************************** while(1) { for (int i = 0; i<2000; i++) { read_sensors(); P_Elec[i] = Motorstrom * Motorspannung; P_Mech[i] = ((DMS_Out / 1000) * Lever * Gravity * 2 * PI * rps); } for (int i = 0; i<2000; i++) { PE = P_Elec[i] + PE; PM = P_Mech[i] + PM; } PE = PE / 2000; PM = PM / 2000; eta = PM / PE; send_data(); /* wait_ms(500); if(((rps - rps_old) < 1) && lock) { lock = 0; File = 1; fprintf(fp, "\r\n"); for (int b=0; b<1000; b++) { read_sensors(); File = !File; fprintf(fp, "%5.2f; %5.2f; ", Motorstrom, Motorspannung); fprintf(fp, "%5.2f; %5.2f; ", Bremsenstrom, Bremsenspannung); fprintf(fp, "%5.2f; %5.2f; ", DMS_Out, rps); fprintf(fp, "\r\n"); File = !File; } fclose(fp); File = 0; Motor.pulsewidth_us(200); } */ //********************* Messprozedur **************************** //********************* } }