QITH FLAGS

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of TF_conops_BAE1_3 by Team Fox

EPS.cpp

Committer:
sakthipriya
Date:
2015-06-30
Revision:
0:246d1b5f11ae
Child:
1:7185136654ce

File content as of revision 0:246d1b5f11ae:

#include "EPS.h"
#include "pin_config.h"
 


//----------------------------------------------------EPS INIT---------------------------------------------------------------------------//
void FCTN_EPS_INIT()
{
    //FCTN_BTRY_GAUGE                        //read soc value
    //FCTN_BTRY_TEMP
}
 

int FCTN_QUANTIZE(float start,float step,float input_data)                  // accepts min and measured values and step->quantises on a scale 0-15..(4 bit quantisation)
{
    int quant_data = (input_data - start)/step;
    if(quant_data <= 0)
         quant_data = 0;
    if(quant_data >= 15)
         quant_data = 15;
    return quant_data;
}
 
void FCTN_WRITE_BEASTRUCT(ShortBeacy* x,SensorDataQuantised y)  
{
    (*x).Voltage[0] = 2;                                       //quantised value
    (*x).Temp[0] = y.PanelTemperature[0];                      //quantised value
    (*x).Temp[1] = y.PanelTemperature[1];                      //quantised value
    (*x).AngularSpeed[0] = y.AngularSpeed[0];
    (*x).AngularSpeed[1] = y.AngularSpeed[1];
    
    (*x).SubsystemStatus[0] = 145;                             //dummy values----------to be changed-------------------
    (*x).ErrorFlag[0] = 3;                                     //dummy values----------to be changed-------------------
}

SensorData Sensor; 
SensorDataQuantised SensorQuantised;
ShortBeacy Shortbeacon;

void FCTN_EPS_MAIN()             
{
    SelectLinesA[0] = SelectLinesA[1] = SelectLinesA[2] = SelectLinesA[3] = 0;
    SelectLinesB[0] = SelectLinesB[1] = SelectLinesB[2] = 0;  //initialise all selectlines to zeroes->1st line of muxes selected
    int loop_iterator = 0;
    int select_line_iterator = 3;
        
    for(loop_iterator = 0; loop_iterator < 16; loop_iterator++)  //measurement from voltage sensor=> 16 sensors in place
    {       
        //read the sensor values and stores them in 'SensorData' structure's variable 'Sensor'
        Sensor.Voltage[loop_iterator] = (VoltageInput.read()*3.3*5.545454);//resistors in voltage divider=>15Mohm,3.3Mohm
               
        if(loop_iterator%2 == 0)
            SensorQuantised.Voltage[loop_iterator/2] = FCTN_QUANTIZE(vstart,vstep,Sensor.Voltage[loop_iterator]);
                           
        else
            SensorQuantised.Voltage[(loop_iterator)/2] = SensorQuantised.Voltage[(loop_iterator)/2]<<4 + FCTN_QUANTIZE(vstart,vstep,Sensor.Voltage[loop_iterator]);
            
        //iterate the select lines from 0 to 15
        for(select_line_iterator = 3;select_line_iterator >= 0;select_line_iterator--)
        {
            if(SelectLinesA[select_line_iterator] == 0)
            {
                SelectLinesA[select_line_iterator] = 1;
                break;
            }
            else SelectLinesA[select_line_iterator] = 0;
        }
    
        wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
    }
 
 
    //measurement from current sensor=>  8 sensors in place 
    for(loop_iterator = 0; loop_iterator < 8; loop_iterator++) 
    {       
        //read the sensor values and stores them in 'SensorData' structure variable 'Sensor'
        Sensor.Current[loop_iterator] = (CurrentInput.read()*3.3/(50*rsens));
        if(loop_iterator%2 == 0)
            SensorQuantised.Current[loop_iterator/2] = FCTN_QUANTIZE(cstart,cstep,Sensor.Current[loop_iterator]);
        else
            SensorQuantised.Current[(loop_iterator)/2] = SensorQuantised.Current[(loop_iterator)/2]<<4 + FCTN_QUANTIZE(cstart,cstep,Sensor.Current[loop_iterator]);

        //iterate the select lines from 0 to 7
        for(select_line_iterator = 2;select_line_iterator >= 0;select_line_iterator--)
        {
            if(SelectLinesB[select_line_iterator] == 0)
            {
                SelectLinesB[select_line_iterator] = 1;
                break;
            }
            else SelectLinesB[select_line_iterator] = 0;
    
        }
    
        wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
    }
    
    
 
    //update magnetometer data->
    //populate values in structure variable 'Sensor' from data to be given by Green
     SensorQuantised.AngularSpeed[0] = FCTN_QUANTIZE(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[0]);
     SensorQuantised.AngularSpeed[0] = SensorQuantised.AngularSpeed[0]<<4 + FCTN_QUANTIZE(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[1]);
     SensorQuantised.AngularSpeed[1] = FCTN_QUANTIZE(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[2]);
     
    //update gyro data->
    //populate values in structure variable 'Sensor' from data to be given by Green
     SensorQuantised.Bnewvalue[0] = FCTN_QUANTIZE(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[0]);
     SensorQuantised.Bnewvalue[0] = SensorQuantised.Bnewvalue[0]<<4 + FCTN_QUANTIZE(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[1]);
     SensorQuantised.Bnewvalue[1] = FCTN_QUANTIZE(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[2]);

     //update beacon structure
     FCTN_WRITE_BEASTRUCT(&Shortbeacon,SensorQuantised);//Shortbeacon is passed 
         
}