Team Fox / Mbed 2 deprecated BAE_QM_MAR9

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of workinQM_5thJan_azad by Team Fox

Committer:
lakshya
Date:
Tue Jul 05 13:44:15 2016 +0000
Revision:
39:670133e7ffd8
Parent:
33:76f2b8735501
Child:
40:c2538d97e78b
Child:
44:da258a0977a4
Child:
48:9fd15e3e0b53
bae editing done; testing and debuging; I2C working; ; +watchdog to be implemented

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