QITH FLAGS

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of TF_conops_BAE1_3 by Team Fox

Revision:
0:246d1b5f11ae
Child:
1:7185136654ce
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EPS.cpp	Tue Jun 30 05:55:48 2015 +0000
@@ -0,0 +1,118 @@
+#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 
+         
+}
+
+
+