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