Kalibriersoftware Stromwerte

Dependencies:   Matrix mbed

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 ****************************
//*********************

    }

}