Team Fox / Mbed 2 deprecated BAE_QM_MAR9

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of workinQM_5thJan_azad by Team Fox

Committer:
lakshya
Date:
Fri Jul 01 17:55:30 2016 +0000
Revision:
20:949d13045431
Parent:
19:79e69017c855
Child:
24:72bca5be7c4e
Child:
27:61c856be467e
BAE final 1.0 (1st july); ; BCN and EPS  code to be upgraded; +; testing and troubleshooting to be done ; +; watchdog to be implemented; ; comparing with flowcharts.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:7b4c00e3912f 1 #include "EPS.h"
sakthipriya 0:7b4c00e3912f 2 #include "pin_config.h"
sakthipriya 6:036d08b62785 3 #include "iostream"
lakshya 20:949d13045431 4
lakshya 20:949d13045431 5 //FOR APPEDING HK DATA===================================
lakshya 20:949d13045431 6
lakshya 20:949d13045431 7 extern uint16_t crc_hk_data();
lakshya 20:949d13045431 8
lakshya 20:949d13045431 9 //acs
lakshya 20:949d13045431 10 extern uint8_t ACS_DETUMBLING_ALGO_TYPE;
lakshya 20:949d13045431 11 extern uint8_t ACS_STATE;
lakshya 20:949d13045431 12 extern uint8_t ACS_MAG_TIME_DELAY;
lakshya 20:949d13045431 13 extern uint8_t ACS_DEMAG_TIME_DELAY;
lakshya 20:949d13045431 14 extern uint8_t ACS_Z_FIXED_MOMENT;
lakshya 20:949d13045431 15 extern uint16_t ACS_MM_X_COMSN;
lakshya 20:949d13045431 16 extern uint16_t ACS_MM_Y_COMSN;
lakshya 20:949d13045431 17 extern uint16_t ACS_MG_X_COMSN;
lakshya 20:949d13045431 18 extern uint16_t ACS_MG_Y_COMSN;
lakshya 20:949d13045431 19 extern uint16_t ACS_MM_Z_COMSN;
lakshya 20:949d13045431 20 extern uint16_t ACS_MG_Z_COMSN;
lakshya 20:949d13045431 21 extern uint8_t ACS_MAIN_STATUS;
lakshya 20:949d13045431 22 extern uint8_t ACS_STATUS;
lakshya 20:949d13045431 23 extern uint8_t ATS1_EVENT_STATUS_RGTR;
lakshya 20:949d13045431 24 extern uint8_t ATS1_SENTRAL_STATUS_RGTR;
lakshya 20:949d13045431 25 extern uint8_t ATS1_ERROR_RGTR;
lakshya 20:949d13045431 26 extern uint8_t ATS2_EVENT_STATUS_RGTR;
lakshya 20:949d13045431 27 extern uint8_t ATS2_SENTRAL_STATUS_RGTR;
lakshya 20:949d13045431 28 extern uint8_t ATS2_ERROR_RGTR;
lakshya 20:949d13045431 29 extern uint8_t ACS_DATA_ACQ_STATUS;
lakshya 20:949d13045431 30 extern uint8_t ACS_TR_X_PWM;
lakshya 20:949d13045431 31 extern uint8_t ACS_TR_Y_PWM;
lakshya 20:949d13045431 32 extern uint8_t ACS_TR_Z_PWM;
lakshya 20:949d13045431 33 extern uint8_t alarmmode;
lakshya 20:949d13045431 34 extern uint8_t controlmode_mms;
lakshya 20:949d13045431 35 extern uint8_t invjm_mms[9];
lakshya 20:949d13045431 36 extern uint8_t jm_mms[9];
lakshya 20:949d13045431 37 extern uint8_t bb_mms[3];
lakshya 20:949d13045431 38 extern uint8_t singularity_flag_mms;
lakshya 20:949d13045431 39
lakshya 20:949d13045431 40
lakshya 20:949d13045431 41 //bcn
lakshya 20:949d13045431 42 extern uint8_t BCN_SPND_TX;
lakshya 20:949d13045431 43 extern uint8_t BCN_FEN;
lakshya 20:949d13045431 44 extern uint8_t BCN_LONG_MSG_TYPE;
lakshya 20:949d13045431 45 extern uint8_t BCN_TX_MAIN_STATUS;
lakshya 20:949d13045431 46 extern uint8_t BCN_TX_STATUS;
lakshya 20:949d13045431 47 extern uint8_t BCN_INIT_STATUS;
lakshya 20:949d13045431 48 extern uint8_t BCN_FAIL_COUNT;
lakshya 20:949d13045431 49 extern uint16_t BCN_TX_MAIN_COUNTER;
lakshya 20:949d13045431 50
lakshya 20:949d13045431 51 //bae
lakshya 20:949d13045431 52 extern uint8_t BAE_RESET_COUNTER;
lakshya 20:949d13045431 53 extern uint8_t BAE_INIT_STATUS;
lakshya 20:949d13045431 54 extern uint8_t BAE_STANDBY;
lakshya 20:949d13045431 55 extern uint16_t BAE_I2C_COUNTER;
lakshya 20:949d13045431 56
lakshya 20:949d13045431 57 //eps
lakshya 20:949d13045431 58 extern uint8_t ACS_INIT_STATUS;
lakshya 20:949d13045431 59 extern uint16_t EPS_MAIN_COUNTER;
lakshya 20:949d13045431 60
lakshya 20:949d13045431 61 //main
lakshya 20:949d13045431 62 extern uint8_t HTR_CYCLE_COUNTER;
lakshya 20:949d13045431 63 extern uint16_t ACS_MAIN_COUNTER;
lakshya 20:949d13045431 64
lakshya 20:949d13045431 65
lakshya 20:949d13045431 66 //=======================================================
lakshya 20:949d13045431 67
lakshya 20:949d13045431 68
sakthipriya 0:7b4c00e3912f 69 /***********************************************global variable declaration***************************************************************/
sakthipriya 0:7b4c00e3912f 70 extern uint32_t BAE_STATUS;
sakthipriya 0:7b4c00e3912f 71 extern uint32_t BAE_ENABLE;
lakshya 20:949d13045431 72 extern uint8_t BAE_HK_data[134];
lakshya 20:949d13045431 73 //extern char BAE_chardata[74];
lakshya 20:949d13045431 74
lakshya 20:949d13045431 75 //implement them assign them default values
lakshya 20:949d13045431 76 uint8_t EPS_BATT_TEMP_LOW;
lakshya 20:949d13045431 77 uint8_t EPS_BATT_TEMP_HIGH;
lakshya 20:949d13045431 78 uint8_t EPS_BATT_TEMP_DEFAULT;
lakshya 20:949d13045431 79 uint8_t EPS_SOC_LEVEL_12 = 70;
lakshya 20:949d13045431 80 uint8_t EPS_SOC_LEVEL_23 = 90;
lakshya 20:949d13045431 81 uint8_t EPS_BAT_TEMP_LOW;
lakshya 20:949d13045431 82 uint8_t EPS_BAT_TEMP_HIGH;
lakshya 20:949d13045431 83 uint8_t EPS_BAT_TEMP_DEFAULT;
lakshya 20:949d13045431 84 DigitalOut EPS_CHARGER_FAULT(PIN42);
lakshya 20:949d13045431 85 DigitalOut EPS_CHARGER_STATUS(PIN31);
lakshya 20:949d13045431 86 DigitalOut EPS_BATTERY_GAUGE_ALERT(PIN73);
sakthipriya 0:7b4c00e3912f 87
sakthipriya 0:7b4c00e3912f 88 //m_I2C.frequency(10000)
lakshya 15:e09aaaccf134 89 const char RCOMP0= 0x97;// don't know what it is now
sakthipriya 0:7b4c00e3912f 90 BAE_HK_actual actual_data;
sakthipriya 0:7b4c00e3912f 91 BAE_HK_quant quant_data;
sakthipriya 0:7b4c00e3912f 92 BAE_HK_min_max bae_HK_minmax;
sakthipriya 0:7b4c00e3912f 93 BAE_HK_arch arch_data;
sakthipriya 0:7b4c00e3912f 94
lakshya 20:949d13045431 95 /************************battery temperature var*********************************/
lakshya 20:949d13045431 96 //instead just return the approprate value.. test it
sakthipriya 5:bb592f3185cc 97
sakthipriya 0:7b4c00e3912f 98 //......................................Peripheral declarations.........................................................//
sakthipriya 0:7b4c00e3912f 99 Serial pc_eps(USBTX,USBRX);
sakthipriya 3:07e15677a75c 100
sakthipriya 0:7b4c00e3912f 101 I2C m_I2C(PIN85,PIN84);
sakthipriya 0:7b4c00e3912f 102 DigitalOut TRXY(TRXY_DR_EN); //active high
sakthipriya 0:7b4c00e3912f 103 DigitalOut TRZ(TRZ_DR_EN); //active high
sakthipriya 0:7b4c00e3912f 104 DigitalOut EN3V3A(ENBL3V3A);
sakthipriya 0:7b4c00e3912f 105 DigitalOut EN_BTRY_HT(BATT_HEAT);
sakthipriya 0:7b4c00e3912f 106 //DigitalIn BTRY_HT_OUTPUT(BATT_HEAT_OUTPUT);
sakthipriya 3:07e15677a75c 107 //AnalogIn Vbatt_ang(VBATT);
sakthipriya 3:07e15677a75c 108 AnalogIn Batt_voltage(PIN20); //Battery voltage
sakthipriya 3:07e15677a75c 109
lakshya 15:e09aaaccf134 110 SPI spi_bt(PIN99,PIN100,PIN98); //MOSI,MISO,SLK // battery temp something 3
lakshya 15:e09aaaccf134 111 DigitalOut ssn1(PIN19); //Slave select1 // low line master talks
sakthipriya 2:c823d84b4cb0 112 DigitalOut ssn2(PIN21);//Slave select2
sakthipriya 2:c823d84b4cb0 113 //DigitalOut PS(PTB0);
sakthipriya 2:c823d84b4cb0 114 //DigitalOut HS(PTB1);
sakthipriya 2:c823d84b4cb0 115
sakthipriya 3:07e15677a75c 116 AnalogIn CurrentInput(PIN54); // Input from Current Multiplexer //PIN54
sakthipriya 3:07e15677a75c 117 AnalogIn VoltageInput(PIN53); // Input from Voltage Multiplexer //PIN53
sakthipriya 3:07e15677a75c 118 AnalogIn BAE_temp_sensor(PIN55); //Input from BAE temp sensor
sakthipriya 3:07e15677a75c 119
lakshya 15:e09aaaccf134 120 /*mux for reading value one by one*/
sakthipriya 3:07e15677a75c 121 DigitalOut SelectLinea3 (PIN46); // MSB of Select Lines
sakthipriya 3:07e15677a75c 122 DigitalOut SelectLinea2 (PIN45);
sakthipriya 3:07e15677a75c 123 DigitalOut SelectLinea1 (PIN44);
sakthipriya 3:07e15677a75c 124 DigitalOut SelectLinea0 (PIN43); // LSB of Select Lines
sakthipriya 3:07e15677a75c 125
sakthipriya 3:07e15677a75c 126 DigitalOut SelectLineb3 (PIN56); // MSB of Select Lines
sakthipriya 3:07e15677a75c 127 DigitalOut SelectLineb2 (PIN57);
sakthipriya 3:07e15677a75c 128 DigitalOut SelectLineb1 (PIN58);
sakthipriya 3:07e15677a75c 129 DigitalOut SelectLineb0 (PIN59); // LSB of Select Lines
sakthipriya 0:7b4c00e3912f 130
sakthipriya 0:7b4c00e3912f 131 //*********************************************************flags********************************************************//
lakshya 20:949d13045431 132 extern uint8_t EPS_INIT_STATUS ;
lakshya 20:949d13045431 133 extern uint8_t EPS_BATTERY_GAUGE_STATUS ;
lakshya 20:949d13045431 134 extern uint8_t EPS_MAIN_STATUS;
lakshya 20:949d13045431 135 extern uint8_t EPS_BATTERY_TEMP_STATUS ;
lakshya 20:949d13045431 136 extern uint8_t EPS_STATUS ;
lakshya 20:949d13045431 137
lakshya 20:949d13045431 138 extern uint8_t EPS_BTRY_HTR_AUTO ;
lakshya 20:949d13045431 139
lakshya 20:949d13045431 140 //eps cdms fault
lakshya 20:949d13045431 141 extern uint8_t CDMS_SW_STATUS;
lakshya 20:949d13045431 142 extern DigitalOut CDMS_OC_FAULT;
lakshya 20:949d13045431 143 extern bool CDMS_SW_ENABLE;
lakshya 20:949d13045431 144 extern int CDMS_FAULT_COUNTER;
lakshya 20:949d13045431 145
lakshya 20:949d13045431 146 //eps hw faults
lakshya 20:949d13045431 147
lakshya 20:949d13045431 148 /********* EXTERN ACS VAR ********************/
lakshya 20:949d13045431 149 extern uint8_t ACS_ATS_STATUS;
lakshya 20:949d13045431 150 extern uint8_t ACS_TR_Z_SW_STATUS;
lakshya 20:949d13045431 151 extern DigitalOut ACS_TR_Z_ENABLE;
lakshya 20:949d13045431 152 extern DigitalOut ACS_TR_Z_OC_FAULT;
lakshya 20:949d13045431 153 extern DigitalOut ACS_TR_Z_FAULT; //Driver IC fault
lakshya 20:949d13045431 154 extern int ACS_TR_Z_FAULT_COUNTER;
sakthipriya 0:7b4c00e3912f 155
lakshya 20:949d13045431 156 extern uint8_t ACS_TR_XY_SW_STATUS;
lakshya 20:949d13045431 157 extern DigitalOut ACS_TR_XY_ENABLE;
lakshya 20:949d13045431 158 extern DigitalOut ACS_TR_XY_OC_FAULT;
lakshya 20:949d13045431 159 extern DigitalOut ACS_TR_XY_FAULT; //Driver IC fault
lakshya 20:949d13045431 160 extern int ACS_TR_XY_FAULT_COUNTER;
lakshya 20:949d13045431 161
lakshya 20:949d13045431 162 //extern uint8_t ACS_ATS1_SW_STATUS;
lakshya 20:949d13045431 163 extern DigitalOut ATS1_SW_ENABLE;
lakshya 20:949d13045431 164 extern DigitalOut ACS_ATS1_OC_FAULT;
lakshya 20:949d13045431 165 extern int ACS_ATS1_FAULT_COUNTER;
lakshya 20:949d13045431 166
lakshya 20:949d13045431 167 //extern uint8_t ACS_ATS2_SW_STATUS;
lakshya 20:949d13045431 168
lakshya 20:949d13045431 169 extern DigitalOut ATS2_SW_ENABLE;
lakshya 20:949d13045431 170 extern DigitalOut ACS_ATS2_OC_FAULT;
lakshya 20:949d13045431 171 extern int ACS_ATS2_FAULT_COUNTER;
lakshya 20:949d13045431 172
lakshya 20:949d13045431 173 /********* EXTERN BCN VAR ********************/
lakshya 20:949d13045431 174 extern uint8_t BCN_TX_SW_STATUS;
lakshya 20:949d13045431 175 extern bool BCN_TX_ENABLE;
lakshya 20:949d13045431 176 extern DigitalOut BCN_TX_OC_FAULT;
lakshya 20:949d13045431 177 extern int BCN_TX_FAULT_COUNTER;
lakshya 20:949d13045431 178 extern uint8_t BCN_TMP;
sakthipriya 0:7b4c00e3912f 179
sakthipriya 0:7b4c00e3912f 180 //........................................... FUCTIONS.................................................//
sakthipriya 0:7b4c00e3912f 181
sakthipriya 0:7b4c00e3912f 182 void FCTN_EPS_INIT()
sakthipriya 0:7b4c00e3912f 183 {
lakshya 20:949d13045431 184 //// printf("\n\r eps init \n");
lakshya 20:949d13045431 185 EPS_INIT_STATUS = 1 ; //set EPS_INIT_STATUS flag
sakthipriya 3:07e15677a75c 186 // FLAG();
sakthipriya 0:7b4c00e3912f 187 FCTN_BATTERYGAUGE_INIT();
sakthipriya 0:7b4c00e3912f 188 EN3V3A = 1; //enable dc dc converter A
lakshya 15:e09aaaccf134 189 char value=alertFlags(); // initialization part of battery gauge
sakthipriya 0:7b4c00e3912f 190 unsigned short value_u= (short int )value;
sakthipriya 0:7b4c00e3912f 191 value_u &=0x0001;
sakthipriya 0:7b4c00e3912f 192 if(value_u ==0x0001) // battery gauge not initialised
sakthipriya 0:7b4c00e3912f 193 {
sakthipriya 0:7b4c00e3912f 194 actual_data.power_mode = 1;
lakshya 20:949d13045431 195 EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS
sakthipriya 0:7b4c00e3912f 196 }
sakthipriya 0:7b4c00e3912f 197 else
sakthipriya 0:7b4c00e3912f 198 {
sakthipriya 0:7b4c00e3912f 199 actual_data.Batt_gauge_actual[1] = soc();
lakshya 15:e09aaaccf134 200 actual_data.Batt_voltage_actual = Batt_voltage.read()*3.3; //1 corresponds to 3.3 scaling factor
sakthipriya 0:7b4c00e3912f 201 FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]);
lakshya 20:949d13045431 202 EPS_BATTERY_GAUGE_STATUS = 1; //set EPS_BATTERY_GAUGE_STATUS
sakthipriya 0:7b4c00e3912f 203 }
sakthipriya 0:7b4c00e3912f 204
lakshya 20:949d13045431 205 FCTN_BATTTEMP_INIT();
lakshya 20:949d13045431 206 EPS_BATTERY_GAUGE_STATUS = 1;
lakshya 20:949d13045431 207
lakshya 20:949d13045431 208 EPS_INIT_STATUS = 0 ; //clear EPS_INIT_STATUS flag
lakshya 20:949d13045431 209
lakshya 20:949d13045431 210 }
lakshya 20:949d13045431 211
lakshya 20:949d13045431 212 void FCTN_EPS_HANDLE_CDMS_FAULT()
lakshya 20:949d13045431 213 { //Variable names from MMS structure, if not, marked as //Temp name
lakshya 20:949d13045431 214 if(CDMS_SW_STATUS == 0b11) //powered on and oc fault
lakshya 20:949d13045431 215 if(!CDMS_OC_FAULT)
lakshya 20:949d13045431 216 CDMS_SW_STATUS = 0b01; //powered on and working
lakshya 20:949d13045431 217 else
lakshya 20:949d13045431 218 {
lakshya 20:949d13045431 219 if(CDMS_SW_STATUS == 0b10) //powered off and oc fault
lakshya 20:949d13045431 220 CDMS_SW_ENABLE = 1; //Temp name
lakshya 20:949d13045431 221 if(CDMS_OC_FAULT == 0)
lakshya 20:949d13045431 222 {
lakshya 20:949d13045431 223 CDMS_FAULT_COUNTER = 0; //Temp name
lakshya 20:949d13045431 224 CDMS_SW_STATUS = 0b01; //powered on and working
lakshya 20:949d13045431 225 }
lakshya 20:949d13045431 226 else
lakshya 20:949d13045431 227 {
lakshya 20:949d13045431 228 CDMS_FAULT_COUNTER++;
lakshya 20:949d13045431 229 if(CDMS_FAULT_COUNTER == 3)
lakshya 20:949d13045431 230 CDMS_SW_STATUS = 0b11; //powered on and oc fault
lakshya 20:949d13045431 231 else
lakshya 20:949d13045431 232 {
lakshya 20:949d13045431 233 CDMS_SW_ENABLE = 0; //power OFF switch
lakshya 20:949d13045431 234 CDMS_SW_STATUS = 0b10; //powered off and oc fault
lakshya 20:949d13045431 235 }
lakshya 20:949d13045431 236 }
lakshya 20:949d13045431 237 }
lakshya 20:949d13045431 238 }
lakshya 20:949d13045431 239
lakshya 20:949d13045431 240 void FCTN_EPS_HANDLE_HW_FAULTS()
lakshya 20:949d13045431 241 { //Variable names from MMS structure, if not, marked as //Temp name
lakshya 20:949d13045431 242
lakshya 20:949d13045431 243 //--------ACS_TR_Z--------//
lakshya 20:949d13045431 244 if(ACS_TR_Z_SW_STATUS != 0b11) //!disabled
lakshya 20:949d13045431 245 {
lakshya 20:949d13045431 246 if(ACS_TR_Z_SW_STATUS == 0b10) //oc fault and powered off
lakshya 20:949d13045431 247 ACS_TR_Z_ENABLE = 1;
lakshya 20:949d13045431 248 if(ACS_TR_Z_OC_FAULT || ACS_TR_Z_FAULT)
lakshya 20:949d13045431 249 {
lakshya 20:949d13045431 250 ACS_TR_Z_ENABLE = 0;
lakshya 20:949d13045431 251 ACS_TR_Z_FAULT_COUNTER++; //Temp name
lakshya 20:949d13045431 252 if(ACS_TR_Z_FAULT_COUNTER == 3)
lakshya 20:949d13045431 253 ACS_TR_Z_SW_STATUS = 0b11; //disabled
lakshya 20:949d13045431 254 //update in flash as default state at bootup
lakshya 20:949d13045431 255 else ACS_TR_Z_SW_STATUS = 0b10; //oc fault and powered off
lakshya 20:949d13045431 256 }
lakshya 20:949d13045431 257 else
lakshya 20:949d13045431 258 {
lakshya 20:949d13045431 259 ACS_TR_Z_SW_STATUS = 0b01; //powered on and working;
lakshya 20:949d13045431 260 //update in flash also
lakshya 20:949d13045431 261 ACS_TR_Z_FAULT_COUNTER = 0;
lakshya 20:949d13045431 262 }
lakshya 20:949d13045431 263 }
lakshya 20:949d13045431 264
lakshya 20:949d13045431 265 //--------ACS_TR_XY--------//
lakshya 20:949d13045431 266 //Same as ACS_TR_Z, just replace Z with XY
lakshya 20:949d13045431 267 if(ACS_TR_XY_SW_STATUS != 0b11) //!disabled
lakshya 20:949d13045431 268 {
lakshya 20:949d13045431 269 if(ACS_TR_XY_SW_STATUS == 0b10) //oc fault and powered off
lakshya 20:949d13045431 270 ACS_TR_XY_ENABLE = 1;
lakshya 20:949d13045431 271 if(ACS_TR_XY_OC_FAULT || ACS_TR_XY_FAULT)
lakshya 20:949d13045431 272 {
lakshya 20:949d13045431 273 ACS_TR_XY_ENABLE = 0;
lakshya 20:949d13045431 274 ACS_TR_XY_FAULT_COUNTER++; //Temp name
lakshya 20:949d13045431 275 if(ACS_TR_XY_FAULT_COUNTER == 3)
lakshya 20:949d13045431 276 ACS_TR_XY_SW_STATUS = 0b11; //disabled
lakshya 20:949d13045431 277 //update in flash as default state at bootup
lakshya 20:949d13045431 278 else ACS_TR_XY_SW_STATUS = 0b10; //oc fault and powered off
lakshya 20:949d13045431 279 }
lakshya 20:949d13045431 280 else
lakshya 20:949d13045431 281 {
lakshya 20:949d13045431 282 ACS_TR_XY_SW_STATUS = 0b01; //powered on and working;
lakshya 20:949d13045431 283 //update in flash also
lakshya 20:949d13045431 284 ACS_TR_XY_FAULT_COUNTER = 0;
lakshya 20:949d13045431 285 }
lakshya 20:949d13045431 286 }
sakthipriya 0:7b4c00e3912f 287
lakshya 20:949d13045431 288 //--------ACS_ATS1--------//
lakshya 20:949d13045431 289 //Same as ACS_ATS2
lakshya 20:949d13045431 290 //if(ACS_ATS1_SW_STATUS & 0b1100 != 0b1100) //!disabled
lakshya 20:949d13045431 291 if(ACS_ATS_STATUS&0xC0!=0xC0)
lakshya 20:949d13045431 292 {
lakshya 20:949d13045431 293 //if(ACS_ATS1_SW_STATUS & 0b1100 == 0b1000) //oc fault and powered off
lakshya 20:949d13045431 294 if(ACS_ATS_STATUS&0xC0!=0x80)
lakshya 20:949d13045431 295 ATS1_SW_ENABLE = 0; //Temp name
lakshya 20:949d13045431 296 if(ACS_ATS1_OC_FAULT)
lakshya 20:949d13045431 297 {
lakshya 20:949d13045431 298 ATS1_SW_ENABLE = 1;
lakshya 20:949d13045431 299 ACS_ATS1_FAULT_COUNTER++; //Temp name
lakshya 20:949d13045431 300 if(ACS_ATS1_FAULT_COUNTER == 3)
lakshya 20:949d13045431 301 //ACS_ATS1_SW_STATUS = ACS_ATS1_SW_STATUS | 0b1100; //disabled
lakshya 20:949d13045431 302 ACS_ATS_STATUS = (ACS_ATS_STATUS&0x0F)|0xC0;
lakshya 20:949d13045431 303 //update in flash as default state at bootup
lakshya 20:949d13045431 304 else
lakshya 20:949d13045431 305 {
lakshya 20:949d13045431 306 //ACS_ATS1_SW_STATUS = ACS_ATS1_SW_STATUS | 0b1000; //setting to 10xx
lakshya 20:949d13045431 307 ACS_ATS_STATUS = (ACS_ATS_STATUS&0x0F)|0x80;
lakshya 20:949d13045431 308 //ACS_ATS1_SW_STATUS = ACS_ATS1_SW_STATUS & 0b1011; //oc fault and powered off
lakshya 20:949d13045431 309 }
lakshya 20:949d13045431 310 }
lakshya 20:949d13045431 311 else
lakshya 20:949d13045431 312 {
lakshya 20:949d13045431 313 //if(ACS_ATS1_SW_STATUS & 0b1100 == 0b1000) //Device oc fault?
lakshya 20:949d13045431 314 if(ACS_ATS_STATUS&0xC0==0x80)
lakshya 20:949d13045431 315 ATS1_SW_ENABLE = 1;
lakshya 20:949d13045431 316 //ACS_ATS1_SW_STATUS = ACS_ATS1_SW_STATUS & 0b0011; //working but powered off
lakshya 20:949d13045431 317 ACS_ATS_STATUS = ACS_ATS_STATUS&0x3F;
lakshya 20:949d13045431 318 //Update in flash also
lakshya 20:949d13045431 319 ACS_ATS1_FAULT_COUNTER = 0;
lakshya 20:949d13045431 320 }
lakshya 20:949d13045431 321 }
lakshya 20:949d13045431 322
lakshya 20:949d13045431 323 //--------ACS_ATS2--------//
lakshya 20:949d13045431 324 //if(ACS_ATS2_SW_STATUS & 0b1100 != 0b1100) //!disabled
lakshya 20:949d13045431 325 if(ACS_ATS_STATUS&0x0C!=0x0C)
lakshya 20:949d13045431 326 {
lakshya 20:949d13045431 327 //if(ACS_ATS2_SW_STATUS & 0b1100 == 0b1000) //oc fault and powered off
lakshya 20:949d13045431 328 if(ACS_ATS_STATUS&0x0C!=0x08)
lakshya 20:949d13045431 329 ATS2_SW_ENABLE = 0; //Temp name
lakshya 20:949d13045431 330 if(ACS_ATS2_OC_FAULT)
lakshya 20:949d13045431 331 {
lakshya 20:949d13045431 332 ATS2_SW_ENABLE = 1;
lakshya 20:949d13045431 333 ACS_ATS2_FAULT_COUNTER++; //Temp name
lakshya 20:949d13045431 334 if(ACS_ATS2_FAULT_COUNTER == 3)
lakshya 20:949d13045431 335 //ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS | 0b1100; //disabled
lakshya 20:949d13045431 336 ACS_ATS_STATUS = (ACS_ATS_STATUS&0xF0)|0x0C;
lakshya 20:949d13045431 337 //update in flash as default state at bootup
lakshya 20:949d13045431 338 else
lakshya 20:949d13045431 339 {
lakshya 20:949d13045431 340 //ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS | 0b1000; //setting to 10xx
lakshya 20:949d13045431 341 //ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS & 0b1011; //oc fault and powered off
lakshya 20:949d13045431 342 ACS_ATS_STATUS = (ACS_ATS_STATUS&0xF0)|0x08;
lakshya 20:949d13045431 343 }
lakshya 20:949d13045431 344 }
lakshya 20:949d13045431 345 else
lakshya 20:949d13045431 346 {
lakshya 20:949d13045431 347 //if(ACS_ATS2_SW_STATUS & 0b1100 == 0b1000) //Device oc fault?
lakshya 20:949d13045431 348 if(ACS_ATS_STATUS&0x0C==0x08)
lakshya 20:949d13045431 349 ATS2_SW_ENABLE = 1;
lakshya 20:949d13045431 350 //ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS & 0b0011; //working but powered off
lakshya 20:949d13045431 351 ACS_ATS_STATUS = ACS_ATS_STATUS&0xF3;
lakshya 20:949d13045431 352 //Update in flash also
lakshya 20:949d13045431 353 ACS_ATS2_FAULT_COUNTER = 0;
lakshya 20:949d13045431 354 }
lakshya 20:949d13045431 355 }
lakshya 20:949d13045431 356
lakshya 20:949d13045431 357 //--------BCN_TX----------//
lakshya 20:949d13045431 358 if(BCN_TX_SW_STATUS != 0b11) //!disabled
lakshya 20:949d13045431 359 {
lakshya 20:949d13045431 360 if(BCN_TX_SW_STATUS == 0b10) //oc fault and powered off
lakshya 20:949d13045431 361 BCN_TX_ENABLE = 1; //Temp name
lakshya 20:949d13045431 362 if(BCN_TX_OC_FAULT)
lakshya 20:949d13045431 363 {
lakshya 20:949d13045431 364 BCN_TX_ENABLE = 0;
lakshya 20:949d13045431 365 BCN_TX_FAULT_COUNTER++; //Temp name
lakshya 20:949d13045431 366 if(BCN_TX_FAULT_COUNTER == 3)
lakshya 20:949d13045431 367 BCN_TX_SW_STATUS = 0b11; //disabled
lakshya 20:949d13045431 368 //update in flash as default state at bootup
lakshya 20:949d13045431 369 else BCN_TX_SW_STATUS = 0b10; //oc fault and powered off
lakshya 20:949d13045431 370
lakshya 20:949d13045431 371 }
lakshya 20:949d13045431 372 else
lakshya 20:949d13045431 373 {
lakshya 20:949d13045431 374 BCN_TX_SW_STATUS = 0b01; //powered on and working;
lakshya 20:949d13045431 375 //update in flash also
lakshya 20:949d13045431 376 BCN_TX_FAULT_COUNTER = 0;
lakshya 20:949d13045431 377 }
lakshya 20:949d13045431 378 }
lakshya 20:949d13045431 379
sakthipriya 0:7b4c00e3912f 380 }
sakthipriya 0:7b4c00e3912f 381
sakthipriya 0:7b4c00e3912f 382 //----------------------------------------------------Power algo code--------------------------------------------------------------------//
lakshya 15:e09aaaccf134 383 /*update the power modes*/
lakshya 15:e09aaaccf134 384
sakthipriya 0:7b4c00e3912f 385 void FCTN_EPS_POWERMODE(float soc) //dummy algo
sakthipriya 0:7b4c00e3912f 386 {
sakthipriya 0:7b4c00e3912f 387 if(soc >= 80)
sakthipriya 0:7b4c00e3912f 388 actual_data.power_mode = 4;
sakthipriya 0:7b4c00e3912f 389 else if(soc >= 70 & soc < 80)
sakthipriya 0:7b4c00e3912f 390 actual_data.power_mode = 3;
sakthipriya 0:7b4c00e3912f 391 else if(soc >= 60 & soc < 70)
sakthipriya 0:7b4c00e3912f 392 actual_data.power_mode = 2;
sakthipriya 0:7b4c00e3912f 393 else if(soc < 60)
sakthipriya 0:7b4c00e3912f 394 actual_data.power_mode = 1;
sakthipriya 0:7b4c00e3912f 395 }
sakthipriya 0:7b4c00e3912f 396
sakthipriya 0:7b4c00e3912f 397 //...................................................HK...........................................//
lakshya 15:e09aaaccf134 398 /*reading values*/
sakthipriya 3:07e15677a75c 399
sakthipriya 3:07e15677a75c 400 void FCTN_HK_MAIN()
sakthipriya 3:07e15677a75c 401 {
sakthipriya 3:07e15677a75c 402 int Iteration=0;
sakthipriya 3:07e15677a75c 403
sakthipriya 3:07e15677a75c 404 SelectLinea0=0;
sakthipriya 3:07e15677a75c 405 SelectLinea1=0;
sakthipriya 3:07e15677a75c 406 SelectLinea2=0;
sakthipriya 3:07e15677a75c 407 SelectLinea3=0;
sakthipriya 3:07e15677a75c 408
sakthipriya 3:07e15677a75c 409 SelectLineb0=0;
sakthipriya 3:07e15677a75c 410 SelectLineb1=0;
sakthipriya 3:07e15677a75c 411 SelectLineb2=0;
sakthipriya 3:07e15677a75c 412 SelectLineb3=0;
sakthipriya 3:07e15677a75c 413
sakthipriya 3:07e15677a75c 414 //collecting data
lakshya 20:949d13045431 415 for(Iteration=0; Iteration<16; Iteration++)
lakshya 20:949d13045431 416 {
sakthipriya 3:07e15677a75c 417 actual_data.voltage_actual[Iteration]=VoltageInput.read();
sakthipriya 3:07e15677a75c 418 actual_data.current_actual[Iteration]=CurrentInput.read();
lakshya 20:949d13045431 419
lakshya 20:949d13045431 420 SelectLinea0=!(SelectLinea0);
sakthipriya 3:07e15677a75c 421 if(Iteration%2==1)
sakthipriya 3:07e15677a75c 422 SelectLinea1=!(SelectLinea1);
sakthipriya 3:07e15677a75c 423 if(Iteration%4==3)
sakthipriya 3:07e15677a75c 424 SelectLinea2=!(SelectLinea2);
sakthipriya 3:07e15677a75c 425 if(Iteration%8==7)
sakthipriya 3:07e15677a75c 426 SelectLinea3=!(SelectLinea3);
sakthipriya 3:07e15677a75c 427 int s0,s1,s2,s3;
sakthipriya 3:07e15677a75c 428 s0=SelectLineb0=SelectLinea0;
lakshya 20:949d13045431 429 s1=SelectLineb1=SelectLinea2;
sakthipriya 3:07e15677a75c 430 s2=SelectLineb2=SelectLinea2;
sakthipriya 3:07e15677a75c 431 s3=SelectLineb3=SelectLinea3;
lakshya 20:949d13045431 432 //// printf("\n\r %d %d %d %d", s0,s1,s2,s3);
sakthipriya 3:07e15677a75c 433
sakthipriya 3:07e15677a75c 434 }
lakshya 19:79e69017c855 435 for(Iteration=0; Iteration<16; Iteration++)
lakshya 20:949d13045431 436 {
sakthipriya 3:07e15677a75c 437 if(Iteration==14)
sakthipriya 3:07e15677a75c 438 actual_data.voltage_actual[Iteration]= (-90.7*3.3*actual_data.voltage_actual[Iteration])+190.1543;
sakthipriya 3:07e15677a75c 439 else
sakthipriya 3:07e15677a75c 440 actual_data.voltage_actual[Iteration]= actual_data.voltage_actual[Iteration]*3.3*5.63;
sakthipriya 3:07e15677a75c 441 }
sakthipriya 3:07e15677a75c 442
sakthipriya 3:07e15677a75c 443 for(Iteration=0;Iteration<12;Iteration++){
sakthipriya 3:07e15677a75c 444 if(Iteration<8)
sakthipriya 3:07e15677a75c 445 actual_data.current_actual[Iteration]= actual_data.current_actual[Iteration]*3.3/(50*rsens);
sakthipriya 3:07e15677a75c 446 else
sakthipriya 3:07e15677a75c 447 actual_data.current_actual[Iteration]=actual_data.current_actual[Iteration]*3.3;
sakthipriya 3:07e15677a75c 448 int resistance;
sakthipriya 3:07e15677a75c 449
sakthipriya 3:07e15677a75c 450 resistance=24000*actual_data.current_actual[Iteration]/(3.3-actual_data.current_actual[Iteration]);
sakthipriya 3:07e15677a75c 451 if(actual_data.current_actual[Iteration]>1.47)
sakthipriya 3:07e15677a75c 452 {
sakthipriya 3:07e15677a75c 453 actual_data.current_actual[Iteration]=3694/log(24.032242*resistance);
sakthipriya 3:07e15677a75c 454 }
sakthipriya 3:07e15677a75c 455 else{
sakthipriya 3:07e15677a75c 456
sakthipriya 3:07e15677a75c 457 actual_data.current_actual[Iteration]=3365.4/log(7.60573*resistance);
sakthipriya 3:07e15677a75c 458 }
sakthipriya 3:07e15677a75c 459 }
sakthipriya 3:07e15677a75c 460 actual_data.BAE_temp_actual=(-90.7*3.3*actual_data.BAE_temp_actual)+190.1543;
sakthipriya 3:07e15677a75c 461
sakthipriya 3:07e15677a75c 462 actual_data.Batt_voltage_actual=Batt_voltage.read()*3.3*5.63;
sakthipriya 3:07e15677a75c 463
sakthipriya 3:07e15677a75c 464 //quantizing data
sakthipriya 3:07e15677a75c 465 for(Iteration=0; Iteration<16; Iteration++){
sakthipriya 3:07e15677a75c 466
sakthipriya 3:07e15677a75c 467 if(Iteration==14)
sakthipriya 3:07e15677a75c 468 quant_data.voltage_quant[Iteration]=quantiz(tstart,tstep,actual_data.voltage_actual[Iteration]);
sakthipriya 3:07e15677a75c 469 else
sakthipriya 3:07e15677a75c 470 quant_data.voltage_quant[Iteration]=quantiz(vstart,vstep,actual_data.voltage_actual[Iteration]);
sakthipriya 3:07e15677a75c 471
sakthipriya 3:07e15677a75c 472 }
sakthipriya 3:07e15677a75c 473 for(Iteration=0;Iteration<12;Iteration++){
sakthipriya 3:07e15677a75c 474 if(Iteration<8)
sakthipriya 3:07e15677a75c 475 quant_data.current_quant[Iteration]=quantiz(cstart,cstep,actual_data.current_actual[Iteration]);
sakthipriya 3:07e15677a75c 476 else
sakthipriya 3:07e15677a75c 477 quant_data.current_quant[Iteration]=quantiz(tstart_thermistor,tstep_thermistor,actual_data.current_actual[Iteration]);
sakthipriya 3:07e15677a75c 478 }
sakthipriya 3:07e15677a75c 479 for(Iteration=0;Iteration<2;Iteration++){
sakthipriya 3:07e15677a75c 480
sakthipriya 3:07e15677a75c 481 quant_data.Batt_temp_quant[Iteration]=quantiz(tstart,tstep,actual_data.Batt_temp_actual[Iteration]);
sakthipriya 3:07e15677a75c 482 }
sakthipriya 3:07e15677a75c 483
sakthipriya 3:07e15677a75c 484 quant_data.Batt_gauge_quant[0]=quantiz(vcell_start,vcell_step,actual_data.Batt_gauge_actual[0]);
sakthipriya 3:07e15677a75c 485 quant_data.Batt_gauge_quant[1]=quantiz(soc_start,soc_step,actual_data.Batt_gauge_actual[1]);
sakthipriya 3:07e15677a75c 486 quant_data.Batt_gauge_quant[2]=quantiz(crate_start,crate_step,actual_data.Batt_gauge_actual[2]);
sakthipriya 3:07e15677a75c 487 quant_data.Batt_gauge_alerts=actual_data.Batt_gauge_actual[3];
sakthipriya 3:07e15677a75c 488
sakthipriya 3:07e15677a75c 489 quant_data.BAE_temp_quant=quantiz(tstart,tstep,actual_data.BAE_temp_actual);
sakthipriya 3:07e15677a75c 490
lakshya 20:949d13045431 491 //// for(Iteration=0;Iteration<3;Iteration++){
lakshya 20:949d13045431 492 //// quant_data.AngularSpeed_quant[Iteration]=actual_data.AngularSpeed_actual[Iteration];
lakshya 20:949d13045431 493 //// printf("\n\r w value %f",quant_data.AngularSpeed_quant[Iteration]);
lakshya 20:949d13045431 494 //// }
sakthipriya 3:07e15677a75c 495
lakshya 20:949d13045431 496 //// for(Iteration=0;Iteration<3;Iteration++){
lakshya 20:949d13045431 497 //// quant_data.Bvalue_quant[Iteration]=actual_data.Bvalue_actual[Iteration];
lakshya 20:949d13045431 498 //// printf("\n\r b value %f",quant_data.Bvalue_quant[Iteration]);
lakshya 20:949d13045431 499 //// }
sakthipriya 3:07e15677a75c 500
sakthipriya 3:07e15677a75c 501 quant_data.Batt_voltage_quant=quantiz(vstart,vstep,actual_data.Batt_voltage_actual);
sakthipriya 3:07e15677a75c 502
sakthipriya 3:07e15677a75c 503
sakthipriya 3:07e15677a75c 504 arch_data.Batt_1_temp=quant_data.Batt_temp_quant[0];
sakthipriya 3:07e15677a75c 505 arch_data.Batt_2_temp=quant_data.Batt_temp_quant[1];
sakthipriya 3:07e15677a75c 506 arch_data.EPS_PCB_temp=quant_data.voltage_quant[14];
sakthipriya 3:07e15677a75c 507 arch_data.Batt_SOC=quant_data.Batt_gauge_quant[1];
sakthipriya 3:07e15677a75c 508 arch_data.power_mode=actual_data.power_mode;
sakthipriya 5:bb592f3185cc 509 arch_data.faultPoll_status=actual_data.faultPoll_status;
sakthipriya 5:bb592f3185cc 510 arch_data.faultIr_status=actual_data.faultIr_status;
sakthipriya 3:07e15677a75c 511 arch_data.Batt_voltage=quant_data.Batt_voltage_quant;
lakshya 20:949d13045431 512 //// printf("\n\r in hk");
sakthipriya 3:07e15677a75c 513
sakthipriya 3:07e15677a75c 514 }
sakthipriya 3:07e15677a75c 515
sakthipriya 5:bb592f3185cc 516 void FCTN_APPEND_HKDATA()
sakthipriya 5:bb592f3185cc 517 {
lakshya 20:949d13045431 518 BAE_HK_data[0] = 0x28;
lakshya 20:949d13045431 519 BAE_HK_data[1] = 0x00;
lakshya 20:949d13045431 520 BAE_HK_data[2] = 0x00;
lakshya 20:949d13045431 521 BAE_HK_data[3] = 0x00;
lakshya 20:949d13045431 522 BAE_HK_data[4] = ACS_ATS_STATUS;
lakshya 20:949d13045431 523 BAE_HK_data[5] = ACS_TR_XY_SW_STATUS;
lakshya 20:949d13045431 524 BAE_HK_data[5] = (BAE_HK_data[5]<<2)| ACS_TR_Z_SW_STATUS;
lakshya 20:949d13045431 525 BAE_HK_data[5] = (BAE_HK_data[5]<<1) | ACS_DETUMBLING_ALGO_TYPE;
lakshya 20:949d13045431 526 BAE_HK_data[5] = (BAE_HK_data[5]<<3) | ACS_STATE;
lakshya 20:949d13045431 527 BAE_HK_data[6] = BCN_TX_SW_STATUS;
lakshya 20:949d13045431 528 BAE_HK_data[6] = (BAE_HK_data[6]<<1) | BCN_SPND_TX;
lakshya 20:949d13045431 529 BAE_HK_data[6] = (BAE_HK_data[6]<<1) | BCN_FEN;
lakshya 20:949d13045431 530 BAE_HK_data[6] = (BAE_HK_data[6]<<1) | BCN_LONG_MSG_TYPE;
lakshya 20:949d13045431 531 BAE_HK_data[6] = (BAE_HK_data[6]<<1) | EPS_BTRY_HTR_AUTO;//EPS_BATTERY_HEATER_ENABLE
lakshya 20:949d13045431 532 //now two spares in BAE_HK_data[5]
lakshya 20:949d13045431 533 BAE_HK_data[7] = BAE_RESET_COUNTER;
lakshya 20:949d13045431 534 BAE_HK_data[8] = EPS_SOC_LEVEL_12;
lakshya 20:949d13045431 535 BAE_HK_data[9] = EPS_SOC_LEVEL_23;
lakshya 20:949d13045431 536 BAE_HK_data[10] = ACS_MAG_TIME_DELAY;
lakshya 20:949d13045431 537 BAE_HK_data[11] = ACS_DEMAG_TIME_DELAY;
lakshya 20:949d13045431 538 BAE_HK_data[12] = EPS_BAT_TEMP_LOW;
lakshya 20:949d13045431 539 BAE_HK_data[13] = EPS_BAT_TEMP_HIGH;
lakshya 20:949d13045431 540 BAE_HK_data[14] = EPS_BAT_TEMP_DEFAULT;
lakshya 20:949d13045431 541 BAE_HK_data[15] = ACS_MM_X_COMSN >> 8;
lakshya 20:949d13045431 542 BAE_HK_data[16] = ACS_MM_X_COMSN;
sakthipriya 5:bb592f3185cc 543
lakshya 20:949d13045431 544 BAE_HK_data[17] = ACS_MM_Y_COMSN >> 8;
lakshya 20:949d13045431 545 BAE_HK_data[18] = ACS_MM_Y_COMSN;
lakshya 20:949d13045431 546
lakshya 20:949d13045431 547 BAE_HK_data[19] = ACS_MG_X_COMSN >> 8;
lakshya 20:949d13045431 548 BAE_HK_data[20] = ACS_MG_X_COMSN;
lakshya 20:949d13045431 549
lakshya 20:949d13045431 550 BAE_HK_data[21] = ACS_MG_Y_COMSN >> 8;
lakshya 20:949d13045431 551 BAE_HK_data[22] = ACS_MG_Y_COMSN;
lakshya 20:949d13045431 552
lakshya 20:949d13045431 553 BAE_HK_data[23] = ACS_MM_Z_COMSN >> 8;
lakshya 20:949d13045431 554 BAE_HK_data[24] = ACS_MM_Z_COMSN;
lakshya 20:949d13045431 555
lakshya 20:949d13045431 556 BAE_HK_data[25] = ACS_MG_Z_COMSN >> 8;
lakshya 20:949d13045431 557 BAE_HK_data[26] = ACS_MG_Z_COMSN;
lakshya 20:949d13045431 558
lakshya 20:949d13045431 559 BAE_HK_data[27] = ACS_Z_FIXED_MOMENT >> 8;
lakshya 20:949d13045431 560 BAE_HK_data[28] = ACS_Z_FIXED_MOMENT;
lakshya 20:949d13045431 561
lakshya 20:949d13045431 562 //BAE RAM PARAMETER
lakshya 20:949d13045431 563 BAE_HK_data[29] = BAE_INIT_STATUS;
lakshya 20:949d13045431 564 BAE_HK_data[29] = (BAE_HK_data[29]<<1) | 0;//change it================================
lakshya 20:949d13045431 565 BAE_HK_data[29] = (BAE_HK_data[29]<<1) | BCN_INIT_STATUS;
lakshya 20:949d13045431 566 BAE_HK_data[29] = (BAE_HK_data[29]<<1) | BCN_TX_MAIN_STATUS;
lakshya 20:949d13045431 567 BAE_HK_data[29] = (BAE_HK_data[29]<<3) | BCN_TX_STATUS;
lakshya 20:949d13045431 568 BAE_HK_data[29] = (BAE_HK_data[29]<<3) | ACS_INIT_STATUS;
lakshya 20:949d13045431 569
lakshya 20:949d13045431 570 BAE_HK_data[30] = ACS_DATA_ACQ_STATUS;
lakshya 20:949d13045431 571 BAE_HK_data[30] = (BAE_HK_data[30]<<1) | ACS_MAIN_STATUS;
lakshya 20:949d13045431 572 BAE_HK_data[30] = (BAE_HK_data[30]<<3) | ACS_STATUS;
lakshya 20:949d13045431 573 BAE_HK_data[30] = (BAE_HK_data[30]<<1) | EPS_INIT_STATUS;
lakshya 20:949d13045431 574 BAE_HK_data[30] = (BAE_HK_data[30]<<3) | EPS_BATTERY_GAUGE_STATUS;
lakshya 20:949d13045431 575
lakshya 20:949d13045431 576 BAE_HK_data[31] = EPS_MAIN_STATUS;
lakshya 20:949d13045431 577 BAE_HK_data[31] = (BAE_HK_data[31]<<1) | EPS_BATTERY_TEMP_STATUS;
lakshya 20:949d13045431 578 BAE_HK_data[31] = (BAE_HK_data[31]<<3) | EPS_STATUS;
lakshya 20:949d13045431 579 BAE_HK_data[31] = (BAE_HK_data[31]<<2) | CDMS_SW_STATUS;
lakshya 20:949d13045431 580 //BAE_HK_data[31] = (BAE_HK_data[31]<<1) | EPS_BTRY_HTR_STATUS;//new to : implement===========
lakshya 20:949d13045431 581 //spare 1
lakshya 20:949d13045431 582 //spare 5
lakshya 20:949d13045431 583 BAE_HK_data[32] = BAE_STANDBY;
lakshya 20:949d13045431 584 // 6 next telemetries value to be given by registers
lakshya 20:949d13045431 585 BAE_HK_data[33] = ATS1_EVENT_STATUS_RGTR;
lakshya 20:949d13045431 586 BAE_HK_data[34] = ATS1_SENTRAL_STATUS_RGTR;
lakshya 20:949d13045431 587 BAE_HK_data[35] = ATS1_ERROR_RGTR;
lakshya 20:949d13045431 588 BAE_HK_data[36] = ATS2_EVENT_STATUS_RGTR;
lakshya 20:949d13045431 589 BAE_HK_data[37] = ATS2_SENTRAL_STATUS_RGTR;
lakshya 20:949d13045431 590 BAE_HK_data[38] = ATS2_ERROR_RGTR;
lakshya 20:949d13045431 591
lakshya 20:949d13045431 592 BAE_HK_data[39] = BCN_FAIL_COUNT;
lakshya 20:949d13045431 593 BAE_HK_data[40] = actual_data.power_mode;
lakshya 20:949d13045431 594 BAE_HK_data[41] = HTR_CYCLE_COUNTER;//new to : implement
lakshya 20:949d13045431 595
lakshya 20:949d13045431 596 BAE_HK_data[42] = BAE_I2C_COUNTER;
lakshya 20:949d13045431 597 BAE_HK_data[43] = BAE_I2C_COUNTER>>8;
lakshya 20:949d13045431 598 BAE_HK_data[44] = ACS_MAIN_COUNTER;
lakshya 20:949d13045431 599 BAE_HK_data[45] = ACS_MAIN_COUNTER>>8;
lakshya 20:949d13045431 600 BAE_HK_data[46] = BCN_TX_MAIN_COUNTER;
lakshya 20:949d13045431 601 BAE_HK_data[47] = BCN_TX_MAIN_COUNTER>>8;
lakshya 20:949d13045431 602 BAE_HK_data[48] = EPS_MAIN_COUNTER;
lakshya 20:949d13045431 603 BAE_HK_data[49] = EPS_MAIN_COUNTER>>8;
lakshya 20:949d13045431 604 BAE_HK_data[50] = actual_data.bit_data_acs_mm[0];
lakshya 20:949d13045431 605 BAE_HK_data[51] = actual_data.bit_data_acs_mm[0]>>8;
lakshya 20:949d13045431 606 BAE_HK_data[52] = actual_data.bit_data_acs_mm[1];
lakshya 20:949d13045431 607 BAE_HK_data[53] = actual_data.bit_data_acs_mm[1]>>8;
lakshya 20:949d13045431 608 BAE_HK_data[54] = actual_data.bit_data_acs_mm[2];
lakshya 20:949d13045431 609 BAE_HK_data[55] = actual_data.bit_data_acs_mm[2]>>8;
lakshya 20:949d13045431 610
lakshya 20:949d13045431 611 BAE_HK_data[56] = actual_data.bit_data_acs_mg[0];
lakshya 20:949d13045431 612 BAE_HK_data[57] = actual_data.bit_data_acs_mg[0]>>8;
lakshya 20:949d13045431 613 BAE_HK_data[58] = actual_data.bit_data_acs_mg[1];
lakshya 20:949d13045431 614 BAE_HK_data[59] = actual_data.bit_data_acs_mg[1]>>8;
lakshya 20:949d13045431 615 BAE_HK_data[60] = actual_data.bit_data_acs_mg[2];
lakshya 20:949d13045431 616 BAE_HK_data[61] = actual_data.bit_data_acs_mg[2]>>8;
lakshya 20:949d13045431 617
lakshya 20:949d13045431 618 BAE_HK_data[62] = BCN_TX_OC_FAULT;
lakshya 20:949d13045431 619 BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_XY_ENABLE;
lakshya 20:949d13045431 620 BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_Z_ENABLE;
lakshya 20:949d13045431 621 BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_XY_OC_FAULT;
lakshya 20:949d13045431 622 BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_Z_OC_FAULT;
lakshya 20:949d13045431 623 BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_XY_FAULT;
lakshya 20:949d13045431 624 BAE_HK_data[62] = (BAE_HK_data[62]<<1) | EPS_CHARGER_FAULT;
lakshya 20:949d13045431 625 BAE_HK_data[62] = (BAE_HK_data[62]<<1) | EPS_CHARGER_STATUS;
lakshya 20:949d13045431 626
lakshya 20:949d13045431 627 BAE_HK_data[63] = (BAE_HK_data[63]<<1) | EPS_BATTERY_GAUGE_ALERT;
lakshya 20:949d13045431 628 BAE_HK_data[63] = (BAE_HK_data[63]<<1) | CDMS_OC_FAULT;
lakshya 20:949d13045431 629 BAE_HK_data[63] = (BAE_HK_data[63]<<1) | ACS_ATS1_OC_FAULT;
lakshya 20:949d13045431 630 BAE_HK_data[63] = (BAE_HK_data[63]<<1) | ACS_ATS2_OC_FAULT;
lakshya 20:949d13045431 631 BAE_HK_data[63] = (BAE_HK_data[63]<<1) | ACS_TR_Z_FAULT;
lakshya 20:949d13045431 632 //3 spare
lakshya 20:949d13045431 633
lakshya 20:949d13045431 634 BAE_HK_data[64] = ACS_TR_X_PWM;
lakshya 20:949d13045431 635 BAE_HK_data[65] = ACS_TR_Y_PWM;
lakshya 20:949d13045431 636 BAE_HK_data[66] = ACS_TR_Z_PWM;
lakshya 20:949d13045431 637 //spare byte
lakshya 20:949d13045431 638 //assigned it to counter HTR_CYCLE_COUNTER
lakshya 20:949d13045431 639
lakshya 20:949d13045431 640 //assign it b_scz_angle
lakshya 20:949d13045431 641 BAE_HK_data[67] = 0x00;
lakshya 20:949d13045431 642 BAE_HK_data[67] = (BAE_HK_data[65]<<1) | alarmmode;
lakshya 20:949d13045431 643 BAE_HK_data[67] = (BAE_HK_data[65]<<1) | controlmode_mms;
lakshya 20:949d13045431 644 //2 bit spare
lakshya 20:949d13045431 645
lakshya 20:949d13045431 646 for(int i=0;i<9;i++)
lakshya 20:949d13045431 647 {
lakshya 20:949d13045431 648 BAE_HK_data[68+i] = invjm_mms[i];
lakshya 20:949d13045431 649 BAE_HK_data[81+i] = jm_mms[i];
lakshya 20:949d13045431 650 }
lakshya 20:949d13045431 651
lakshya 20:949d13045431 652 for(int i=0;i<3;i++)
lakshya 20:949d13045431 653 BAE_HK_data[77+i] = bb_mms[i];
lakshya 20:949d13045431 654
lakshya 20:949d13045431 655 BAE_HK_data[80] = singularity_flag_mms;
lakshya 20:949d13045431 656
lakshya 20:949d13045431 657 for(int i=0;i<16;i++)
lakshya 20:949d13045431 658 {
lakshya 20:949d13045431 659 BAE_HK_data[90+i] = quant_data.voltage_quant[i];
lakshya 20:949d13045431 660 BAE_HK_data[106+i] = quant_data.current_quant[i];
lakshya 20:949d13045431 661 }
lakshya 20:949d13045431 662
lakshya 20:949d13045431 663 BAE_HK_data[122] = quant_data.Batt_voltage_quant;
lakshya 20:949d13045431 664 BAE_HK_data[123] = quant_data.BAE_temp_quant;
lakshya 20:949d13045431 665 BAE_HK_data[124] = (uint8_t)(actual_data.Batt_gauge_actual[1]);
lakshya 20:949d13045431 666 BAE_HK_data[125] = quant_data.Batt_temp_quant[0];
lakshya 20:949d13045431 667 BAE_HK_data[126] = quant_data.Batt_temp_quant[1];
lakshya 20:949d13045431 668 BAE_HK_data[127] = BCN_TMP;
lakshya 20:949d13045431 669 BAE_HK_data[128] = 0x00;
lakshya 20:949d13045431 670 BAE_HK_data[129] = 0x00;
lakshya 20:949d13045431 671 BAE_HK_data[130] = 0x00;
lakshya 20:949d13045431 672 BAE_HK_data[131] = 0x00;
lakshya 20:949d13045431 673 uint16_t crc = crc_hk_data();
lakshya 20:949d13045431 674 BAE_HK_data[132] = (uint8_t)(crc >> 8);
lakshya 20:949d13045431 675 BAE_HK_data[133] = crc;
lakshya 20:949d13045431 676
lakshya 20:949d13045431 677 //===================================================
lakshya 20:949d13045431 678 /* can be retrived from the earlier code (function)*/
sakthipriya 5:bb592f3185cc 679 }
sakthipriya 5:bb592f3185cc 680
sakthipriya 5:bb592f3185cc 681 uint8_t quantiz(float start,float step,float x)
sakthipriya 0:7b4c00e3912f 682 {
sakthipriya 0:7b4c00e3912f 683 int y=(x-start)/step;
sakthipriya 0:7b4c00e3912f 684 if(y<=0)y=0;
sakthipriya 0:7b4c00e3912f 685 if(y>=255)y=255;
sakthipriya 0:7b4c00e3912f 686 return y;
sakthipriya 0:7b4c00e3912f 687 }
sakthipriya 0:7b4c00e3912f 688
sakthipriya 3:07e15677a75c 689 bool firstCount=true; // goes to EPS init
sakthipriya 3:07e15677a75c 690
sakthipriya 3:07e15677a75c 691
sakthipriya 3:07e15677a75c 692 void saveMin(char x,char y){
sakthipriya 3:07e15677a75c 693 if(y<x){
sakthipriya 3:07e15677a75c 694 x=y;
sakthipriya 3:07e15677a75c 695 }
sakthipriya 3:07e15677a75c 696
sakthipriya 3:07e15677a75c 697 }
sakthipriya 3:07e15677a75c 698 void saveMax(char x,char y){
sakthipriya 3:07e15677a75c 699 if (y>x)
sakthipriya 3:07e15677a75c 700 {
sakthipriya 3:07e15677a75c 701 x=y;
sakthipriya 3:07e15677a75c 702 }
sakthipriya 0:7b4c00e3912f 703 }
sakthipriya 0:7b4c00e3912f 704
sakthipriya 3:07e15677a75c 705
sakthipriya 3:07e15677a75c 706 void minMaxHkData(){
sakthipriya 3:07e15677a75c 707 if(firstCount==true){
sakthipriya 3:07e15677a75c 708 for (int i = 0; i < 16; ++i){
sakthipriya 3:07e15677a75c 709 bae_HK_minmax.voltage_min[i] = quant_data.voltage_quant[i];
sakthipriya 3:07e15677a75c 710 bae_HK_minmax.voltage_max[i] = quant_data.voltage_quant[i];
sakthipriya 3:07e15677a75c 711 }
sakthipriya 3:07e15677a75c 712 for (int i = 0; i < 12; ++i){
sakthipriya 3:07e15677a75c 713 bae_HK_minmax.current_min[i] = quant_data.current_quant[i];
sakthipriya 3:07e15677a75c 714 bae_HK_minmax.current_max[i] = quant_data.current_quant[i];
sakthipriya 3:07e15677a75c 715 }
sakthipriya 3:07e15677a75c 716
sakthipriya 3:07e15677a75c 717 for (int i = 0; i < 2; ++i){
sakthipriya 3:07e15677a75c 718 bae_HK_minmax.Batt_temp_min[i] = quant_data.Batt_temp_quant[i];
sakthipriya 3:07e15677a75c 719 bae_HK_minmax.Batt_temp_max[i] = quant_data.Batt_temp_quant[i];
sakthipriya 3:07e15677a75c 720 }
lakshya 20:949d13045431 721 /*
sakthipriya 3:07e15677a75c 722 for (int i = 0; i < 3; ++i){
sakthipriya 3:07e15677a75c 723 bae_HK_minmax.Batt_gauge_min[i] = quant_data.Batt_gauge_quant[i];
sakthipriya 3:07e15677a75c 724 bae_HK_minmax.Batt_gauge_max[i] = quant_data.Batt_gauge_quant[i];
sakthipriya 3:07e15677a75c 725 }
lakshya 20:949d13045431 726 */
lakshya 20:949d13045431 727 bae_HK_minmax.Batt_SOC_min = quant_data.Batt_gauge_quant[1];
lakshya 20:949d13045431 728 bae_HK_minmax.Batt_SOC_max = quant_data.Batt_gauge_quant[1];
lakshya 20:949d13045431 729
lakshya 20:949d13045431 730 bae_HK_minmax.BCN_TEMP_min = BCN_TMP;
lakshya 20:949d13045431 731 bae_HK_minmax.BCN_TEMP_min = BCN_TMP;
lakshya 20:949d13045431 732
sakthipriya 3:07e15677a75c 733 for (int i = 0; i < 3; ++i){
lakshya 20:949d13045431 734 bae_HK_minmax.bit_data_acs_mg_min[i] = actual_data.bit_data_acs_mg[i];
lakshya 20:949d13045431 735 bae_HK_minmax.bit_data_acs_mg_max[i] = actual_data.bit_data_acs_mg[i];
sakthipriya 3:07e15677a75c 736 }
sakthipriya 3:07e15677a75c 737 for (int i = 0; i < 3; ++i){
lakshya 20:949d13045431 738 bae_HK_minmax.bit_data_acs_mm_min[i] = actual_data.bit_data_acs_mm[i];//Bvalue_quant earlier
lakshya 20:949d13045431 739 bae_HK_minmax.bit_data_acs_mm_max[i] = actual_data.bit_data_acs_mm[i];
sakthipriya 3:07e15677a75c 740 }
sakthipriya 3:07e15677a75c 741 bae_HK_minmax.BAE_temp_min=quant_data.BAE_temp_quant;
sakthipriya 3:07e15677a75c 742 bae_HK_minmax.BAE_temp_max=quant_data.BAE_temp_quant;
sakthipriya 3:07e15677a75c 743 bae_HK_minmax.Batt_voltage_min=quant_data.Batt_voltage_quant;
sakthipriya 3:07e15677a75c 744 bae_HK_minmax.Batt_voltage_max=quant_data.Batt_voltage_quant;
sakthipriya 3:07e15677a75c 745
sakthipriya 3:07e15677a75c 746 }
sakthipriya 3:07e15677a75c 747 else {
sakthipriya 3:07e15677a75c 748 for (int i = 0; i < 16; ++i)
sakthipriya 3:07e15677a75c 749 {
sakthipriya 3:07e15677a75c 750 saveMin(bae_HK_minmax.voltage_min[i],quant_data.voltage_quant[i]);
sakthipriya 3:07e15677a75c 751 saveMax(bae_HK_minmax.voltage_max[i],quant_data.voltage_quant[i]);
sakthipriya 3:07e15677a75c 752 }
sakthipriya 3:07e15677a75c 753 for (int i = 0; i < 12; ++i)
sakthipriya 3:07e15677a75c 754 {
sakthipriya 3:07e15677a75c 755 saveMin(bae_HK_minmax.current_min[i],quant_data.current_quant[i]);
sakthipriya 3:07e15677a75c 756 saveMax(bae_HK_minmax.current_max[i],quant_data.current_quant[i]);
sakthipriya 3:07e15677a75c 757 }
sakthipriya 3:07e15677a75c 758
sakthipriya 3:07e15677a75c 759 for (int i = 0; i < 2; ++i)
sakthipriya 3:07e15677a75c 760 {
sakthipriya 3:07e15677a75c 761 saveMin(bae_HK_minmax.Batt_temp_min[i],quant_data.Batt_temp_quant[i]);
sakthipriya 3:07e15677a75c 762 saveMax(bae_HK_minmax.Batt_temp_max[i],quant_data.Batt_temp_quant[i]);
sakthipriya 3:07e15677a75c 763 }
lakshya 20:949d13045431 764 /*
sakthipriya 3:07e15677a75c 765 for (int i = 0; i < 3; ++i)
sakthipriya 3:07e15677a75c 766 {
sakthipriya 3:07e15677a75c 767 saveMin(bae_HK_minmax.Batt_gauge_min[i], quant_data.Batt_gauge_quant[i]);
sakthipriya 3:07e15677a75c 768 saveMax(bae_HK_minmax.Batt_gauge_max[i], quant_data.Batt_gauge_quant[i]);
sakthipriya 3:07e15677a75c 769 }
lakshya 20:949d13045431 770 */
lakshya 20:949d13045431 771 saveMin(bae_HK_minmax.Batt_SOC_min, quant_data.Batt_gauge_quant[1]);
lakshya 20:949d13045431 772 saveMax(bae_HK_minmax.Batt_SOC_max, quant_data.Batt_gauge_quant[1]);
lakshya 20:949d13045431 773
lakshya 20:949d13045431 774 saveMin(bae_HK_minmax.BCN_TEMP_min, BCN_TMP);
lakshya 20:949d13045431 775 saveMin(bae_HK_minmax.BCN_TEMP_max, BCN_TMP);
lakshya 20:949d13045431 776
sakthipriya 3:07e15677a75c 777 for (int i = 0; i < 3; ++i)
sakthipriya 3:07e15677a75c 778 {
lakshya 20:949d13045431 779 saveMin(bae_HK_minmax.bit_data_acs_mg_min[i], actual_data.bit_data_acs_mg[i]);
lakshya 20:949d13045431 780 saveMax(bae_HK_minmax.bit_data_acs_mg_max[i], actual_data.bit_data_acs_mg[i]);
sakthipriya 3:07e15677a75c 781 }
sakthipriya 3:07e15677a75c 782 for (int i = 0; i < 3; ++i)
sakthipriya 3:07e15677a75c 783 {
lakshya 20:949d13045431 784 saveMin(bae_HK_minmax.bit_data_acs_mm_min[i], actual_data.bit_data_acs_mm[i]);
lakshya 20:949d13045431 785 saveMax(bae_HK_minmax.bit_data_acs_mm_max[i], actual_data.bit_data_acs_mm[i]);
sakthipriya 3:07e15677a75c 786 }
sakthipriya 3:07e15677a75c 787 saveMin(bae_HK_minmax.BAE_temp_min,quant_data.BAE_temp_quant);
sakthipriya 3:07e15677a75c 788 saveMax(bae_HK_minmax.BAE_temp_max,quant_data.BAE_temp_quant);
sakthipriya 3:07e15677a75c 789 saveMin(bae_HK_minmax.Batt_voltage_min,quant_data.Batt_voltage_quant);
sakthipriya 3:07e15677a75c 790 saveMin(bae_HK_minmax.Batt_voltage_max,quant_data.Batt_voltage_quant);
sakthipriya 3:07e15677a75c 791
sakthipriya 3:07e15677a75c 792
sakthipriya 3:07e15677a75c 793 }
sakthipriya 3:07e15677a75c 794 firstCount=false;
sakthipriya 3:07e15677a75c 795 }
sakthipriya 3:07e15677a75c 796
sakthipriya 3:07e15677a75c 797
sakthipriya 0:7b4c00e3912f 798 //............................................BATTERY GAUGE......................................//
sakthipriya 0:7b4c00e3912f 799 void FCTN_BATTERYGAUGE_INIT()
sakthipriya 0:7b4c00e3912f 800 {
sakthipriya 0:7b4c00e3912f 801 disable_sleep();
sakthipriya 0:7b4c00e3912f 802 disable_hibernate();
sakthipriya 0:7b4c00e3912f 803 socChangeAlertEnabled(true); //enabling alert on soc changing by 1%
sakthipriya 0:7b4c00e3912f 804 emptyAlertThreshold(32);//setting empty alert threshold to 32% soc
sakthipriya 0:7b4c00e3912f 805 vAlertMinMaxThreshold();//set min, max value of Valrt register
sakthipriya 0:7b4c00e3912f 806 vResetThresholdSet();//set threshold voltage for reset
sakthipriya 0:7b4c00e3912f 807 vResetAlertEnabled(true);//enable alert on reset for V < Vreset
sakthipriya 0:7b4c00e3912f 808 }
sakthipriya 0:7b4c00e3912f 809
sakthipriya 0:7b4c00e3912f 810 void FCTN_BATTERYGAUGE_MAIN(float Battery_parameters[4])
sakthipriya 0:7b4c00e3912f 811 {
lakshya 20:949d13045431 812 //// printf("\n\r battery gauge \n");
sakthipriya 0:7b4c00e3912f 813
sakthipriya 3:07e15677a75c 814 float temp=30; //=Battery_temp (from temp sensor on battery board) //value of battery temperature in C currently given a dummy value. Should be updated everytime.
sakthipriya 0:7b4c00e3912f 815 tempCompensation(temp);
sakthipriya 0:7b4c00e3912f 816
sakthipriya 0:7b4c00e3912f 817
sakthipriya 0:7b4c00e3912f 818 Battery_parameters[0]=vcell();
sakthipriya 0:7b4c00e3912f 819 Battery_parameters[1]=soc();
sakthipriya 0:7b4c00e3912f 820 Battery_parameters[2]=crate();
sakthipriya 0:7b4c00e3912f 821
lakshya 20:949d13045431 822 //// printf("\nVcell=%f",vcell()); //remove this for final code
lakshya 20:949d13045431 823 //// printf("\nSOC=%f",soc()); //remove this for final code
lakshya 20:949d13045431 824 //// printf("\nC_rate=%f",crate()); //remove this for final code
sakthipriya 0:7b4c00e3912f 825
sakthipriya 0:7b4c00e3912f 826
sakthipriya 0:7b4c00e3912f 827 if (alerting()== true) //alert is on
sakthipriya 0:7b4c00e3912f 828 {
sakthipriya 0:7b4c00e3912f 829 Battery_parameters[3]=alertFlags();
sakthipriya 0:7b4c00e3912f 830 clearAlert();//clear alert
sakthipriya 0:7b4c00e3912f 831 clearAlertFlags();//clear all alert flags
sakthipriya 0:7b4c00e3912f 832 }
sakthipriya 0:7b4c00e3912f 833
sakthipriya 0:7b4c00e3912f 834 }
sakthipriya 0:7b4c00e3912f 835
sakthipriya 0:7b4c00e3912f 836 unsigned short read(char reg)
sakthipriya 0:7b4c00e3912f 837 {
sakthipriya 0:7b4c00e3912f 838
sakthipriya 0:7b4c00e3912f 839 //Create a temporary buffer
sakthipriya 0:7b4c00e3912f 840 char buff[2];
sakthipriya 0:7b4c00e3912f 841
sakthipriya 0:7b4c00e3912f 842 //Select the register
sakthipriya 0:7b4c00e3912f 843 m_I2C.write(m_ADDR, &reg, 1, true);
sakthipriya 0:7b4c00e3912f 844
sakthipriya 0:7b4c00e3912f 845 //Read the 16-bit register
sakthipriya 0:7b4c00e3912f 846 m_I2C.read(m_ADDR, buff, 2);
sakthipriya 0:7b4c00e3912f 847
sakthipriya 0:7b4c00e3912f 848 //Return the combined 16-bit value
sakthipriya 0:7b4c00e3912f 849 return (buff[0] << 8) | buff[1];
sakthipriya 0:7b4c00e3912f 850 }
sakthipriya 0:7b4c00e3912f 851
sakthipriya 3:07e15677a75c 852
sakthipriya 1:446a959e36ce 853
sakthipriya 3:07e15677a75c 854
sakthipriya 0:7b4c00e3912f 855
sakthipriya 0:7b4c00e3912f 856 void write(char reg, unsigned short data)
sakthipriya 0:7b4c00e3912f 857 {
sakthipriya 0:7b4c00e3912f 858 //Create a temporary buffer
sakthipriya 0:7b4c00e3912f 859 char buff[3];
sakthipriya 0:7b4c00e3912f 860
sakthipriya 0:7b4c00e3912f 861 //Load the register address and 16-bit data
sakthipriya 0:7b4c00e3912f 862 buff[0] = reg;
sakthipriya 0:7b4c00e3912f 863 buff[1] = data >> 8;
sakthipriya 0:7b4c00e3912f 864 buff[2] = data;
sakthipriya 0:7b4c00e3912f 865
sakthipriya 0:7b4c00e3912f 866 //Write the data
sakthipriya 0:7b4c00e3912f 867 m_I2C.write(m_ADDR, buff, 3);
sakthipriya 0:7b4c00e3912f 868 }
sakthipriya 0:7b4c00e3912f 869
sakthipriya 0:7b4c00e3912f 870
sakthipriya 0:7b4c00e3912f 871
sakthipriya 0:7b4c00e3912f 872 // Command the MAX17049 to perform a power-on reset
sakthipriya 0:7b4c00e3912f 873 void reset()
sakthipriya 0:7b4c00e3912f 874 {
sakthipriya 0:7b4c00e3912f 875 //Write the POR command
sakthipriya 0:7b4c00e3912f 876 write(REG_CMD, 0x5400);
sakthipriya 0:7b4c00e3912f 877 }
sakthipriya 0:7b4c00e3912f 878
sakthipriya 0:7b4c00e3912f 879 // Command the MAX17049 to perform a QuickStart
sakthipriya 0:7b4c00e3912f 880 void quickStart()
sakthipriya 0:7b4c00e3912f 881 {
sakthipriya 0:7b4c00e3912f 882 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 883 unsigned short value = read(REG_MODE);
lakshya 15:e09aaaccf134 884
sakthipriya 0:7b4c00e3912f 885 //Set the QuickStart bit
sakthipriya 0:7b4c00e3912f 886 value |= (1 << 14);
sakthipriya 0:7b4c00e3912f 887
sakthipriya 0:7b4c00e3912f 888 //Write the value back out
sakthipriya 0:7b4c00e3912f 889 write(REG_MODE, value);
sakthipriya 0:7b4c00e3912f 890 }
sakthipriya 0:7b4c00e3912f 891
sakthipriya 0:7b4c00e3912f 892
sakthipriya 0:7b4c00e3912f 893 //disable sleep
sakthipriya 0:7b4c00e3912f 894 void disable_sleep()
sakthipriya 0:7b4c00e3912f 895 {
sakthipriya 0:7b4c00e3912f 896 unsigned short value = read(REG_MODE);
sakthipriya 0:7b4c00e3912f 897 value &= ~(1 << 13);
sakthipriya 0:7b4c00e3912f 898 write(REG_MODE, value);
sakthipriya 0:7b4c00e3912f 899 }
sakthipriya 0:7b4c00e3912f 900
sakthipriya 0:7b4c00e3912f 901 //disable the hibernate of the MAX17049
sakthipriya 0:7b4c00e3912f 902 void disable_hibernate()
sakthipriya 0:7b4c00e3912f 903 {
sakthipriya 0:7b4c00e3912f 904 write(REG_HIBRT, 0x0000);
sakthipriya 0:7b4c00e3912f 905 }
sakthipriya 0:7b4c00e3912f 906
sakthipriya 0:7b4c00e3912f 907
sakthipriya 0:7b4c00e3912f 908 // Enable or disable the SOC 1% change alert on the MAX17049
sakthipriya 0:7b4c00e3912f 909 void socChangeAlertEnabled(bool enabled)
sakthipriya 0:7b4c00e3912f 910 {
sakthipriya 0:7b4c00e3912f 911 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 912 unsigned short value = read(REG_CONFIG);
sakthipriya 0:7b4c00e3912f 913
sakthipriya 0:7b4c00e3912f 914 //Set or clear the ALSC bit
sakthipriya 0:7b4c00e3912f 915 if (enabled)
sakthipriya 0:7b4c00e3912f 916 value |= (1 << 6);
sakthipriya 0:7b4c00e3912f 917 else
sakthipriya 0:7b4c00e3912f 918 value &= ~(1 << 6);
sakthipriya 0:7b4c00e3912f 919
sakthipriya 0:7b4c00e3912f 920 //Write the value back out
sakthipriya 0:7b4c00e3912f 921 write(REG_CONFIG, value);
sakthipriya 0:7b4c00e3912f 922 }
sakthipriya 0:7b4c00e3912f 923
sakthipriya 0:7b4c00e3912f 924
sakthipriya 0:7b4c00e3912f 925 void compensation(char rcomp)
sakthipriya 0:7b4c00e3912f 926 {
sakthipriya 0:7b4c00e3912f 927 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 928 unsigned short value = read(REG_CONFIG);
sakthipriya 0:7b4c00e3912f 929
sakthipriya 0:7b4c00e3912f 930 //Update the register value
sakthipriya 0:7b4c00e3912f 931 value &= 0x00FF;
sakthipriya 0:7b4c00e3912f 932 value |= rcomp << 8;
sakthipriya 0:7b4c00e3912f 933
sakthipriya 0:7b4c00e3912f 934 //Write the value back out
sakthipriya 0:7b4c00e3912f 935 write(REG_CONFIG, value);
sakthipriya 0:7b4c00e3912f 936 }
sakthipriya 0:7b4c00e3912f 937
sakthipriya 0:7b4c00e3912f 938
sakthipriya 0:7b4c00e3912f 939 void tempCompensation(float temp)
sakthipriya 0:7b4c00e3912f 940 {
sakthipriya 0:7b4c00e3912f 941 //Calculate the new RCOMP value
sakthipriya 0:7b4c00e3912f 942 char rcomp;
sakthipriya 0:7b4c00e3912f 943 if (temp > 20.0) {
sakthipriya 0:7b4c00e3912f 944 rcomp = RCOMP0 + (temp - 20.0) * -0.5;
sakthipriya 0:7b4c00e3912f 945 } else {
sakthipriya 0:7b4c00e3912f 946 rcomp = RCOMP0 + (temp - 20.0) * -5.0;
sakthipriya 0:7b4c00e3912f 947 }
sakthipriya 0:7b4c00e3912f 948
sakthipriya 0:7b4c00e3912f 949 //Update the RCOMP value
sakthipriya 0:7b4c00e3912f 950 compensation(rcomp);
sakthipriya 0:7b4c00e3912f 951 }
sakthipriya 0:7b4c00e3912f 952
sakthipriya 0:7b4c00e3912f 953 // Command the MAX17049 to de-assert the ALRT pin
sakthipriya 0:7b4c00e3912f 954 void clearAlert()
sakthipriya 0:7b4c00e3912f 955 {
sakthipriya 0:7b4c00e3912f 956 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 957 unsigned short value = read(REG_CONFIG);
sakthipriya 0:7b4c00e3912f 958
sakthipriya 0:7b4c00e3912f 959 //Clear the ALRT bit
sakthipriya 0:7b4c00e3912f 960 value &= ~(1 << 5);
sakthipriya 0:7b4c00e3912f 961
sakthipriya 0:7b4c00e3912f 962 //Write the value back out
sakthipriya 0:7b4c00e3912f 963 write(REG_CONFIG, value);
sakthipriya 0:7b4c00e3912f 964 }
sakthipriya 0:7b4c00e3912f 965
sakthipriya 0:7b4c00e3912f 966
sakthipriya 0:7b4c00e3912f 967 //Set the SOC empty alert threshold of the MAX17049
sakthipriya 0:7b4c00e3912f 968 void emptyAlertThreshold(char threshold)
sakthipriya 0:7b4c00e3912f 969 {
sakthipriya 0:7b4c00e3912f 970 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 971 unsigned short value = read(REG_CONFIG);
sakthipriya 0:7b4c00e3912f 972
sakthipriya 0:7b4c00e3912f 973 //Update the register value
sakthipriya 0:7b4c00e3912f 974 value &= 0xFFE0;
sakthipriya 0:7b4c00e3912f 975 value |= 32 - threshold;
sakthipriya 0:7b4c00e3912f 976
sakthipriya 0:7b4c00e3912f 977 //Write the 16-bit register
sakthipriya 0:7b4c00e3912f 978 write(REG_CONFIG, value);
sakthipriya 0:7b4c00e3912f 979 }
sakthipriya 0:7b4c00e3912f 980
sakthipriya 0:7b4c00e3912f 981 // Set the low and high voltage alert threshold of the MAX17049
sakthipriya 0:7b4c00e3912f 982 void vAlertMinMaxThreshold()
sakthipriya 0:7b4c00e3912f 983 {
sakthipriya 0:7b4c00e3912f 984 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 985 unsigned short value = read(REG_VALRT);
sakthipriya 0:7b4c00e3912f 986
sakthipriya 0:7b4c00e3912f 987 //Mask off the old value
sakthipriya 0:7b4c00e3912f 988
sakthipriya 0:7b4c00e3912f 989 value = 0x96D2;
sakthipriya 0:7b4c00e3912f 990
sakthipriya 0:7b4c00e3912f 991 //Write the 16-bit register
sakthipriya 0:7b4c00e3912f 992 write(REG_VALRT, value);
sakthipriya 0:7b4c00e3912f 993 }
sakthipriya 0:7b4c00e3912f 994
sakthipriya 0:7b4c00e3912f 995
sakthipriya 0:7b4c00e3912f 996 // Set the reset voltage threshold of the MAX17049
sakthipriya 0:7b4c00e3912f 997 void vResetThresholdSet()
sakthipriya 0:7b4c00e3912f 998 {
sakthipriya 0:7b4c00e3912f 999 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 1000 unsigned short value = read(REG_VRESET_ID);
sakthipriya 0:7b4c00e3912f 1001
sakthipriya 0:7b4c00e3912f 1002 //Mask off the old //value
sakthipriya 0:7b4c00e3912f 1003 value &= 0x00FF;//Dis=0
sakthipriya 0:7b4c00e3912f 1004
sakthipriya 0:7b4c00e3912f 1005 value |= 0x9400;//corresponding to 2.5 V
sakthipriya 0:7b4c00e3912f 1006
sakthipriya 0:7b4c00e3912f 1007
sakthipriya 0:7b4c00e3912f 1008 //Write the 16-bit register
sakthipriya 0:7b4c00e3912f 1009 write(REG_VRESET_ID, value);
sakthipriya 0:7b4c00e3912f 1010 }
sakthipriya 0:7b4c00e3912f 1011
sakthipriya 0:7b4c00e3912f 1012
sakthipriya 0:7b4c00e3912f 1013 // Enable or disable the voltage reset alert on the MAX17049
sakthipriya 0:7b4c00e3912f 1014 void vResetAlertEnabled(bool enabled)
sakthipriya 0:7b4c00e3912f 1015 {
sakthipriya 0:7b4c00e3912f 1016 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 1017 unsigned short value = read(REG_STATUS);
sakthipriya 0:7b4c00e3912f 1018
sakthipriya 0:7b4c00e3912f 1019 //Set or clear the EnVR bit
sakthipriya 0:7b4c00e3912f 1020 if (enabled)
sakthipriya 0:7b4c00e3912f 1021 value |= (1 << 14);
sakthipriya 0:7b4c00e3912f 1022 else
sakthipriya 0:7b4c00e3912f 1023 value &= ~(1 << 14);
sakthipriya 0:7b4c00e3912f 1024
sakthipriya 0:7b4c00e3912f 1025 //Write the value back out
sakthipriya 0:7b4c00e3912f 1026 write(REG_STATUS, value);
sakthipriya 0:7b4c00e3912f 1027 }
sakthipriya 0:7b4c00e3912f 1028
sakthipriya 0:7b4c00e3912f 1029 //Get the current alert flags on the MAX17049
sakthipriya 0:7b4c00e3912f 1030 //refer datasheet-status registers section to decode it.
sakthipriya 0:7b4c00e3912f 1031 char alertFlags()
sakthipriya 0:7b4c00e3912f 1032 {
sakthipriya 0:7b4c00e3912f 1033 //Read the 16-bit register value
sakthipriya 0:7b4c00e3912f 1034 unsigned short value = read(REG_STATUS);
sakthipriya 0:7b4c00e3912f 1035
sakthipriya 0:7b4c00e3912f 1036 //Return only the flag bits
sakthipriya 0:7b4c00e3912f 1037 return (value >> 8) & 0x3F;
sakthipriya 0:7b4c00e3912f 1038 }
sakthipriya 0:7b4c00e3912f 1039
sakthipriya 0:7b4c00e3912f 1040 // Clear all the alert flags on the MAX17049
sakthipriya 0:7b4c00e3912f 1041 void clearAlertFlags()
sakthipriya 0:7b4c00e3912f 1042 {
sakthipriya 0:7b4c00e3912f 1043 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 1044 unsigned short value = read(REG_STATUS);
sakthipriya 0:7b4c00e3912f 1045
sakthipriya 0:7b4c00e3912f 1046 //Clear the specified flag bits
sakthipriya 0:7b4c00e3912f 1047 value &= ~( 0x3F<< 8);
sakthipriya 0:7b4c00e3912f 1048
sakthipriya 0:7b4c00e3912f 1049 //Write the value back out
sakthipriya 0:7b4c00e3912f 1050 write(REG_STATUS, value);
sakthipriya 0:7b4c00e3912f 1051 }
sakthipriya 0:7b4c00e3912f 1052
sakthipriya 0:7b4c00e3912f 1053 // Get the current cell voltage measurement of the MAX17049
sakthipriya 0:7b4c00e3912f 1054 float vcell()
sakthipriya 0:7b4c00e3912f 1055 {
sakthipriya 1:446a959e36ce 1056
sakthipriya 0:7b4c00e3912f 1057 //Read the 16-bit raw Vcell value
sakthipriya 0:7b4c00e3912f 1058 unsigned short value = read(REG_VCELL);
sakthipriya 0:7b4c00e3912f 1059
sakthipriya 0:7b4c00e3912f 1060 //Return Vcell in volts
sakthipriya 0:7b4c00e3912f 1061 return value * 0.000078125*2;
sakthipriya 0:7b4c00e3912f 1062 }
sakthipriya 0:7b4c00e3912f 1063
sakthipriya 0:7b4c00e3912f 1064 // Get the current state of charge measurement of the MAX17049 as a float
sakthipriya 0:7b4c00e3912f 1065 float soc()
sakthipriya 0:7b4c00e3912f 1066 {
sakthipriya 3:07e15677a75c 1067
sakthipriya 3:07e15677a75c 1068 //Create a temporary buffer
sakthipriya 0:7b4c00e3912f 1069 char buff[2];
sakthipriya 3:07e15677a75c 1070 int ack = 1;
sakthipriya 3:07e15677a75c 1071 //Select the register
sakthipriya 3:07e15677a75c 1072 char reg = REG_SOC; // cannot pass the hash defined values directly
sakthipriya 3:07e15677a75c 1073 m_I2C.write(m_ADDR, &reg, 1, true);
sakthipriya 3:07e15677a75c 1074
sakthipriya 3:07e15677a75c 1075
sakthipriya 3:07e15677a75c 1076 //Read the 16-bit register
sakthipriya 3:07e15677a75c 1077
sakthipriya 3:07e15677a75c 1078 ack = m_I2C.read(m_ADDR, buff, 2);
sakthipriya 3:07e15677a75c 1079
lakshya 20:949d13045431 1080 //// printf("\n\r acknow %d", ack);
sakthipriya 0:7b4c00e3912f 1081
sakthipriya 0:7b4c00e3912f 1082 //Return SOC in percent
sakthipriya 2:c823d84b4cb0 1083 if(ack == 0)
sakthipriya 3:07e15677a75c 1084 return ((buff[0] << 8) | buff[1]) * 0.00390625;
sakthipriya 2:c823d84b4cb0 1085 else
sakthipriya 2:c823d84b4cb0 1086 return 200;
sakthipriya 0:7b4c00e3912f 1087 }
sakthipriya 0:7b4c00e3912f 1088
sakthipriya 0:7b4c00e3912f 1089
sakthipriya 0:7b4c00e3912f 1090
sakthipriya 0:7b4c00e3912f 1091 // Get the current C rate measurement of the MAX17049
sakthipriya 0:7b4c00e3912f 1092 float crate()
sakthipriya 0:7b4c00e3912f 1093 {
sakthipriya 0:7b4c00e3912f 1094 //Read the 16-bit raw C/Rate value
sakthipriya 0:7b4c00e3912f 1095 short value = read(REG_CRATE);
sakthipriya 0:7b4c00e3912f 1096
sakthipriya 0:7b4c00e3912f 1097 //Return C/Rate in %/hr
sakthipriya 0:7b4c00e3912f 1098 return value * 0.208;
sakthipriya 0:7b4c00e3912f 1099 }
sakthipriya 0:7b4c00e3912f 1100
sakthipriya 0:7b4c00e3912f 1101 // Determine whether or not the MAX17049 is asserting the ALRT pin
sakthipriya 0:7b4c00e3912f 1102 bool alerting()
sakthipriya 0:7b4c00e3912f 1103 {
sakthipriya 0:7b4c00e3912f 1104 //Read the 16-bit register value
sakthipriya 0:7b4c00e3912f 1105 unsigned short value = read(REG_CONFIG);
sakthipriya 0:7b4c00e3912f 1106
sakthipriya 0:7b4c00e3912f 1107 //Return the status of the ALRT bit
sakthipriya 0:7b4c00e3912f 1108 if (value & (1 << 5))
sakthipriya 0:7b4c00e3912f 1109 return true;
sakthipriya 0:7b4c00e3912f 1110 else
sakthipriya 0:7b4c00e3912f 1111 return false;
sakthipriya 2:c823d84b4cb0 1112 }
sakthipriya 2:c823d84b4cb0 1113
sakthipriya 2:c823d84b4cb0 1114 //.............................Battery board Temp sensor........................//
sakthipriya 2:c823d84b4cb0 1115 void FCTN_BATTTEMP_INIT()
sakthipriya 2:c823d84b4cb0 1116 {
sakthipriya 2:c823d84b4cb0 1117 ssn1=1;ssn2=1;
sakthipriya 2:c823d84b4cb0 1118 //PS=0;
sakthipriya 2:c823d84b4cb0 1119 //HS=0;
sakthipriya 2:c823d84b4cb0 1120 spi_bt.format(8,3);
sakthipriya 2:c823d84b4cb0 1121 spi_bt.frequency(1000000);
lakshya 20:949d13045431 1122 EPS_BATTERY_TEMP_STATUS = 1;
sakthipriya 2:c823d84b4cb0 1123 }
sakthipriya 2:c823d84b4cb0 1124
sakthipriya 2:c823d84b4cb0 1125 void FCTN_BATT_TEMP_SENSOR_MAIN(float temp[2])
sakthipriya 2:c823d84b4cb0 1126 {
sakthipriya 2:c823d84b4cb0 1127 uint8_t MSB, LSB;
sakthipriya 2:c823d84b4cb0 1128 int16_t bit_data;
sakthipriya 2:c823d84b4cb0 1129 float sensitivity=0.0078125; //1 LSB = sensitivity degree celcius
sakthipriya 2:c823d84b4cb0 1130 wait_ms(320);
lakshya 20:949d13045431 1131 //can we reduce it further ??? azad.......!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
sakthipriya 2:c823d84b4cb0 1132 ssn1=0;
sakthipriya 2:c823d84b4cb0 1133
sakthipriya 2:c823d84b4cb0 1134 spi_bt.write(0x80);//Reading digital data from Sensor 1
sakthipriya 2:c823d84b4cb0 1135 LSB = spi_bt.write(0x00);//LSB first
lakshya 20:949d13045431 1136 wait_ms(10);
sakthipriya 2:c823d84b4cb0 1137 MSB = spi_bt.write(0x00);
sakthipriya 2:c823d84b4cb0 1138 wait_ms(10);
lakshya 20:949d13045431 1139 //// pc_eps.printf("%d %d\n",MSB,LSB);
sakthipriya 2:c823d84b4cb0 1140 bit_data= ((uint16_t)MSB<<8)|LSB;
sakthipriya 2:c823d84b4cb0 1141 wait_ms(10);
sakthipriya 2:c823d84b4cb0 1142 temp[0]=(float)bit_data*sensitivity;//Converting into decimal value
sakthipriya 2:c823d84b4cb0 1143 ssn1=1;
sakthipriya 2:c823d84b4cb0 1144 wait_ms(10);
sakthipriya 2:c823d84b4cb0 1145 ssn2=0;//Reading data from sensor 2
sakthipriya 2:c823d84b4cb0 1146 spi_bt.write(0x80);
sakthipriya 2:c823d84b4cb0 1147 LSB = spi_bt.write(0x00);
sakthipriya 2:c823d84b4cb0 1148 wait_ms(10);
sakthipriya 2:c823d84b4cb0 1149 MSB = spi_bt.write(0x00);
sakthipriya 2:c823d84b4cb0 1150 wait_ms(10);
sakthipriya 2:c823d84b4cb0 1151 bit_data= ((int16_t)MSB<<8)|LSB;
sakthipriya 2:c823d84b4cb0 1152 wait_ms(10);
sakthipriya 2:c823d84b4cb0 1153 temp[1]=(float)bit_data*sensitivity;
sakthipriya 2:c823d84b4cb0 1154 ssn2=1;
sakthipriya 2:c823d84b4cb0 1155
sakthipriya 2:c823d84b4cb0 1156 }