QITH FLAGS
Dependencies: FreescaleIAP mbed-rtos mbed
Fork of TF_conops_BAE1_3 by
Diff: EPS.cpp
- 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 + +} + + +