sakthi priya amirtharaj
/
BAE_acsbeahk
acs bea hk together
Fork of BAE_vr3honeycomb1_christmas by
Embed:
(wiki syntax)
Show/hide line numbers
HK.cpp
00001 #include "HK.h" 00002 #include "pin_config.h" 00003 00004 00005 //GPIO pins used=> D2-D12, A0-A1 00006 00007 DigitalOut SelectLinesA[]={PIN43,PIN44,PIN45,PIN46};//to mux1=>voltage mux , PTA 13-16 , CHNGE TO PIN43 LATER 00008 DigitalOut SelectLinesB[]={PTD3,PTC4,PTC8,PIN59};//to mux2=>current mux(differential mux) , PTB 3,7,8,9 00009 DigitalOut SelectLinesC[]={PIN64,PIN65,PIN66,PTC9};//to mux3=>temp mux PTB 18-21 00010 00011 //--------------------------------------------MSB is SelectLines[0],LSB is SelectLines[3]-------------------------------- 00012 00013 AnalogIn CurrentInput(PIN53); // Input from Current Mux PTB0 00014 AnalogIn VoltageInput(PIN54); // Input from Voltage Multiplexer PTB1 00015 AnalogIn TemperatureInput(PIN55); /*PTB2 Input from Temperature Multiplexer,thermistor Multiplexer- same multiplexer for both(lines 1-4 for thermistor,line 0 for temperature sensor)*/ 00016 00017 00018 00019 00020 int quantiz(float start,float step,float x) // accepts min and measured values and step->quantises on a scale 0-15..(4 bit quantisation) 00021 { 00022 int y=(x-start)/step; 00023 if(y<=0)y=0; 00024 if(y>=15)y=15; 00025 return y; 00026 } 00027 00028 void init_beacon(ShortBeacy* x,SensorDataQuantised y) 00029 { 00030 (*x).Voltage[0]=2;//quantised value 00031 (*x).Temp[0]=y.PanelTemperature[0];//quantised value 00032 (*x).Temp[1]=y.PanelTemperature[1];//quantised value 00033 (*x).AngularSpeed[0]=y.AngularSpeed[0]; 00034 (*x).AngularSpeed[1]=y.AngularSpeed[1]; 00035 00036 (*x).SubsystemStatus[0]=145;//dummy values----------to be changed------------------- 00037 (*x).ErrorFlag[0]=3;//dummy values----------to be changed------------------- 00038 } 00039 00040 SensorData Sensor; 00041 SensorDataQuantised SensorQuantised; 00042 ShortBeacy Shortbeacon; 00043 void FUNC_HK_MAIN() 00044 { 00045 //define structure variables 00046 00047 00048 00049 00050 //initialise all selectlines to zeroes->1st line of muxes selected 00051 SelectLinesA[0]=SelectLinesA[1]=SelectLinesA[2]=SelectLinesA[3]=0; 00052 SelectLinesB[0]=SelectLinesB[1]=SelectLinesB[2]=0; 00053 SelectLinesC[0]=SelectLinesC[1]=SelectLinesC[2]=SelectLinesC[3]=0; 00054 00055 int LoopIterator; 00056 int SelectLineIterator; 00057 00058 float resistance_thermistor,voltage_thermistor;//for thermistor 00059 00060 //measurement from voltage sensor=> 16 sensors in place 00061 for(LoopIterator=0; LoopIterator<16; LoopIterator++) 00062 { 00063 //following lines read the sensor values and stores them in 'SensorData' structure's variable 'Sensor' 00064 Sensor.Voltage[LoopIterator]=(VoltageInput.read()*3.3*5.545454);//resistors in voltage divider=>15Mohm,3.3Mohm 00065 00066 if(LoopIterator%2==0) 00067 SensorQuantised.Voltage[LoopIterator/2]=quantiz(vstart,vstep,Sensor.Voltage[LoopIterator]); 00068 00069 else 00070 SensorQuantised.Voltage[(LoopIterator)/2]=SensorQuantised.Voltage[(LoopIterator)/2]<<4+quantiz(vstart,vstep,Sensor.Voltage[LoopIterator]); 00071 00072 00073 00074 // The following lines are used to iterate the select lines from 0 to 15 00075 //following is an algorithm similar to counting binary numbers of 4 bit 00076 for(SelectLineIterator=3;SelectLineIterator>=0;SelectLineIterator--) 00077 { 00078 if(SelectLinesA[SelectLineIterator]==0) 00079 { 00080 SelectLinesA[SelectLineIterator]=1; 00081 break; 00082 } 00083 else SelectLinesA[SelectLineIterator]=0; 00084 00085 } 00086 00087 00088 wait_us(10.0); // A delay of 10 microseconds between each sensor output. Can be changed. 00089 00090 } 00091 00092 00093 00094 00095 00096 //measurement from current sensor=> 8 sensors in place 00097 00098 for(LoopIterator=0; LoopIterator<8; LoopIterator++) 00099 { 00100 //following lines read the sensor values and stores them in 'SensorData' structure variable 'Sensor' 00101 Sensor.Current[LoopIterator]=(CurrentInput.read()*3.3/(50*rsens)); 00102 if(LoopIterator%2==0) 00103 SensorQuantised.Current[LoopIterator/2]=quantiz(cstart,cstep,Sensor.Current[LoopIterator]); 00104 else 00105 SensorQuantised.Current[(LoopIterator)/2]=SensorQuantised.Current[(LoopIterator)/2]<<4+quantiz(cstart,cstep,Sensor.Current[LoopIterator]); 00106 00107 00108 // The following lines are used to iterate the select lines from 0 to 7 00109 //following is an algorithm similar to counting binary numbers of 3 bits 00110 for(SelectLineIterator=2;SelectLineIterator>=0;SelectLineIterator--) 00111 { 00112 if(SelectLinesB[SelectLineIterator]==0) 00113 { 00114 SelectLinesB[SelectLineIterator]=1; 00115 break; 00116 } 00117 else SelectLinesB[SelectLineIterator]=0; 00118 00119 } 00120 00121 00122 wait_us(10.0); // A delay of 10 microseconds between each sensor output. Can be changed. 00123 00124 } 00125 00126 00127 //measurement of temperature 00128 //temperature measurement=> 4 thermistors, 1 temperature sensor 00129 //mux line 1=>temp sensor, mux lines 2 to 5 =>thermistors 00130 00131 for(LoopIterator=0; LoopIterator<5; LoopIterator++) 00132 { 00133 00134 //following lines read the sensor values and stores them in 'SensorData' structure variable 'Sensor' 00135 Sensor.Temperature[LoopIterator]=(-90.7*3.3*TemperatureInput.read()+190.1543); 00136 voltage_thermistor=TemperatureInput.read()*3.3;//voltage across thermistor 00137 resistance_thermistor=24000*voltage_thermistor/(3.3-voltage_thermistor);//resistance of thermistor 00138 if (LoopIterator==0) 00139 { 00140 printf(" Temp =%f",-90.7*3.3*TemperatureInput.read()+190.1543); 00141 } 00142 00143 if(LoopIterator%2==0) 00144 { 00145 if(LoopIterator<1) //->corresponding to temperature sensor 00146 SensorQuantised.Temperature[(LoopIterator)/2]=quantiz(tstart,tstep,Sensor.Temperature[LoopIterator]); 00147 00148 else //->corresponding to thermistor 00149 { 00150 if(voltage_thermistor<1.378) //Temperature>12 degC 00151 Sensor.PanelTemperature[(LoopIterator-1)]=(3694/log(24.032242*resistance_thermistor)); 00152 00153 else 00154 Sensor.PanelTemperature[(LoopIterator-1)]=(3365.4792/log(7.60404*resistance_thermistor)); 00155 00156 00157 SensorQuantised.PanelTemperature[(LoopIterator-1)/2]=quantiz(tstart_thermistor,tstep_thermistor,Sensor.PanelTemperature[(LoopIterator-1)]); 00158 00159 } 00160 00161 } 00162 00163 else 00164 { 00165 if(LoopIterator<1) 00166 SensorQuantised.Temperature[(LoopIterator)/2]=SensorQuantised.Temperature[(LoopIterator)/2]<<4+quantiz(tstart,tstep,Sensor.Temperature[LoopIterator]); 00167 00168 else 00169 { 00170 if(voltage_thermistor<1.378) //Temperature>12 degC 00171 Sensor.PanelTemperature[LoopIterator-1]=(3694/log(24.032242*resistance_thermistor)); 00172 00173 00174 else 00175 Sensor.PanelTemperature[LoopIterator-1]=(3365.4792/log(7.60404*resistance_thermistor)); 00176 00177 SensorQuantised.PanelTemperature[(LoopIterator-1)/2]=SensorQuantised.PanelTemperature[(LoopIterator-1)/2]<<4+quantiz(tstart_thermistor,tstep_thermistor,Sensor.PanelTemperature[LoopIterator-1]); 00178 00179 } 00180 00181 } 00182 00183 strcpy(SensorQuantised.Voltage,"green"); 00184 00185 // The following lines are used to iterate the select lines from 0 to 4 00186 00187 //following is an algorithm similar to counting binary numbers of 4 bit 00188 for(SelectLineIterator=3;SelectLineIterator>=0;SelectLineIterator--) 00189 { 00190 if(SelectLinesC[SelectLineIterator]==0) 00191 { 00192 SelectLinesC[SelectLineIterator]=1; 00193 break; 00194 } 00195 else SelectLinesC[SelectLineIterator]=0; 00196 00197 } 00198 00199 00200 wait_us(10.0); // A delay of 10 microseconds between each sensor output. Can be changed. 00201 00202 } 00203 00204 00205 00206 00207 00208 //update magnetometer data-> 00209 //populate values in structure variable 'Sensor' from data to be given by Green 00210 SensorQuantised.AngularSpeed[0]=quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[1]); 00211 SensorQuantised.AngularSpeed[0]=SensorQuantised.AngularSpeed[0]<<4+quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[0]); 00212 SensorQuantised.AngularSpeed[1]=quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[2]); 00213 00214 //update gyro data-> 00215 //populate values in structure variable 'Sensor' from data to be given by Green 00216 SensorQuantised.Bnewvalue[0]=quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[1]); 00217 SensorQuantised.Bnewvalue[0]=SensorQuantised.Bnewvalue[0]<<4+quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[0]); 00218 SensorQuantised.Bnewvalue[1]=quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[2]); 00219 00220 00221 00222 00223 //update beacon structure 00224 init_beacon(&Shortbeacon,SensorQuantised);//Shortbeacon is passed 00225 00226 00227 } 00228 00229 00230
Generated on Wed Jul 13 2022 21:19:31 by 1.7.2