Kalibriersoftware Stromwerte

Dependencies:   Matrix mbed

Files at this revision

API Documentation at this revision

Comitter:
Racer01014
Date:
Sat Nov 28 13:50:31 2015 +0000
Parent:
0:5e35c180ed4a
Commit message:
-

Changed in this revision

Pruefprogramm_Motorteststand.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 5e35c180ed4a -r ea5f520dcdc1 Pruefprogramm_Motorteststand.cpp
--- a/Pruefprogramm_Motorteststand.cpp	Mon Nov 23 16:09:54 2015 +0000
+++ b/Pruefprogramm_Motorteststand.cpp	Sat Nov 28 13:50:31 2015 +0000
@@ -1,23 +1,63 @@
 #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 Myled (LED1);
-
+DigitalOut File(LED1);
 
 //***************************************************************************************************
 //Inputs
 
 AnalogIn Messkanal_X (p15);
 AnalogIn Messkanal_Y (p16);
-AnalogIn DMS_Kanal (p17);
+AnalogIn Messkanal_DMS (p17);
+
+//***************************************************************************************************
+//Interrupts
 
-//DigitalIn Start(p22);
+InterruptIn Lichtschranke(p29);
+
+//***************************************************************************************************
+//Ticker
+
+Ticker Puls;
 
 //***************************************************************************************************
 //PWM
@@ -25,17 +65,23 @@
 PwmOut Motor(p23);
 PwmOut Bremse(p21);
 
-
-
 //***************************************************************************************************
 //Communication
 
 Serial pc(USBTX, USBRX);
 
-//USBSerial terminal;
+//***************************************************************************************************
+//File System
+
+LocalFileSystem local("local");
+
+//***************************************************************************************************
+//Variablen
 
 
-volatile float  Motorspannung, Bremsenspannung , Motorstrom, An_In_0, Bremsenstrom, Temperatur_0, Temperatur_1, Temperatur_2, DMS_Out, DMS_Skalierung;
+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;
 
 
 //***************************************************************************************************
@@ -46,26 +92,28 @@
 
     Multiplex_select_A = 0;
     Multiplex_select_B = 0;
-    wait_ms(1);
+    wait_us(1);
     An_In_0 = Messkanal_X.read_u16();
-    Motorspannung = Messkanal_Y.read_u16(); //* 0.000515 - 0.05 ; Gute Näherung von 2- ~23V. Dannach zu niedrig.Z-Diode
-                
+    Motorspannung = (Messkanal_Y.read_u16()-Mot_volt_off) * Mot_volt_fac;
+
     Multiplex_select_A = 1;
-    wait_ms(1);
+    wait_us(1);
     Temperatur_0 = Messkanal_X.read_u16();
-    Motorstrom = Messkanal_Y.read_u16(); //* 0.000396 - 4.15;
-    
+    Motorstrom = (Messkanal_Y.read_u16() - Mot_curr_off) * Mot_curr_fac;
+
     Multiplex_select_A = 0;
     Multiplex_select_B = 1;
-    wait_ms(1);
+    wait_us(1);
     Temperatur_1 = Messkanal_X.read_u16();
-    Bremsenspannung = Messkanal_Y.read_u16(); //* 0.000515 - 0.05;Gute Näherung von 2- ~23V. Dannach zu niedrig.Z-Diode
-    
+    Bremsenspannung = (Messkanal_Y.read_u16() - Bra_volt_off) * Bra_curr_fac;
+
     Multiplex_select_A = 1;
-    wait_ms(1);
-    Temperatur_2 = Messkanal_X.read_u16(); // 1629;
-    Bremsenstrom = Messkanal_Y.read_u16(); //* 0.00032 - 15.8;
-       
+    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;
+
 }
 
 //***************************************************************************************************
@@ -75,84 +123,141 @@
 {
     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);  
-}       
+    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(" [Motorstrom, Bremsenstrom]; 0 %5.2f ; 1 %5.2f ;", Motorstrom, Bremsenstrom);
+    /*
+        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(50);
+//    wait_ms(5);
 }
-    
+
+//***************************************************************************************************
+//calc rpm
+
+void calc_rps()
+{
+    rps = counter/5;
+    counter=0;
+    rps_old = rps;
+}
+
 
 //***************************************************************************************************
 // MAIN:
 
-
-
-
 int main(void)
 {
 //********************* VARIABLEN *****************************
-    
-    DMS_Skalierung = 1;
-    Motor.period_us(200);   
+
+
+    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(true) 
-    {
-    Motor.pulsewidth_us(0);
-    Bremse.pulsewidth_us(0);
-    read_sensors();
-    send_data();
-        
-    DMS_Out = DMS_Kanal.read_u16()*DMS_Skalierung;
-    
-    //safety();
+
+    while(1) {
 
 
-    Myled=!Myled;
-    wait_ms(500);
-    
+        
+        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 ****************************
 //*********************
-    
 
-    
-    
-}    
-    
+    }
+
 }
\ No newline at end of file