Team Fox / Mbed 2 deprecated BAE_QM_MAR9

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of workinQM_5thJan_azad by Team Fox

Committer:
Bragadeesh153
Date:
Sun Aug 07 07:49:52 2016 +0000
Revision:
56:32b1fb074138
Parent:
53:459b71b1861c
Child:
57:60e8f00d93c3
TCTM ACK

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