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@32:623747b1cecb, 2016-07-03 (annotated)
- Committer:
- azaddevarm
- Date:
- Sun Jul 03 17:49:37 2016 +0000
- Revision:
- 32:623747b1cecb
- Parent:
- 30:22b338b027de
Updated EPS with flowchart v2.6;
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" |
sakthipriya | 0:7b4c00e3912f | 4 | /***********************************************global variable declaration***************************************************************/ |
sakthipriya | 0:7b4c00e3912f | 5 | extern uint32_t BAE_STATUS; |
sakthipriya | 0:7b4c00e3912f | 6 | extern uint32_t BAE_ENABLE; |
sakthipriya | 6:036d08b62785 | 7 | extern uint8_t BAE_data[74]; |
sakthipriya | 6:036d08b62785 | 8 | extern char BAE_chardata[74]; |
sakthipriya | 0:7b4c00e3912f | 9 | |
sakthipriya | 0:7b4c00e3912f | 10 | //m_I2C.frequency(10000) |
lakshya | 15:e09aaaccf134 | 11 | const char RCOMP0= 0x97;// don't know what it is now |
sakthipriya | 0:7b4c00e3912f | 12 | BAE_HK_actual actual_data; |
sakthipriya | 0:7b4c00e3912f | 13 | BAE_HK_quant quant_data; |
sakthipriya | 0:7b4c00e3912f | 14 | BAE_HK_min_max bae_HK_minmax; |
sakthipriya | 0:7b4c00e3912f | 15 | BAE_HK_arch arch_data; |
sakthipriya | 0:7b4c00e3912f | 16 | |
sakthipriya | 5:bb592f3185cc | 17 | |
sakthipriya | 0:7b4c00e3912f | 18 | //......................................Peripheral declarations.........................................................// |
sakthipriya | 0:7b4c00e3912f | 19 | Serial pc_eps(USBTX,USBRX); |
sakthipriya | 3:07e15677a75c | 20 | |
sakthipriya | 0:7b4c00e3912f | 21 | I2C m_I2C(PIN85,PIN84); |
sakthipriya | 0:7b4c00e3912f | 22 | DigitalOut TRXY(TRXY_DR_EN); //active high |
sakthipriya | 0:7b4c00e3912f | 23 | DigitalOut TRZ(TRZ_DR_EN); //active high |
sakthipriya | 0:7b4c00e3912f | 24 | DigitalOut EN3V3A(ENBL3V3A); |
azaddevarm | 30:22b338b027de | 25 | //DigitalOut BTRY_HTR_ENABLE(BATT_HEAT); //EN_BTRY_HT |
sakthipriya | 0:7b4c00e3912f | 26 | //DigitalIn BTRY_HT_OUTPUT(BATT_HEAT_OUTPUT); |
sakthipriya | 3:07e15677a75c | 27 | //AnalogIn Vbatt_ang(VBATT); |
sakthipriya | 3:07e15677a75c | 28 | AnalogIn Batt_voltage(PIN20); //Battery voltage |
sakthipriya | 3:07e15677a75c | 29 | |
lakshya | 15:e09aaaccf134 | 30 | SPI spi_bt(PIN99,PIN100,PIN98); //MOSI,MISO,SLK // battery temp something 3 |
lakshya | 15:e09aaaccf134 | 31 | DigitalOut ssn1(PIN19); //Slave select1 // low line master talks |
sakthipriya | 2:c823d84b4cb0 | 32 | DigitalOut ssn2(PIN21);//Slave select2 |
sakthipriya | 2:c823d84b4cb0 | 33 | //DigitalOut PS(PTB0); |
sakthipriya | 2:c823d84b4cb0 | 34 | //DigitalOut HS(PTB1); |
sakthipriya | 2:c823d84b4cb0 | 35 | |
sakthipriya | 3:07e15677a75c | 36 | AnalogIn CurrentInput(PIN54); // Input from Current Multiplexer //PIN54 |
sakthipriya | 3:07e15677a75c | 37 | AnalogIn VoltageInput(PIN53); // Input from Voltage Multiplexer //PIN53 |
sakthipriya | 3:07e15677a75c | 38 | AnalogIn BAE_temp_sensor(PIN55); //Input from BAE temp sensor |
sakthipriya | 3:07e15677a75c | 39 | |
lakshya | 15:e09aaaccf134 | 40 | /*mux for reading value one by one*/ |
sakthipriya | 3:07e15677a75c | 41 | DigitalOut SelectLinea3 (PIN46); // MSB of Select Lines |
sakthipriya | 3:07e15677a75c | 42 | DigitalOut SelectLinea2 (PIN45); |
sakthipriya | 3:07e15677a75c | 43 | DigitalOut SelectLinea1 (PIN44); |
sakthipriya | 3:07e15677a75c | 44 | DigitalOut SelectLinea0 (PIN43); // LSB of Select Lines |
sakthipriya | 3:07e15677a75c | 45 | |
sakthipriya | 3:07e15677a75c | 46 | DigitalOut SelectLineb3 (PIN56); // MSB of Select Lines |
sakthipriya | 3:07e15677a75c | 47 | DigitalOut SelectLineb2 (PIN57); |
sakthipriya | 3:07e15677a75c | 48 | DigitalOut SelectLineb1 (PIN58); |
sakthipriya | 3:07e15677a75c | 49 | DigitalOut SelectLineb0 (PIN59); // LSB of Select Lines |
sakthipriya | 0:7b4c00e3912f | 50 | |
sakthipriya | 0:7b4c00e3912f | 51 | //*********************************************************flags********************************************************// |
azaddevarm | 29:bb0d64656ba1 | 52 | extern uint8_t EPS_INIT_STATUS ; |
azaddevarm | 29:bb0d64656ba1 | 53 | extern uint8_t EPS_BATTERY_GAUGE_STATUS ; |
azaddevarm | 29:bb0d64656ba1 | 54 | extern uint8_t EPS_MAIN_STATUS; |
azaddevarm | 30:22b338b027de | 55 | extern uint8_t EPS_BTRY_TMP_STATUS ; |
azaddevarm | 29:bb0d64656ba1 | 56 | extern uint8_t EPS_STATUS ; |
sakthipriya | 0:7b4c00e3912f | 57 | |
azaddevarm | 30:22b338b027de | 58 | extern uint8_t EPS_BTRY_HTR ; |
sakthipriya | 0:7b4c00e3912f | 59 | |
azaddevarm | 28:5f0f2a3f3e8d | 60 | //eps cdms fault |
azaddevarm | 28:5f0f2a3f3e8d | 61 | extern uint8_t CDMS_SW_STATUS; |
azaddevarm | 28:5f0f2a3f3e8d | 62 | extern bool CDMS_OC_FAULT; |
azaddevarm | 28:5f0f2a3f3e8d | 63 | extern bool CDMS_SW_ENABLE; |
azaddevarm | 28:5f0f2a3f3e8d | 64 | extern int CDMS_FAULT_COUNTER; |
azaddevarm | 28:5f0f2a3f3e8d | 65 | |
azaddevarm | 28:5f0f2a3f3e8d | 66 | //eps hw faults |
azaddevarm | 28:5f0f2a3f3e8d | 67 | |
azaddevarm | 28:5f0f2a3f3e8d | 68 | extern uint8_t ACS_TR_Z_SW_STATUS; |
azaddevarm | 28:5f0f2a3f3e8d | 69 | extern bool ACS_TR_Z_ENABLE; |
azaddevarm | 28:5f0f2a3f3e8d | 70 | extern bool ACS_TR_Z_OC_FAULT; |
azaddevarm | 28:5f0f2a3f3e8d | 71 | extern bool ACS_TR_Z_FAULT; //Driver IC fault |
azaddevarm | 28:5f0f2a3f3e8d | 72 | extern int ACS_TR_Z_FAULT_COUNTER; |
azaddevarm | 28:5f0f2a3f3e8d | 73 | |
azaddevarm | 28:5f0f2a3f3e8d | 74 | extern uint8_t ACS_TR_XY_SW_STATUS; |
azaddevarm | 28:5f0f2a3f3e8d | 75 | extern bool ACS_TR_XY_ENABLE; |
azaddevarm | 28:5f0f2a3f3e8d | 76 | extern bool ACS_TR_XY_OC_FAULT; |
azaddevarm | 28:5f0f2a3f3e8d | 77 | extern bool ACS_TR_XY_FAULT; //Driver IC fault |
azaddevarm | 28:5f0f2a3f3e8d | 78 | extern int ACS_TR_XY_FAULT_COUNTER; |
azaddevarm | 28:5f0f2a3f3e8d | 79 | |
azaddevarm | 28:5f0f2a3f3e8d | 80 | extern uint8_t ACS_ATS1_SW_STATUS; |
azaddevarm | 28:5f0f2a3f3e8d | 81 | extern bool ACS_ATS1_ENABLE; |
azaddevarm | 28:5f0f2a3f3e8d | 82 | extern bool ACS_ATS1_OC_FAULT; |
azaddevarm | 28:5f0f2a3f3e8d | 83 | extern int ACS_ATS1_FAULT_COUNTER; |
azaddevarm | 28:5f0f2a3f3e8d | 84 | |
azaddevarm | 28:5f0f2a3f3e8d | 85 | extern uint8_t ACS_ATS2_SW_STATUS; |
azaddevarm | 28:5f0f2a3f3e8d | 86 | extern bool ACS_ATS2_ENABLE; |
azaddevarm | 28:5f0f2a3f3e8d | 87 | extern bool ACS_ATS2_OC_FAULT; |
azaddevarm | 28:5f0f2a3f3e8d | 88 | extern int ACS_ATS2_FAULT_COUNTER; |
azaddevarm | 28:5f0f2a3f3e8d | 89 | |
azaddevarm | 28:5f0f2a3f3e8d | 90 | extern uint8_t BCN_TX_SW_STATUS; |
azaddevarm | 28:5f0f2a3f3e8d | 91 | extern bool BCN_TX_ENABLE; |
azaddevarm | 28:5f0f2a3f3e8d | 92 | extern bool BCN_TX_OC_FAULT; |
azaddevarm | 28:5f0f2a3f3e8d | 93 | extern int BCN_TX_FAULT_COUNTER; |
azaddevarm | 28:5f0f2a3f3e8d | 94 | |
azaddevarm | 28:5f0f2a3f3e8d | 95 | |
sakthipriya | 0:7b4c00e3912f | 96 | //........................................... FUCTIONS.................................................// |
sakthipriya | 0:7b4c00e3912f | 97 | |
sakthipriya | 0:7b4c00e3912f | 98 | void FCTN_EPS_INIT() |
sakthipriya | 0:7b4c00e3912f | 99 | { |
sakthipriya | 0:7b4c00e3912f | 100 | printf("\n\r eps init \n"); |
azaddevarm | 29:bb0d64656ba1 | 101 | EPS_INIT_STATUS = 1 ; //set EPS_INIT_STATUS flag |
sakthipriya | 3:07e15677a75c | 102 | // FLAG(); |
sakthipriya | 0:7b4c00e3912f | 103 | FCTN_BATTERYGAUGE_INIT(); |
sakthipriya | 0:7b4c00e3912f | 104 | EN3V3A = 1; //enable dc dc converter A |
azaddevarm | 32:623747b1cecb | 105 | |
lakshya | 15:e09aaaccf134 | 106 | char value=alertFlags(); // initialization part of battery gauge |
sakthipriya | 0:7b4c00e3912f | 107 | unsigned short value_u= (short int )value; |
azaddevarm | 32:623747b1cecb | 108 | //value_u &=0x0001; |
azaddevarm | 32:623747b1cecb | 109 | if(value_u & 0x0001 == 0x0001) // battery gauge not initialised |
sakthipriya | 0:7b4c00e3912f | 110 | { |
sakthipriya | 0:7b4c00e3912f | 111 | actual_data.power_mode = 1; |
azaddevarm | 29:bb0d64656ba1 | 112 | EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS |
azaddevarm | 32:623747b1cecb | 113 | printf(" init BTG fail - %d\n\r", value_u); |
sakthipriya | 0:7b4c00e3912f | 114 | } |
sakthipriya | 0:7b4c00e3912f | 115 | else |
sakthipriya | 0:7b4c00e3912f | 116 | { |
sakthipriya | 0:7b4c00e3912f | 117 | actual_data.Batt_gauge_actual[1] = soc(); |
lakshya | 15:e09aaaccf134 | 118 | actual_data.Batt_voltage_actual = Batt_voltage.read()*3.3; //1 corresponds to 3.3 scaling factor |
sakthipriya | 0:7b4c00e3912f | 119 | FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]); |
azaddevarm | 29:bb0d64656ba1 | 120 | EPS_BATTERY_GAUGE_STATUS = 1; //set EPS_BATTERY_GAUGE_STATUS |
azaddevarm | 32:623747b1cecb | 121 | printf("init BTG success - %d\n\r", value_u); |
sakthipriya | 0:7b4c00e3912f | 122 | } |
azaddevarm | 32:623747b1cecb | 123 | |
azaddevarm | 32:623747b1cecb | 124 | //if( read(REG_VERSION) == |
azaddevarm | 32:623747b1cecb | 125 | printf("REG_VERSION = %d\r\n",read(REG_VERSION)); |
azaddevarm | 29:bb0d64656ba1 | 126 | FCTN_BATTTEMP_INIT(); |
azaddevarm | 29:bb0d64656ba1 | 127 | EPS_BATTERY_GAUGE_STATUS = 1; |
azaddevarm | 29:bb0d64656ba1 | 128 | |
azaddevarm | 29:bb0d64656ba1 | 129 | EPS_INIT_STATUS = 0 ; //clear EPS_INIT_STATUS flag |
sakthipriya | 0:7b4c00e3912f | 130 | |
sakthipriya | 0:7b4c00e3912f | 131 | } |
sakthipriya | 0:7b4c00e3912f | 132 | |
azaddevarm | 28:5f0f2a3f3e8d | 133 | void FCTN_EPS_HANDLE_CDMS_FAULT() |
azaddevarm | 28:5f0f2a3f3e8d | 134 | { //Variable names from MMS structure, if not, marked as //Temp name |
azaddevarm | 28:5f0f2a3f3e8d | 135 | if(CDMS_SW_STATUS == 0b11) //powered on and oc fault |
azaddevarm | 28:5f0f2a3f3e8d | 136 | if(!CDMS_OC_FAULT) |
azaddevarm | 28:5f0f2a3f3e8d | 137 | CDMS_SW_STATUS = 0b01; //powered on and working |
azaddevarm | 28:5f0f2a3f3e8d | 138 | else |
azaddevarm | 28:5f0f2a3f3e8d | 139 | { |
azaddevarm | 28:5f0f2a3f3e8d | 140 | if(CDMS_SW_STATUS == 0b10) //powered off and oc fault |
azaddevarm | 28:5f0f2a3f3e8d | 141 | CDMS_SW_ENABLE = 1; //Temp name |
azaddevarm | 28:5f0f2a3f3e8d | 142 | if(CDMS_OC_FAULT == 0) |
azaddevarm | 28:5f0f2a3f3e8d | 143 | { |
azaddevarm | 28:5f0f2a3f3e8d | 144 | CDMS_FAULT_COUNTER = 0; //Temp name |
azaddevarm | 28:5f0f2a3f3e8d | 145 | CDMS_SW_STATUS = 0b01; //powered on and working |
azaddevarm | 28:5f0f2a3f3e8d | 146 | } |
azaddevarm | 28:5f0f2a3f3e8d | 147 | else |
azaddevarm | 28:5f0f2a3f3e8d | 148 | { |
azaddevarm | 28:5f0f2a3f3e8d | 149 | CDMS_FAULT_COUNTER++; |
azaddevarm | 28:5f0f2a3f3e8d | 150 | if(CDMS_FAULT_COUNTER == 3) |
azaddevarm | 28:5f0f2a3f3e8d | 151 | CDMS_SW_STATUS = 0b11; //powered on and oc fault |
azaddevarm | 28:5f0f2a3f3e8d | 152 | else |
azaddevarm | 28:5f0f2a3f3e8d | 153 | { |
azaddevarm | 28:5f0f2a3f3e8d | 154 | CDMS_SW_ENABLE = 0; //power OFF switch |
azaddevarm | 28:5f0f2a3f3e8d | 155 | CDMS_SW_STATUS = 0b10; //powered off and oc fault |
azaddevarm | 28:5f0f2a3f3e8d | 156 | } |
azaddevarm | 28:5f0f2a3f3e8d | 157 | } |
azaddevarm | 28:5f0f2a3f3e8d | 158 | } |
azaddevarm | 28:5f0f2a3f3e8d | 159 | } |
azaddevarm | 28:5f0f2a3f3e8d | 160 | |
azaddevarm | 28:5f0f2a3f3e8d | 161 | void FCTN_EPS_HANDLE_HW_FAULTS() |
azaddevarm | 28:5f0f2a3f3e8d | 162 | { //Variable names from MMS structure, if not, marked as //Temp name |
azaddevarm | 28:5f0f2a3f3e8d | 163 | |
azaddevarm | 28:5f0f2a3f3e8d | 164 | //--------ACS_TR_Z--------// |
azaddevarm | 28:5f0f2a3f3e8d | 165 | if(ACS_TR_Z_SW_STATUS != 0b11) //!disabled |
azaddevarm | 28:5f0f2a3f3e8d | 166 | { |
azaddevarm | 28:5f0f2a3f3e8d | 167 | if(ACS_TR_Z_SW_STATUS == 0b10) //oc fault and powered off |
azaddevarm | 28:5f0f2a3f3e8d | 168 | ACS_TR_Z_ENABLE = 1; |
azaddevarm | 28:5f0f2a3f3e8d | 169 | if(ACS_TR_Z_OC_FAULT || ACS_TR_Z_FAULT) |
azaddevarm | 28:5f0f2a3f3e8d | 170 | { |
azaddevarm | 28:5f0f2a3f3e8d | 171 | ACS_TR_Z_ENABLE = 0; |
azaddevarm | 28:5f0f2a3f3e8d | 172 | ACS_TR_Z_FAULT_COUNTER++; //Temp name |
azaddevarm | 28:5f0f2a3f3e8d | 173 | if(ACS_TR_Z_FAULT_COUNTER == 3) |
azaddevarm | 28:5f0f2a3f3e8d | 174 | ACS_TR_Z_SW_STATUS = 0b11; //disabled |
azaddevarm | 28:5f0f2a3f3e8d | 175 | //update in flash as default state at bootup |
azaddevarm | 28:5f0f2a3f3e8d | 176 | else ACS_TR_Z_SW_STATUS = 0b10; //oc fault and powered off |
azaddevarm | 28:5f0f2a3f3e8d | 177 | } |
azaddevarm | 28:5f0f2a3f3e8d | 178 | else |
azaddevarm | 28:5f0f2a3f3e8d | 179 | { |
azaddevarm | 28:5f0f2a3f3e8d | 180 | ACS_TR_Z_SW_STATUS = 0b01; //powered on and working; |
azaddevarm | 28:5f0f2a3f3e8d | 181 | //update in flash also |
azaddevarm | 28:5f0f2a3f3e8d | 182 | ACS_TR_Z_FAULT_COUNTER = 0; |
azaddevarm | 28:5f0f2a3f3e8d | 183 | } |
azaddevarm | 28:5f0f2a3f3e8d | 184 | } |
azaddevarm | 28:5f0f2a3f3e8d | 185 | |
azaddevarm | 28:5f0f2a3f3e8d | 186 | //--------ACS_TR_XY--------// |
azaddevarm | 28:5f0f2a3f3e8d | 187 | //Same as ACS_TR_Z, just replace Z with XY |
azaddevarm | 28:5f0f2a3f3e8d | 188 | |
azaddevarm | 28:5f0f2a3f3e8d | 189 | //--------ACS_ATS1--------// |
azaddevarm | 28:5f0f2a3f3e8d | 190 | //Same as ACS_ATS2 |
azaddevarm | 28:5f0f2a3f3e8d | 191 | |
azaddevarm | 28:5f0f2a3f3e8d | 192 | //--------ACS_ATS2--------// |
azaddevarm | 28:5f0f2a3f3e8d | 193 | if(ACS_ATS2_SW_STATUS & 0b1100 != 0b1100) //!disabled |
azaddevarm | 28:5f0f2a3f3e8d | 194 | { |
azaddevarm | 28:5f0f2a3f3e8d | 195 | if(ACS_ATS2_SW_STATUS & 0b1100 == 0b1000) //oc fault and powered off |
azaddevarm | 28:5f0f2a3f3e8d | 196 | ACS_ATS2_ENABLE = 1; //Temp name |
azaddevarm | 28:5f0f2a3f3e8d | 197 | if(ACS_ATS2_OC_FAULT) |
azaddevarm | 28:5f0f2a3f3e8d | 198 | { |
azaddevarm | 28:5f0f2a3f3e8d | 199 | ACS_ATS2_ENABLE = 0; |
azaddevarm | 28:5f0f2a3f3e8d | 200 | ACS_ATS2_FAULT_COUNTER++; //Temp name |
azaddevarm | 28:5f0f2a3f3e8d | 201 | if(ACS_ATS2_FAULT_COUNTER == 3) |
azaddevarm | 28:5f0f2a3f3e8d | 202 | ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS | 0b1100; //disabled |
azaddevarm | 28:5f0f2a3f3e8d | 203 | //update in flash as default state at bootup |
azaddevarm | 28:5f0f2a3f3e8d | 204 | else |
azaddevarm | 28:5f0f2a3f3e8d | 205 | { |
azaddevarm | 28:5f0f2a3f3e8d | 206 | ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS | 0b1000; //setting to 10xx |
azaddevarm | 28:5f0f2a3f3e8d | 207 | ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS & 0b1011; //oc fault and powered off |
azaddevarm | 28:5f0f2a3f3e8d | 208 | } |
azaddevarm | 28:5f0f2a3f3e8d | 209 | } |
azaddevarm | 28:5f0f2a3f3e8d | 210 | else |
azaddevarm | 28:5f0f2a3f3e8d | 211 | { |
azaddevarm | 28:5f0f2a3f3e8d | 212 | if(ACS_ATS2_SW_STATUS & 0b1100 == 0b1000) //Device oc fault? |
azaddevarm | 28:5f0f2a3f3e8d | 213 | ACS_ATS2_ENABLE = 0; |
azaddevarm | 28:5f0f2a3f3e8d | 214 | ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS & 0b0011; //working but powered off |
azaddevarm | 28:5f0f2a3f3e8d | 215 | //Update in flash also |
azaddevarm | 28:5f0f2a3f3e8d | 216 | ACS_ATS2_FAULT_COUNTER = 0; |
azaddevarm | 28:5f0f2a3f3e8d | 217 | } |
azaddevarm | 28:5f0f2a3f3e8d | 218 | } |
azaddevarm | 28:5f0f2a3f3e8d | 219 | |
azaddevarm | 28:5f0f2a3f3e8d | 220 | //--------BCN_TX----------// |
azaddevarm | 28:5f0f2a3f3e8d | 221 | if(BCN_TX_SW_STATUS != 0b11) //!disabled |
azaddevarm | 28:5f0f2a3f3e8d | 222 | { |
azaddevarm | 28:5f0f2a3f3e8d | 223 | if(BCN_TX_SW_STATUS == 0b10) //oc fault and powered off |
azaddevarm | 28:5f0f2a3f3e8d | 224 | BCN_TX_ENABLE = 1; //Temp name |
azaddevarm | 28:5f0f2a3f3e8d | 225 | if(BCN_TX_OC_FAULT) |
azaddevarm | 28:5f0f2a3f3e8d | 226 | { |
azaddevarm | 28:5f0f2a3f3e8d | 227 | BCN_TX_ENABLE = 0; |
azaddevarm | 28:5f0f2a3f3e8d | 228 | BCN_TX_FAULT_COUNTER++; //Temp name |
azaddevarm | 28:5f0f2a3f3e8d | 229 | if(BCN_TX_FAULT_COUNTER == 3) |
azaddevarm | 28:5f0f2a3f3e8d | 230 | BCN_TX_SW_STATUS = 0b11; //disabled |
azaddevarm | 28:5f0f2a3f3e8d | 231 | //update in flash as default state at bootup |
azaddevarm | 28:5f0f2a3f3e8d | 232 | else BCN_TX_SW_STATUS = 0b10; //oc fault and powered off |
azaddevarm | 28:5f0f2a3f3e8d | 233 | } |
azaddevarm | 28:5f0f2a3f3e8d | 234 | else |
azaddevarm | 28:5f0f2a3f3e8d | 235 | { |
azaddevarm | 28:5f0f2a3f3e8d | 236 | BCN_TX_SW_STATUS = 0b01; //powered on and working; |
azaddevarm | 28:5f0f2a3f3e8d | 237 | //update in flash also |
azaddevarm | 28:5f0f2a3f3e8d | 238 | BCN_TX_FAULT_COUNTER = 0; |
azaddevarm | 28:5f0f2a3f3e8d | 239 | } |
azaddevarm | 28:5f0f2a3f3e8d | 240 | } |
azaddevarm | 28:5f0f2a3f3e8d | 241 | |
azaddevarm | 28:5f0f2a3f3e8d | 242 | } |
azaddevarm | 28:5f0f2a3f3e8d | 243 | |
sakthipriya | 0:7b4c00e3912f | 244 | //----------------------------------------------------Power algo code--------------------------------------------------------------------// |
lakshya | 15:e09aaaccf134 | 245 | /*update the power modes*/ |
lakshya | 15:e09aaaccf134 | 246 | |
sakthipriya | 0:7b4c00e3912f | 247 | void FCTN_EPS_POWERMODE(float soc) //dummy algo |
sakthipriya | 0:7b4c00e3912f | 248 | { |
sakthipriya | 0:7b4c00e3912f | 249 | if(soc >= 80) |
sakthipriya | 0:7b4c00e3912f | 250 | actual_data.power_mode = 4; |
sakthipriya | 0:7b4c00e3912f | 251 | else if(soc >= 70 & soc < 80) |
sakthipriya | 0:7b4c00e3912f | 252 | actual_data.power_mode = 3; |
sakthipriya | 0:7b4c00e3912f | 253 | else if(soc >= 60 & soc < 70) |
sakthipriya | 0:7b4c00e3912f | 254 | actual_data.power_mode = 2; |
sakthipriya | 0:7b4c00e3912f | 255 | else if(soc < 60) |
sakthipriya | 0:7b4c00e3912f | 256 | actual_data.power_mode = 1; |
sakthipriya | 0:7b4c00e3912f | 257 | } |
sakthipriya | 0:7b4c00e3912f | 258 | |
sakthipriya | 0:7b4c00e3912f | 259 | //...................................................HK...........................................// |
lakshya | 15:e09aaaccf134 | 260 | /*reading values*/ |
sakthipriya | 3:07e15677a75c | 261 | |
sakthipriya | 3:07e15677a75c | 262 | void FCTN_HK_MAIN() |
sakthipriya | 3:07e15677a75c | 263 | { |
sakthipriya | 3:07e15677a75c | 264 | int Iteration=0; |
sakthipriya | 3:07e15677a75c | 265 | |
sakthipriya | 3:07e15677a75c | 266 | SelectLinea0=0; |
sakthipriya | 3:07e15677a75c | 267 | SelectLinea1=0; |
sakthipriya | 3:07e15677a75c | 268 | SelectLinea2=0; |
sakthipriya | 3:07e15677a75c | 269 | SelectLinea3=0; |
sakthipriya | 3:07e15677a75c | 270 | |
sakthipriya | 3:07e15677a75c | 271 | SelectLineb0=0; |
sakthipriya | 3:07e15677a75c | 272 | SelectLineb1=0; |
sakthipriya | 3:07e15677a75c | 273 | SelectLineb2=0; |
sakthipriya | 3:07e15677a75c | 274 | SelectLineb3=0; |
sakthipriya | 3:07e15677a75c | 275 | |
sakthipriya | 3:07e15677a75c | 276 | //collecting data |
azaddevarm | 29:bb0d64656ba1 | 277 | for(Iteration=0; Iteration<16; Iteration++) |
azaddevarm | 29:bb0d64656ba1 | 278 | { |
sakthipriya | 3:07e15677a75c | 279 | actual_data.voltage_actual[Iteration]=VoltageInput.read(); |
sakthipriya | 3:07e15677a75c | 280 | actual_data.current_actual[Iteration]=CurrentInput.read(); |
sakthipriya | 3:07e15677a75c | 281 | |
sakthipriya | 3:07e15677a75c | 282 | SelectLinea0=!(SelectLinea0); |
sakthipriya | 3:07e15677a75c | 283 | if(Iteration%2==1) |
sakthipriya | 3:07e15677a75c | 284 | SelectLinea1=!(SelectLinea1); |
sakthipriya | 3:07e15677a75c | 285 | if(Iteration%4==3) |
sakthipriya | 3:07e15677a75c | 286 | SelectLinea2=!(SelectLinea2); |
sakthipriya | 3:07e15677a75c | 287 | if(Iteration%8==7) |
sakthipriya | 3:07e15677a75c | 288 | SelectLinea3=!(SelectLinea3); |
sakthipriya | 3:07e15677a75c | 289 | int s0,s1,s2,s3; |
sakthipriya | 3:07e15677a75c | 290 | s0=SelectLineb0=SelectLinea0; |
sakthipriya | 3:07e15677a75c | 291 | s1=SelectLineb1=SelectLinea2; |
sakthipriya | 3:07e15677a75c | 292 | s2=SelectLineb2=SelectLinea2; |
sakthipriya | 3:07e15677a75c | 293 | s3=SelectLineb3=SelectLinea3; |
azaddevarm | 32:623747b1cecb | 294 | // printf("\n\r %d %d %d %d", s0,s1,s2,s3); |
sakthipriya | 3:07e15677a75c | 295 | |
sakthipriya | 3:07e15677a75c | 296 | } |
azaddevarm | 29:bb0d64656ba1 | 297 | for(Iteration=0; Iteration<16; Iteration++) |
azaddevarm | 29:bb0d64656ba1 | 298 | { |
sakthipriya | 3:07e15677a75c | 299 | if(Iteration==14) |
sakthipriya | 3:07e15677a75c | 300 | actual_data.voltage_actual[Iteration]= (-90.7*3.3*actual_data.voltage_actual[Iteration])+190.1543; |
sakthipriya | 3:07e15677a75c | 301 | else |
sakthipriya | 3:07e15677a75c | 302 | actual_data.voltage_actual[Iteration]= actual_data.voltage_actual[Iteration]*3.3*5.63; |
sakthipriya | 3:07e15677a75c | 303 | } |
sakthipriya | 3:07e15677a75c | 304 | |
sakthipriya | 3:07e15677a75c | 305 | for(Iteration=0;Iteration<12;Iteration++){ |
sakthipriya | 3:07e15677a75c | 306 | if(Iteration<8) |
sakthipriya | 3:07e15677a75c | 307 | actual_data.current_actual[Iteration]= actual_data.current_actual[Iteration]*3.3/(50*rsens); |
sakthipriya | 3:07e15677a75c | 308 | else |
sakthipriya | 3:07e15677a75c | 309 | actual_data.current_actual[Iteration]=actual_data.current_actual[Iteration]*3.3; |
sakthipriya | 3:07e15677a75c | 310 | int resistance; |
sakthipriya | 3:07e15677a75c | 311 | |
sakthipriya | 3:07e15677a75c | 312 | resistance=24000*actual_data.current_actual[Iteration]/(3.3-actual_data.current_actual[Iteration]); |
sakthipriya | 3:07e15677a75c | 313 | if(actual_data.current_actual[Iteration]>1.47) |
sakthipriya | 3:07e15677a75c | 314 | { |
sakthipriya | 3:07e15677a75c | 315 | actual_data.current_actual[Iteration]=3694/log(24.032242*resistance); |
sakthipriya | 3:07e15677a75c | 316 | } |
sakthipriya | 3:07e15677a75c | 317 | else{ |
sakthipriya | 3:07e15677a75c | 318 | |
sakthipriya | 3:07e15677a75c | 319 | actual_data.current_actual[Iteration]=3365.4/log(7.60573*resistance); |
sakthipriya | 3:07e15677a75c | 320 | } |
sakthipriya | 3:07e15677a75c | 321 | } |
sakthipriya | 3:07e15677a75c | 322 | actual_data.BAE_temp_actual=(-90.7*3.3*actual_data.BAE_temp_actual)+190.1543; |
sakthipriya | 3:07e15677a75c | 323 | |
sakthipriya | 3:07e15677a75c | 324 | actual_data.Batt_voltage_actual=Batt_voltage.read()*3.3*5.63; |
sakthipriya | 3:07e15677a75c | 325 | |
sakthipriya | 3:07e15677a75c | 326 | //quantizing data |
sakthipriya | 3:07e15677a75c | 327 | for(Iteration=0; Iteration<16; Iteration++){ |
sakthipriya | 3:07e15677a75c | 328 | |
sakthipriya | 3:07e15677a75c | 329 | if(Iteration==14) |
sakthipriya | 3:07e15677a75c | 330 | quant_data.voltage_quant[Iteration]=quantiz(tstart,tstep,actual_data.voltage_actual[Iteration]); |
sakthipriya | 3:07e15677a75c | 331 | else |
sakthipriya | 3:07e15677a75c | 332 | quant_data.voltage_quant[Iteration]=quantiz(vstart,vstep,actual_data.voltage_actual[Iteration]); |
sakthipriya | 3:07e15677a75c | 333 | |
sakthipriya | 3:07e15677a75c | 334 | } |
sakthipriya | 3:07e15677a75c | 335 | for(Iteration=0;Iteration<12;Iteration++){ |
sakthipriya | 3:07e15677a75c | 336 | if(Iteration<8) |
sakthipriya | 3:07e15677a75c | 337 | quant_data.current_quant[Iteration]=quantiz(cstart,cstep,actual_data.current_actual[Iteration]); |
sakthipriya | 3:07e15677a75c | 338 | else |
sakthipriya | 3:07e15677a75c | 339 | quant_data.current_quant[Iteration]=quantiz(tstart_thermistor,tstep_thermistor,actual_data.current_actual[Iteration]); |
sakthipriya | 3:07e15677a75c | 340 | } |
sakthipriya | 3:07e15677a75c | 341 | for(Iteration=0;Iteration<2;Iteration++){ |
sakthipriya | 3:07e15677a75c | 342 | |
sakthipriya | 3:07e15677a75c | 343 | quant_data.Batt_temp_quant[Iteration]=quantiz(tstart,tstep,actual_data.Batt_temp_actual[Iteration]); |
sakthipriya | 3:07e15677a75c | 344 | } |
sakthipriya | 3:07e15677a75c | 345 | |
sakthipriya | 3:07e15677a75c | 346 | quant_data.Batt_gauge_quant[0]=quantiz(vcell_start,vcell_step,actual_data.Batt_gauge_actual[0]); |
sakthipriya | 3:07e15677a75c | 347 | quant_data.Batt_gauge_quant[1]=quantiz(soc_start,soc_step,actual_data.Batt_gauge_actual[1]); |
sakthipriya | 3:07e15677a75c | 348 | quant_data.Batt_gauge_quant[2]=quantiz(crate_start,crate_step,actual_data.Batt_gauge_actual[2]); |
sakthipriya | 3:07e15677a75c | 349 | quant_data.Batt_gauge_alerts=actual_data.Batt_gauge_actual[3]; |
sakthipriya | 3:07e15677a75c | 350 | |
sakthipriya | 3:07e15677a75c | 351 | quant_data.BAE_temp_quant=quantiz(tstart,tstep,actual_data.BAE_temp_actual); |
sakthipriya | 3:07e15677a75c | 352 | |
sakthipriya | 3:07e15677a75c | 353 | for(Iteration=0;Iteration<3;Iteration++){ |
sakthipriya | 5:bb592f3185cc | 354 | quant_data.AngularSpeed_quant[Iteration]=actual_data.AngularSpeed_actual[Iteration]; |
azaddevarm | 30:22b338b027de | 355 | //printf("\n\r w value %f",quant_data.AngularSpeed_quant[Iteration]); |
sakthipriya | 3:07e15677a75c | 356 | } |
sakthipriya | 3:07e15677a75c | 357 | |
sakthipriya | 3:07e15677a75c | 358 | for(Iteration=0;Iteration<3;Iteration++){ |
sakthipriya | 3:07e15677a75c | 359 | quant_data.Bvalue_quant[Iteration]=actual_data.Bvalue_actual[Iteration]; |
azaddevarm | 30:22b338b027de | 360 | //printf("\n\r b value %f",quant_data.Bvalue_quant[Iteration]); |
sakthipriya | 3:07e15677a75c | 361 | } |
sakthipriya | 3:07e15677a75c | 362 | |
sakthipriya | 3:07e15677a75c | 363 | quant_data.Batt_voltage_quant=quantiz(vstart,vstep,actual_data.Batt_voltage_actual); |
sakthipriya | 3:07e15677a75c | 364 | |
sakthipriya | 3:07e15677a75c | 365 | |
sakthipriya | 3:07e15677a75c | 366 | arch_data.Batt_1_temp=quant_data.Batt_temp_quant[0]; |
sakthipriya | 3:07e15677a75c | 367 | arch_data.Batt_2_temp=quant_data.Batt_temp_quant[1]; |
sakthipriya | 3:07e15677a75c | 368 | arch_data.EPS_PCB_temp=quant_data.voltage_quant[14]; |
sakthipriya | 3:07e15677a75c | 369 | arch_data.Batt_SOC=quant_data.Batt_gauge_quant[1]; |
sakthipriya | 3:07e15677a75c | 370 | arch_data.power_mode=actual_data.power_mode; |
sakthipriya | 5:bb592f3185cc | 371 | arch_data.faultPoll_status=actual_data.faultPoll_status; |
sakthipriya | 5:bb592f3185cc | 372 | arch_data.faultIr_status=actual_data.faultIr_status; |
sakthipriya | 3:07e15677a75c | 373 | arch_data.Batt_voltage=quant_data.Batt_voltage_quant; |
sakthipriya | 6:036d08b62785 | 374 | printf("\n\r in hk"); |
sakthipriya | 3:07e15677a75c | 375 | |
sakthipriya | 3:07e15677a75c | 376 | } |
sakthipriya | 3:07e15677a75c | 377 | |
sakthipriya | 5:bb592f3185cc | 378 | void FCTN_APPEND_HKDATA() |
sakthipriya | 5:bb592f3185cc | 379 | { |
sakthipriya | 5:bb592f3185cc | 380 | // quantized data |
sakthipriya | 5:bb592f3185cc | 381 | for (int i=0;i<16;i++) |
sakthipriya | 5:bb592f3185cc | 382 | BAE_data[i] = quant_data.voltage_quant[i]; |
sakthipriya | 5:bb592f3185cc | 383 | for (int i=16;i<28;i++) |
sakthipriya | 5:bb592f3185cc | 384 | BAE_data[i] = quant_data.current_quant[i-16]; |
sakthipriya | 5:bb592f3185cc | 385 | BAE_data[28] = quant_data.Batt_temp_quant[0]; |
sakthipriya | 5:bb592f3185cc | 386 | BAE_data[29] = quant_data.Batt_temp_quant[1]; |
sakthipriya | 5:bb592f3185cc | 387 | BAE_data[30] = quant_data.Batt_gauge_quant[1]; |
sakthipriya | 5:bb592f3185cc | 388 | BAE_data[31] = quant_data.Batt_gauge_quant[1]; |
sakthipriya | 5:bb592f3185cc | 389 | BAE_data[32] = quant_data.Batt_gauge_quant[1]; |
sakthipriya | 5:bb592f3185cc | 390 | FCTN_CONVERT_FLOAT(quant_data.Batt_gauge_alerts,&BAE_data[33]); |
sakthipriya | 5:bb592f3185cc | 391 | BAE_data[37] = quant_data.BAE_temp_quant; |
sakthipriya | 5:bb592f3185cc | 392 | FCTN_CONVERT_FLOAT(quant_data.AngularSpeed_quant[0],&BAE_data[38]); |
sakthipriya | 6:036d08b62785 | 393 | //printf("\n\r outside %d %d %d %d", BAE_data[38],BAE_data[39],BAE_data[40],BAE_data[41]); |
sakthipriya | 6:036d08b62785 | 394 | //std:: cout << "\n\r uint8 outside " << BAE_data[38] << '\t' << BAE_data[39] << '\t' << BAE_data[40] << '\t' << BAE_data[41] <<std::endl; |
sakthipriya | 5:bb592f3185cc | 395 | FCTN_CONVERT_FLOAT(quant_data.AngularSpeed_quant[1],&BAE_data[42]); |
sakthipriya | 6:036d08b62785 | 396 | //std:: cout << "\n\r uint8 outside " << BAE_data[42] << '\t' << BAE_data[43] << '\t' << BAE_data[44] << '\t' << BAE_data[45] <<std::endl; |
sakthipriya | 6:036d08b62785 | 397 | // printf("\n\r outside %d %d %d %d", BAE_data[42],BAE_data[43],BAE_data[44],BAE_data[45]); |
sakthipriya | 5:bb592f3185cc | 398 | FCTN_CONVERT_FLOAT(quant_data.AngularSpeed_quant[2],&BAE_data[46]); |
sakthipriya | 6:036d08b62785 | 399 | //printf("\n\r outside %d %d %d %d", BAE_data[46],BAE_data[47],BAE_data[48],BAE_data[49]); |
sakthipriya | 6:036d08b62785 | 400 | //std:: cout << "\n\r uint8 outside " << BAE_data[46] << '\t' << BAE_data[47] << '\t' << BAE_data[48] << '\t' << BAE_data[49] <<std::endl; |
sakthipriya | 5:bb592f3185cc | 401 | FCTN_CONVERT_FLOAT(quant_data.Bvalue_quant[0],&BAE_data[50]); |
sakthipriya | 5:bb592f3185cc | 402 | FCTN_CONVERT_FLOAT(quant_data.Bvalue_quant[1],&BAE_data[54]); |
sakthipriya | 5:bb592f3185cc | 403 | FCTN_CONVERT_FLOAT(quant_data.Bvalue_quant[2],&BAE_data[58]); |
sakthipriya | 5:bb592f3185cc | 404 | BAE_data[62] = quant_data.Batt_voltage_quant; |
sakthipriya | 5:bb592f3185cc | 405 | BAE_data[63] = (uint8_t)actual_data.power_mode; |
sakthipriya | 5:bb592f3185cc | 406 | BAE_data[64] = actual_data.faultPoll_status; |
sakthipriya | 5:bb592f3185cc | 407 | BAE_data[65] = actual_data.faultIr_status; |
sakthipriya | 5:bb592f3185cc | 408 | // archived data |
sakthipriya | 5:bb592f3185cc | 409 | BAE_data[66] = arch_data.Batt_1_temp; //verify if uint8_t is right |
sakthipriya | 5:bb592f3185cc | 410 | BAE_data[67] = arch_data.Batt_2_temp; |
sakthipriya | 5:bb592f3185cc | 411 | BAE_data[68] = arch_data.EPS_PCB_temp; |
sakthipriya | 5:bb592f3185cc | 412 | BAE_data[69] = arch_data.Batt_SOC; |
sakthipriya | 5:bb592f3185cc | 413 | BAE_data[70] = (uint8_t)arch_data.power_mode; |
sakthipriya | 5:bb592f3185cc | 414 | BAE_data[71] = arch_data.faultPoll_status; |
sakthipriya | 5:bb592f3185cc | 415 | BAE_data[72] = arch_data.faultIr_status; |
sakthipriya | 5:bb592f3185cc | 416 | BAE_data[73] = arch_data.Batt_voltage; |
sakthipriya | 6:036d08b62785 | 417 | for(int i=0; i<73;i++) |
sakthipriya | 6:036d08b62785 | 418 | BAE_chardata[i] = (char)BAE_data[i]; |
sakthipriya | 6:036d08b62785 | 419 | BAE_chardata[73] = '\0'; |
sakthipriya | 7:a46a1dee4497 | 420 | printf("\n\r bae ats data %c %c %c", BAE_chardata[38],BAE_chardata[39],BAE_chardata[40]); |
sakthipriya | 6:036d08b62785 | 421 | printf("\n\r BAE data is %s", BAE_chardata); |
sakthipriya | 5:bb592f3185cc | 422 | |
sakthipriya | 5:bb592f3185cc | 423 | } |
sakthipriya | 5:bb592f3185cc | 424 | |
sakthipriya | 5:bb592f3185cc | 425 | uint8_t quantiz(float start,float step,float x) |
sakthipriya | 0:7b4c00e3912f | 426 | { |
sakthipriya | 0:7b4c00e3912f | 427 | int y=(x-start)/step; |
sakthipriya | 0:7b4c00e3912f | 428 | if(y<=0)y=0; |
sakthipriya | 0:7b4c00e3912f | 429 | if(y>=255)y=255; |
sakthipriya | 0:7b4c00e3912f | 430 | return y; |
sakthipriya | 0:7b4c00e3912f | 431 | } |
sakthipriya | 0:7b4c00e3912f | 432 | |
sakthipriya | 3:07e15677a75c | 433 | bool firstCount=true; // goes to EPS init |
sakthipriya | 3:07e15677a75c | 434 | |
sakthipriya | 3:07e15677a75c | 435 | |
sakthipriya | 3:07e15677a75c | 436 | void saveMin(char x,char y){ |
sakthipriya | 3:07e15677a75c | 437 | if(y<x){ |
sakthipriya | 3:07e15677a75c | 438 | x=y; |
sakthipriya | 3:07e15677a75c | 439 | } |
sakthipriya | 3:07e15677a75c | 440 | |
sakthipriya | 3:07e15677a75c | 441 | } |
sakthipriya | 3:07e15677a75c | 442 | void saveMax(char x,char y){ |
sakthipriya | 3:07e15677a75c | 443 | if (y>x) |
sakthipriya | 3:07e15677a75c | 444 | { |
sakthipriya | 3:07e15677a75c | 445 | x=y; |
sakthipriya | 3:07e15677a75c | 446 | } |
sakthipriya | 0:7b4c00e3912f | 447 | } |
sakthipriya | 0:7b4c00e3912f | 448 | |
sakthipriya | 3:07e15677a75c | 449 | |
sakthipriya | 3:07e15677a75c | 450 | void minMaxHkData(){ |
sakthipriya | 3:07e15677a75c | 451 | if(firstCount==true){ |
sakthipriya | 3:07e15677a75c | 452 | for (int i = 0; i < 16; ++i){ |
sakthipriya | 3:07e15677a75c | 453 | bae_HK_minmax.voltage_min[i] = quant_data.voltage_quant[i]; |
sakthipriya | 3:07e15677a75c | 454 | bae_HK_minmax.voltage_max[i] = quant_data.voltage_quant[i]; |
sakthipriya | 3:07e15677a75c | 455 | } |
sakthipriya | 3:07e15677a75c | 456 | for (int i = 0; i < 12; ++i){ |
sakthipriya | 3:07e15677a75c | 457 | bae_HK_minmax.current_min[i] = quant_data.current_quant[i]; |
sakthipriya | 3:07e15677a75c | 458 | bae_HK_minmax.current_max[i] = quant_data.current_quant[i]; |
sakthipriya | 3:07e15677a75c | 459 | } |
sakthipriya | 3:07e15677a75c | 460 | |
sakthipriya | 3:07e15677a75c | 461 | for (int i = 0; i < 2; ++i){ |
sakthipriya | 3:07e15677a75c | 462 | bae_HK_minmax.Batt_temp_min[i] = quant_data.Batt_temp_quant[i]; |
sakthipriya | 3:07e15677a75c | 463 | bae_HK_minmax.Batt_temp_max[i] = quant_data.Batt_temp_quant[i]; |
sakthipriya | 3:07e15677a75c | 464 | } |
sakthipriya | 3:07e15677a75c | 465 | for (int i = 0; i < 3; ++i){ |
sakthipriya | 3:07e15677a75c | 466 | bae_HK_minmax.Batt_gauge_min[i] = quant_data.Batt_gauge_quant[i]; |
sakthipriya | 3:07e15677a75c | 467 | bae_HK_minmax.Batt_gauge_max[i] = quant_data.Batt_gauge_quant[i]; |
sakthipriya | 3:07e15677a75c | 468 | } |
sakthipriya | 3:07e15677a75c | 469 | for (int i = 0; i < 3; ++i){ |
sakthipriya | 3:07e15677a75c | 470 | bae_HK_minmax.AngularSpeed_min[i] = quant_data.AngularSpeed_quant[i]; |
sakthipriya | 3:07e15677a75c | 471 | bae_HK_minmax.AngularSpeed_max[i] = quant_data.AngularSpeed_quant[i]; |
sakthipriya | 3:07e15677a75c | 472 | } |
sakthipriya | 3:07e15677a75c | 473 | for (int i = 0; i < 3; ++i){ |
sakthipriya | 3:07e15677a75c | 474 | bae_HK_minmax.Bvalue_min[i] = quant_data.Bvalue_quant[i]; |
sakthipriya | 3:07e15677a75c | 475 | bae_HK_minmax.Bvalue_max[i] = quant_data.Bvalue_quant[i]; |
sakthipriya | 3:07e15677a75c | 476 | } |
sakthipriya | 3:07e15677a75c | 477 | bae_HK_minmax.BAE_temp_min=quant_data.BAE_temp_quant; |
sakthipriya | 3:07e15677a75c | 478 | bae_HK_minmax.BAE_temp_max=quant_data.BAE_temp_quant; |
sakthipriya | 3:07e15677a75c | 479 | bae_HK_minmax.Batt_voltage_min=quant_data.Batt_voltage_quant; |
sakthipriya | 3:07e15677a75c | 480 | bae_HK_minmax.Batt_voltage_max=quant_data.Batt_voltage_quant; |
sakthipriya | 3:07e15677a75c | 481 | |
sakthipriya | 3:07e15677a75c | 482 | } |
sakthipriya | 3:07e15677a75c | 483 | else { |
sakthipriya | 3:07e15677a75c | 484 | for (int i = 0; i < 16; ++i) |
sakthipriya | 3:07e15677a75c | 485 | { |
sakthipriya | 3:07e15677a75c | 486 | saveMin(bae_HK_minmax.voltage_min[i],quant_data.voltage_quant[i]); |
sakthipriya | 3:07e15677a75c | 487 | saveMax(bae_HK_minmax.voltage_max[i],quant_data.voltage_quant[i]); |
sakthipriya | 3:07e15677a75c | 488 | } |
sakthipriya | 3:07e15677a75c | 489 | for (int i = 0; i < 12; ++i) |
sakthipriya | 3:07e15677a75c | 490 | { |
sakthipriya | 3:07e15677a75c | 491 | saveMin(bae_HK_minmax.current_min[i],quant_data.current_quant[i]); |
sakthipriya | 3:07e15677a75c | 492 | saveMax(bae_HK_minmax.current_max[i],quant_data.current_quant[i]); |
sakthipriya | 3:07e15677a75c | 493 | } |
sakthipriya | 3:07e15677a75c | 494 | |
sakthipriya | 3:07e15677a75c | 495 | for (int i = 0; i < 2; ++i) |
sakthipriya | 3:07e15677a75c | 496 | { |
sakthipriya | 3:07e15677a75c | 497 | saveMin(bae_HK_minmax.Batt_temp_min[i],quant_data.Batt_temp_quant[i]); |
sakthipriya | 3:07e15677a75c | 498 | saveMax(bae_HK_minmax.Batt_temp_max[i],quant_data.Batt_temp_quant[i]); |
sakthipriya | 3:07e15677a75c | 499 | } |
sakthipriya | 3:07e15677a75c | 500 | for (int i = 0; i < 3; ++i) |
sakthipriya | 3:07e15677a75c | 501 | { |
sakthipriya | 3:07e15677a75c | 502 | saveMin(bae_HK_minmax.Batt_gauge_min[i], quant_data.Batt_gauge_quant[i]); |
sakthipriya | 3:07e15677a75c | 503 | saveMax(bae_HK_minmax.Batt_gauge_max[i], quant_data.Batt_gauge_quant[i]); |
sakthipriya | 3:07e15677a75c | 504 | } |
sakthipriya | 3:07e15677a75c | 505 | for (int i = 0; i < 3; ++i) |
sakthipriya | 3:07e15677a75c | 506 | { |
sakthipriya | 3:07e15677a75c | 507 | saveMin(bae_HK_minmax.AngularSpeed_min[i], quant_data.AngularSpeed_quant[i]); |
sakthipriya | 3:07e15677a75c | 508 | saveMax(bae_HK_minmax.AngularSpeed_max[i], quant_data.AngularSpeed_quant[i]); |
sakthipriya | 3:07e15677a75c | 509 | } |
sakthipriya | 3:07e15677a75c | 510 | for (int i = 0; i < 3; ++i) |
sakthipriya | 3:07e15677a75c | 511 | { |
sakthipriya | 3:07e15677a75c | 512 | saveMin(bae_HK_minmax.Bvalue_min[i], quant_data.Bvalue_quant[i]); |
sakthipriya | 3:07e15677a75c | 513 | saveMax(bae_HK_minmax.Bvalue_max[i], quant_data.Bvalue_quant[i]); |
sakthipriya | 3:07e15677a75c | 514 | } |
sakthipriya | 3:07e15677a75c | 515 | saveMin(bae_HK_minmax.BAE_temp_min,quant_data.BAE_temp_quant); |
sakthipriya | 3:07e15677a75c | 516 | saveMax(bae_HK_minmax.BAE_temp_max,quant_data.BAE_temp_quant); |
sakthipriya | 3:07e15677a75c | 517 | saveMin(bae_HK_minmax.Batt_voltage_min,quant_data.Batt_voltage_quant); |
sakthipriya | 3:07e15677a75c | 518 | saveMin(bae_HK_minmax.Batt_voltage_max,quant_data.Batt_voltage_quant); |
sakthipriya | 3:07e15677a75c | 519 | |
sakthipriya | 3:07e15677a75c | 520 | |
sakthipriya | 3:07e15677a75c | 521 | } |
sakthipriya | 3:07e15677a75c | 522 | firstCount=false; |
sakthipriya | 3:07e15677a75c | 523 | } |
sakthipriya | 3:07e15677a75c | 524 | |
sakthipriya | 3:07e15677a75c | 525 | |
sakthipriya | 0:7b4c00e3912f | 526 | //............................................BATTERY GAUGE......................................// |
sakthipriya | 0:7b4c00e3912f | 527 | void FCTN_BATTERYGAUGE_INIT() |
sakthipriya | 0:7b4c00e3912f | 528 | { |
sakthipriya | 0:7b4c00e3912f | 529 | disable_sleep(); |
sakthipriya | 0:7b4c00e3912f | 530 | disable_hibernate(); |
sakthipriya | 0:7b4c00e3912f | 531 | socChangeAlertEnabled(true); //enabling alert on soc changing by 1% |
sakthipriya | 0:7b4c00e3912f | 532 | emptyAlertThreshold(32);//setting empty alert threshold to 32% soc |
sakthipriya | 0:7b4c00e3912f | 533 | vAlertMinMaxThreshold();//set min, max value of Valrt register |
sakthipriya | 0:7b4c00e3912f | 534 | vResetThresholdSet();//set threshold voltage for reset |
sakthipriya | 0:7b4c00e3912f | 535 | vResetAlertEnabled(true);//enable alert on reset for V < Vreset |
azaddevarm | 32:623747b1cecb | 536 | int ack = write(REG_STATUS, read(REG_STATUS) & 0xFEFF); //Clearing Reset Indicator bit |
azaddevarm | 32:623747b1cecb | 537 | if( ack == 0 ) printf("BTG init success\n\r"); |
azaddevarm | 32:623747b1cecb | 538 | else printf("BTG init fail ack = %d\n\r", ack); |
sakthipriya | 0:7b4c00e3912f | 539 | } |
sakthipriya | 0:7b4c00e3912f | 540 | |
azaddevarm | 30:22b338b027de | 541 | int FCTN_BATTERYGAUGE_MAIN(float Battery_parameters[4], float temp) |
sakthipriya | 0:7b4c00e3912f | 542 | { |
sakthipriya | 1:446a959e36ce | 543 | printf("\n\r battery gauge \n"); |
sakthipriya | 0:7b4c00e3912f | 544 | |
sakthipriya | 0:7b4c00e3912f | 545 | tempCompensation(temp); |
sakthipriya | 0:7b4c00e3912f | 546 | |
sakthipriya | 0:7b4c00e3912f | 547 | |
sakthipriya | 0:7b4c00e3912f | 548 | Battery_parameters[0]=vcell(); |
sakthipriya | 0:7b4c00e3912f | 549 | Battery_parameters[1]=soc(); |
sakthipriya | 0:7b4c00e3912f | 550 | Battery_parameters[2]=crate(); |
azaddevarm | 30:22b338b027de | 551 | |
sakthipriya | 0:7b4c00e3912f | 552 | printf("\nVcell=%f",vcell()); //remove this for final code |
azaddevarm | 32:623747b1cecb | 553 | printf("\nSOC=%f",Battery_parameters[1]); //remove this for final code |
sakthipriya | 0:7b4c00e3912f | 554 | printf("\nC_rate=%f",crate()); //remove this for final code |
sakthipriya | 0:7b4c00e3912f | 555 | |
sakthipriya | 0:7b4c00e3912f | 556 | if (alerting()== true) //alert is on |
sakthipriya | 0:7b4c00e3912f | 557 | { |
sakthipriya | 0:7b4c00e3912f | 558 | Battery_parameters[3]=alertFlags(); |
sakthipriya | 0:7b4c00e3912f | 559 | clearAlert();//clear alert |
sakthipriya | 0:7b4c00e3912f | 560 | clearAlertFlags();//clear all alert flags |
sakthipriya | 0:7b4c00e3912f | 561 | } |
azaddevarm | 30:22b338b027de | 562 | |
azaddevarm | 30:22b338b027de | 563 | if( soc() == 200) return 0; //Data not received - Invalid SOC |
azaddevarm | 30:22b338b027de | 564 | else return 1; |
azaddevarm | 30:22b338b027de | 565 | } |
azaddevarm | 30:22b338b027de | 566 | |
azaddevarm | 30:22b338b027de | 567 | void tempCompensation(float temp) |
azaddevarm | 30:22b338b027de | 568 | { |
azaddevarm | 30:22b338b027de | 569 | //Calculate the new RCOMP value |
azaddevarm | 30:22b338b027de | 570 | char rcomp; |
azaddevarm | 30:22b338b027de | 571 | if (temp > 20.0) { |
azaddevarm | 30:22b338b027de | 572 | rcomp = RCOMP0 + (temp - 20.0) * -0.5; |
azaddevarm | 30:22b338b027de | 573 | } else { |
azaddevarm | 30:22b338b027de | 574 | rcomp = RCOMP0 + (temp - 20.0) * -5.0; |
azaddevarm | 30:22b338b027de | 575 | } |
azaddevarm | 30:22b338b027de | 576 | |
azaddevarm | 30:22b338b027de | 577 | //Update the RCOMP value |
azaddevarm | 30:22b338b027de | 578 | compensation(rcomp); |
sakthipriya | 0:7b4c00e3912f | 579 | } |
sakthipriya | 0:7b4c00e3912f | 580 | |
azaddevarm | 30:22b338b027de | 581 | void compensation(char rcomp) |
azaddevarm | 30:22b338b027de | 582 | { |
azaddevarm | 30:22b338b027de | 583 | //Read the current 16-bit register value |
azaddevarm | 30:22b338b027de | 584 | unsigned short value = read(REG_CONFIG); |
azaddevarm | 30:22b338b027de | 585 | |
azaddevarm | 30:22b338b027de | 586 | //Update the register value |
azaddevarm | 30:22b338b027de | 587 | value &= 0x00FF; |
azaddevarm | 30:22b338b027de | 588 | value |= rcomp << 8; |
azaddevarm | 30:22b338b027de | 589 | |
azaddevarm | 30:22b338b027de | 590 | //Write the value back out |
azaddevarm | 30:22b338b027de | 591 | write(REG_CONFIG, value); |
azaddevarm | 30:22b338b027de | 592 | } |
azaddevarm | 30:22b338b027de | 593 | |
azaddevarm | 30:22b338b027de | 594 | |
azaddevarm | 30:22b338b027de | 595 | int write(char reg, unsigned short data) |
azaddevarm | 30:22b338b027de | 596 | { |
azaddevarm | 30:22b338b027de | 597 | //Create a temporary buffer |
azaddevarm | 30:22b338b027de | 598 | char buff[3]; |
azaddevarm | 30:22b338b027de | 599 | |
azaddevarm | 30:22b338b027de | 600 | //Load the register address and 16-bit data |
azaddevarm | 30:22b338b027de | 601 | buff[0] = reg; |
azaddevarm | 30:22b338b027de | 602 | buff[1] = data >> 8; |
azaddevarm | 30:22b338b027de | 603 | buff[2] = data; |
azaddevarm | 30:22b338b027de | 604 | |
azaddevarm | 30:22b338b027de | 605 | int flag = m_I2C.write(m_ADDR, buff, 3); //Write the data and return ack |
azaddevarm | 30:22b338b027de | 606 | |
azaddevarm | 30:22b338b027de | 607 | if( flag != 0 ) |
azaddevarm | 30:22b338b027de | 608 | { |
azaddevarm | 30:22b338b027de | 609 | flag = m_I2C.write(m_ADDR, buff, 3); //Write the data and return ack |
azaddevarm | 30:22b338b027de | 610 | if( data != read(reg) ) //Verify written data |
azaddevarm | 30:22b338b027de | 611 | EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS |
azaddevarm | 30:22b338b027de | 612 | } |
azaddevarm | 30:22b338b027de | 613 | |
azaddevarm | 30:22b338b027de | 614 | return flag; |
azaddevarm | 30:22b338b027de | 615 | } |
azaddevarm | 30:22b338b027de | 616 | |
sakthipriya | 0:7b4c00e3912f | 617 | unsigned short read(char reg) |
sakthipriya | 0:7b4c00e3912f | 618 | { |
azaddevarm | 30:22b338b027de | 619 | int flag = 1; |
azaddevarm | 30:22b338b027de | 620 | char buff[2]; //Create a temporary buffer |
sakthipriya | 0:7b4c00e3912f | 621 | |
sakthipriya | 0:7b4c00e3912f | 622 | //Select the register |
sakthipriya | 0:7b4c00e3912f | 623 | m_I2C.write(m_ADDR, ®, 1, true); |
sakthipriya | 0:7b4c00e3912f | 624 | //Read the 16-bit register |
azaddevarm | 30:22b338b027de | 625 | flag = m_I2C.read(m_ADDR, buff, 2); |
azaddevarm | 30:22b338b027de | 626 | |
azaddevarm | 30:22b338b027de | 627 | if( flag ) |
azaddevarm | 30:22b338b027de | 628 | { |
azaddevarm | 30:22b338b027de | 629 | m_I2C.write(m_ADDR, ®, 1, true); |
azaddevarm | 30:22b338b027de | 630 | flag = m_I2C.read(m_ADDR, buff, 2); |
azaddevarm | 30:22b338b027de | 631 | if( flag ) |
azaddevarm | 30:22b338b027de | 632 | EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS |
azaddevarm | 30:22b338b027de | 633 | } |
sakthipriya | 0:7b4c00e3912f | 634 | |
sakthipriya | 0:7b4c00e3912f | 635 | //Return the combined 16-bit value |
sakthipriya | 0:7b4c00e3912f | 636 | return (buff[0] << 8) | buff[1]; |
sakthipriya | 0:7b4c00e3912f | 637 | } |
sakthipriya | 0:7b4c00e3912f | 638 | |
sakthipriya | 0:7b4c00e3912f | 639 | |
sakthipriya | 0:7b4c00e3912f | 640 | // Command the MAX17049 to perform a power-on reset |
sakthipriya | 0:7b4c00e3912f | 641 | void reset() |
sakthipriya | 0:7b4c00e3912f | 642 | { |
sakthipriya | 0:7b4c00e3912f | 643 | //Write the POR command |
sakthipriya | 0:7b4c00e3912f | 644 | write(REG_CMD, 0x5400); |
azaddevarm | 30:22b338b027de | 645 | //Re-initialise gauge |
azaddevarm | 30:22b338b027de | 646 | FCTN_BATTERYGAUGE_INIT(); |
sakthipriya | 0:7b4c00e3912f | 647 | } |
sakthipriya | 0:7b4c00e3912f | 648 | |
sakthipriya | 0:7b4c00e3912f | 649 | // Command the MAX17049 to perform a QuickStart |
sakthipriya | 0:7b4c00e3912f | 650 | void quickStart() |
sakthipriya | 0:7b4c00e3912f | 651 | { |
sakthipriya | 0:7b4c00e3912f | 652 | //Read the current 16-bit register value |
sakthipriya | 0:7b4c00e3912f | 653 | unsigned short value = read(REG_MODE); |
lakshya | 15:e09aaaccf134 | 654 | |
sakthipriya | 0:7b4c00e3912f | 655 | //Set the QuickStart bit |
sakthipriya | 0:7b4c00e3912f | 656 | value |= (1 << 14); |
sakthipriya | 0:7b4c00e3912f | 657 | |
sakthipriya | 0:7b4c00e3912f | 658 | //Write the value back out |
sakthipriya | 0:7b4c00e3912f | 659 | write(REG_MODE, value); |
sakthipriya | 0:7b4c00e3912f | 660 | } |
sakthipriya | 0:7b4c00e3912f | 661 | |
sakthipriya | 0:7b4c00e3912f | 662 | |
sakthipriya | 0:7b4c00e3912f | 663 | //disable sleep |
sakthipriya | 0:7b4c00e3912f | 664 | void disable_sleep() |
sakthipriya | 0:7b4c00e3912f | 665 | { |
sakthipriya | 0:7b4c00e3912f | 666 | unsigned short value = read(REG_MODE); |
sakthipriya | 0:7b4c00e3912f | 667 | value &= ~(1 << 13); |
sakthipriya | 0:7b4c00e3912f | 668 | write(REG_MODE, value); |
sakthipriya | 0:7b4c00e3912f | 669 | } |
sakthipriya | 0:7b4c00e3912f | 670 | |
sakthipriya | 0:7b4c00e3912f | 671 | //disable the hibernate of the MAX17049 |
sakthipriya | 0:7b4c00e3912f | 672 | void disable_hibernate() |
sakthipriya | 0:7b4c00e3912f | 673 | { |
sakthipriya | 0:7b4c00e3912f | 674 | write(REG_HIBRT, 0x0000); |
sakthipriya | 0:7b4c00e3912f | 675 | } |
sakthipriya | 0:7b4c00e3912f | 676 | |
sakthipriya | 0:7b4c00e3912f | 677 | |
sakthipriya | 0:7b4c00e3912f | 678 | // Enable or disable the SOC 1% change alert on the MAX17049 |
sakthipriya | 0:7b4c00e3912f | 679 | void socChangeAlertEnabled(bool enabled) |
sakthipriya | 0:7b4c00e3912f | 680 | { |
sakthipriya | 0:7b4c00e3912f | 681 | //Read the current 16-bit register value |
sakthipriya | 0:7b4c00e3912f | 682 | unsigned short value = read(REG_CONFIG); |
sakthipriya | 0:7b4c00e3912f | 683 | |
sakthipriya | 0:7b4c00e3912f | 684 | //Set or clear the ALSC bit |
sakthipriya | 0:7b4c00e3912f | 685 | if (enabled) |
sakthipriya | 0:7b4c00e3912f | 686 | value |= (1 << 6); |
sakthipriya | 0:7b4c00e3912f | 687 | else |
sakthipriya | 0:7b4c00e3912f | 688 | value &= ~(1 << 6); |
sakthipriya | 0:7b4c00e3912f | 689 | |
sakthipriya | 0:7b4c00e3912f | 690 | //Write the value back out |
sakthipriya | 0:7b4c00e3912f | 691 | write(REG_CONFIG, value); |
sakthipriya | 0:7b4c00e3912f | 692 | } |
sakthipriya | 0:7b4c00e3912f | 693 | |
sakthipriya | 0:7b4c00e3912f | 694 | //Set the SOC empty alert threshold of the MAX17049 |
sakthipriya | 0:7b4c00e3912f | 695 | void emptyAlertThreshold(char threshold) |
sakthipriya | 0:7b4c00e3912f | 696 | { |
sakthipriya | 0:7b4c00e3912f | 697 | //Read the current 16-bit register value |
sakthipriya | 0:7b4c00e3912f | 698 | unsigned short value = read(REG_CONFIG); |
sakthipriya | 0:7b4c00e3912f | 699 | |
sakthipriya | 0:7b4c00e3912f | 700 | //Update the register value |
sakthipriya | 0:7b4c00e3912f | 701 | value &= 0xFFE0; |
sakthipriya | 0:7b4c00e3912f | 702 | value |= 32 - threshold; |
sakthipriya | 0:7b4c00e3912f | 703 | |
sakthipriya | 0:7b4c00e3912f | 704 | //Write the 16-bit register |
sakthipriya | 0:7b4c00e3912f | 705 | write(REG_CONFIG, value); |
sakthipriya | 0:7b4c00e3912f | 706 | } |
sakthipriya | 0:7b4c00e3912f | 707 | |
sakthipriya | 0:7b4c00e3912f | 708 | // Set the low and high voltage alert threshold of the MAX17049 |
sakthipriya | 0:7b4c00e3912f | 709 | void vAlertMinMaxThreshold() |
sakthipriya | 0:7b4c00e3912f | 710 | { |
sakthipriya | 0:7b4c00e3912f | 711 | //Read the current 16-bit register value |
sakthipriya | 0:7b4c00e3912f | 712 | unsigned short value = read(REG_VALRT); |
sakthipriya | 0:7b4c00e3912f | 713 | |
sakthipriya | 0:7b4c00e3912f | 714 | //Mask off the old value |
sakthipriya | 0:7b4c00e3912f | 715 | |
sakthipriya | 0:7b4c00e3912f | 716 | value = 0x96D2; |
sakthipriya | 0:7b4c00e3912f | 717 | |
sakthipriya | 0:7b4c00e3912f | 718 | //Write the 16-bit register |
sakthipriya | 0:7b4c00e3912f | 719 | write(REG_VALRT, value); |
sakthipriya | 0:7b4c00e3912f | 720 | } |
sakthipriya | 0:7b4c00e3912f | 721 | |
sakthipriya | 0:7b4c00e3912f | 722 | |
sakthipriya | 0:7b4c00e3912f | 723 | // Set the reset voltage threshold of the MAX17049 |
sakthipriya | 0:7b4c00e3912f | 724 | void vResetThresholdSet() |
sakthipriya | 0:7b4c00e3912f | 725 | { |
sakthipriya | 0:7b4c00e3912f | 726 | //Read the current 16-bit register value |
sakthipriya | 0:7b4c00e3912f | 727 | unsigned short value = read(REG_VRESET_ID); |
sakthipriya | 0:7b4c00e3912f | 728 | |
sakthipriya | 0:7b4c00e3912f | 729 | //Mask off the old //value |
sakthipriya | 0:7b4c00e3912f | 730 | value &= 0x00FF;//Dis=0 |
sakthipriya | 0:7b4c00e3912f | 731 | |
sakthipriya | 0:7b4c00e3912f | 732 | value |= 0x9400;//corresponding to 2.5 V |
sakthipriya | 0:7b4c00e3912f | 733 | |
sakthipriya | 0:7b4c00e3912f | 734 | |
sakthipriya | 0:7b4c00e3912f | 735 | //Write the 16-bit register |
sakthipriya | 0:7b4c00e3912f | 736 | write(REG_VRESET_ID, value); |
sakthipriya | 0:7b4c00e3912f | 737 | } |
sakthipriya | 0:7b4c00e3912f | 738 | |
sakthipriya | 0:7b4c00e3912f | 739 | |
sakthipriya | 0:7b4c00e3912f | 740 | // Enable or disable the voltage reset alert on the MAX17049 |
sakthipriya | 0:7b4c00e3912f | 741 | void vResetAlertEnabled(bool enabled) |
sakthipriya | 0:7b4c00e3912f | 742 | { |
sakthipriya | 0:7b4c00e3912f | 743 | //Read the current 16-bit register value |
sakthipriya | 0:7b4c00e3912f | 744 | unsigned short value = read(REG_STATUS); |
sakthipriya | 0:7b4c00e3912f | 745 | |
sakthipriya | 0:7b4c00e3912f | 746 | //Set or clear the EnVR bit |
sakthipriya | 0:7b4c00e3912f | 747 | if (enabled) |
sakthipriya | 0:7b4c00e3912f | 748 | value |= (1 << 14); |
sakthipriya | 0:7b4c00e3912f | 749 | else |
sakthipriya | 0:7b4c00e3912f | 750 | value &= ~(1 << 14); |
sakthipriya | 0:7b4c00e3912f | 751 | |
sakthipriya | 0:7b4c00e3912f | 752 | //Write the value back out |
sakthipriya | 0:7b4c00e3912f | 753 | write(REG_STATUS, value); |
sakthipriya | 0:7b4c00e3912f | 754 | } |
azaddevarm | 30:22b338b027de | 755 | |
azaddevarm | 30:22b338b027de | 756 | // Command the MAX17049 to de-assert the ALRT pin |
azaddevarm | 30:22b338b027de | 757 | void clearAlert() |
azaddevarm | 30:22b338b027de | 758 | { |
azaddevarm | 30:22b338b027de | 759 | //Read the current 16-bit register value |
azaddevarm | 30:22b338b027de | 760 | unsigned short value = read(REG_CONFIG); |
sakthipriya | 0:7b4c00e3912f | 761 | |
azaddevarm | 30:22b338b027de | 762 | //Clear the ALRT bit |
azaddevarm | 30:22b338b027de | 763 | value &= ~(1 << 5); |
azaddevarm | 30:22b338b027de | 764 | |
azaddevarm | 30:22b338b027de | 765 | //Write the value back out |
azaddevarm | 30:22b338b027de | 766 | write(REG_CONFIG, value); |
azaddevarm | 30:22b338b027de | 767 | } |
azaddevarm | 30:22b338b027de | 768 | |
sakthipriya | 0:7b4c00e3912f | 769 | //Get the current alert flags on the MAX17049 |
sakthipriya | 0:7b4c00e3912f | 770 | //refer datasheet-status registers section to decode it. |
sakthipriya | 0:7b4c00e3912f | 771 | char alertFlags() |
sakthipriya | 0:7b4c00e3912f | 772 | { |
sakthipriya | 0:7b4c00e3912f | 773 | //Read the 16-bit register value |
sakthipriya | 0:7b4c00e3912f | 774 | unsigned short value = read(REG_STATUS); |
sakthipriya | 0:7b4c00e3912f | 775 | |
sakthipriya | 0:7b4c00e3912f | 776 | //Return only the flag bits |
sakthipriya | 0:7b4c00e3912f | 777 | return (value >> 8) & 0x3F; |
sakthipriya | 0:7b4c00e3912f | 778 | } |
sakthipriya | 0:7b4c00e3912f | 779 | |
sakthipriya | 0:7b4c00e3912f | 780 | // Clear all the alert flags on the MAX17049 |
sakthipriya | 0:7b4c00e3912f | 781 | void clearAlertFlags() |
sakthipriya | 0:7b4c00e3912f | 782 | { |
sakthipriya | 0:7b4c00e3912f | 783 | //Read the current 16-bit register value |
sakthipriya | 0:7b4c00e3912f | 784 | unsigned short value = read(REG_STATUS); |
sakthipriya | 0:7b4c00e3912f | 785 | |
sakthipriya | 0:7b4c00e3912f | 786 | //Clear the specified flag bits |
sakthipriya | 0:7b4c00e3912f | 787 | value &= ~( 0x3F<< 8); |
sakthipriya | 0:7b4c00e3912f | 788 | |
sakthipriya | 0:7b4c00e3912f | 789 | //Write the value back out |
sakthipriya | 0:7b4c00e3912f | 790 | write(REG_STATUS, value); |
sakthipriya | 0:7b4c00e3912f | 791 | } |
sakthipriya | 0:7b4c00e3912f | 792 | |
sakthipriya | 0:7b4c00e3912f | 793 | // Get the current cell voltage measurement of the MAX17049 |
sakthipriya | 0:7b4c00e3912f | 794 | float vcell() |
sakthipriya | 0:7b4c00e3912f | 795 | { |
sakthipriya | 1:446a959e36ce | 796 | |
sakthipriya | 0:7b4c00e3912f | 797 | //Read the 16-bit raw Vcell value |
sakthipriya | 0:7b4c00e3912f | 798 | unsigned short value = read(REG_VCELL); |
sakthipriya | 0:7b4c00e3912f | 799 | |
sakthipriya | 0:7b4c00e3912f | 800 | //Return Vcell in volts |
sakthipriya | 0:7b4c00e3912f | 801 | return value * 0.000078125*2; |
sakthipriya | 0:7b4c00e3912f | 802 | } |
sakthipriya | 0:7b4c00e3912f | 803 | |
sakthipriya | 0:7b4c00e3912f | 804 | // Get the current state of charge measurement of the MAX17049 as a float |
sakthipriya | 0:7b4c00e3912f | 805 | float soc() |
sakthipriya | 0:7b4c00e3912f | 806 | { |
sakthipriya | 3:07e15677a75c | 807 | |
sakthipriya | 3:07e15677a75c | 808 | //Create a temporary buffer |
sakthipriya | 0:7b4c00e3912f | 809 | char buff[2]; |
sakthipriya | 3:07e15677a75c | 810 | int ack = 1; |
sakthipriya | 3:07e15677a75c | 811 | //Select the register |
sakthipriya | 3:07e15677a75c | 812 | char reg = REG_SOC; // cannot pass the hash defined values directly |
sakthipriya | 3:07e15677a75c | 813 | m_I2C.write(m_ADDR, ®, 1, true); |
sakthipriya | 3:07e15677a75c | 814 | |
sakthipriya | 3:07e15677a75c | 815 | |
sakthipriya | 3:07e15677a75c | 816 | //Read the 16-bit register |
sakthipriya | 3:07e15677a75c | 817 | |
sakthipriya | 3:07e15677a75c | 818 | ack = m_I2C.read(m_ADDR, buff, 2); |
sakthipriya | 3:07e15677a75c | 819 | |
azaddevarm | 32:623747b1cecb | 820 | printf("\n\r SOC: acknow %d\n\r", ack); |
sakthipriya | 0:7b4c00e3912f | 821 | |
sakthipriya | 0:7b4c00e3912f | 822 | //Return SOC in percent |
sakthipriya | 2:c823d84b4cb0 | 823 | if(ack == 0) |
sakthipriya | 3:07e15677a75c | 824 | return ((buff[0] << 8) | buff[1]) * 0.00390625; |
sakthipriya | 2:c823d84b4cb0 | 825 | else |
sakthipriya | 2:c823d84b4cb0 | 826 | return 200; |
sakthipriya | 0:7b4c00e3912f | 827 | } |
sakthipriya | 0:7b4c00e3912f | 828 | |
sakthipriya | 0:7b4c00e3912f | 829 | |
sakthipriya | 0:7b4c00e3912f | 830 | |
sakthipriya | 0:7b4c00e3912f | 831 | // Get the current C rate measurement of the MAX17049 |
sakthipriya | 0:7b4c00e3912f | 832 | float crate() |
sakthipriya | 0:7b4c00e3912f | 833 | { |
sakthipriya | 0:7b4c00e3912f | 834 | //Read the 16-bit raw C/Rate value |
sakthipriya | 0:7b4c00e3912f | 835 | short value = read(REG_CRATE); |
sakthipriya | 0:7b4c00e3912f | 836 | |
sakthipriya | 0:7b4c00e3912f | 837 | //Return C/Rate in %/hr |
sakthipriya | 0:7b4c00e3912f | 838 | return value * 0.208; |
sakthipriya | 0:7b4c00e3912f | 839 | } |
sakthipriya | 0:7b4c00e3912f | 840 | |
sakthipriya | 0:7b4c00e3912f | 841 | // Determine whether or not the MAX17049 is asserting the ALRT pin |
sakthipriya | 0:7b4c00e3912f | 842 | bool alerting() |
sakthipriya | 0:7b4c00e3912f | 843 | { |
sakthipriya | 0:7b4c00e3912f | 844 | //Read the 16-bit register value |
sakthipriya | 0:7b4c00e3912f | 845 | unsigned short value = read(REG_CONFIG); |
sakthipriya | 0:7b4c00e3912f | 846 | |
sakthipriya | 0:7b4c00e3912f | 847 | //Return the status of the ALRT bit |
sakthipriya | 0:7b4c00e3912f | 848 | if (value & (1 << 5)) |
sakthipriya | 0:7b4c00e3912f | 849 | return true; |
sakthipriya | 0:7b4c00e3912f | 850 | else |
sakthipriya | 0:7b4c00e3912f | 851 | return false; |
sakthipriya | 2:c823d84b4cb0 | 852 | } |
sakthipriya | 2:c823d84b4cb0 | 853 | |
sakthipriya | 2:c823d84b4cb0 | 854 | //.............................Battery board Temp sensor........................// |
sakthipriya | 2:c823d84b4cb0 | 855 | void FCTN_BATTTEMP_INIT() |
sakthipriya | 2:c823d84b4cb0 | 856 | { |
sakthipriya | 2:c823d84b4cb0 | 857 | ssn1=1;ssn2=1; |
sakthipriya | 2:c823d84b4cb0 | 858 | //PS=0; |
sakthipriya | 2:c823d84b4cb0 | 859 | //HS=0; |
sakthipriya | 2:c823d84b4cb0 | 860 | spi_bt.format(8,3); |
sakthipriya | 2:c823d84b4cb0 | 861 | spi_bt.frequency(1000000); |
azaddevarm | 30:22b338b027de | 862 | EPS_BTRY_TMP_STATUS = 1; |
sakthipriya | 2:c823d84b4cb0 | 863 | } |
sakthipriya | 2:c823d84b4cb0 | 864 | |
sakthipriya | 2:c823d84b4cb0 | 865 | void FCTN_BATT_TEMP_SENSOR_MAIN(float temp[2]) |
sakthipriya | 2:c823d84b4cb0 | 866 | { |
sakthipriya | 2:c823d84b4cb0 | 867 | uint8_t MSB, LSB; |
sakthipriya | 2:c823d84b4cb0 | 868 | int16_t bit_data; |
sakthipriya | 2:c823d84b4cb0 | 869 | float sensitivity=0.0078125; //1 LSB = sensitivity degree celcius |
sakthipriya | 2:c823d84b4cb0 | 870 | wait_ms(320); |
sakthipriya | 2:c823d84b4cb0 | 871 | ssn1=0; |
sakthipriya | 2:c823d84b4cb0 | 872 | |
sakthipriya | 2:c823d84b4cb0 | 873 | spi_bt.write(0x80);//Reading digital data from Sensor 1 |
sakthipriya | 2:c823d84b4cb0 | 874 | LSB = spi_bt.write(0x00);//LSB first |
sakthipriya | 2:c823d84b4cb0 | 875 | wait_ms(0); |
sakthipriya | 2:c823d84b4cb0 | 876 | MSB = spi_bt.write(0x00); |
sakthipriya | 2:c823d84b4cb0 | 877 | wait_ms(10); |
sakthipriya | 2:c823d84b4cb0 | 878 | pc_eps.printf("%d %d\n",MSB,LSB); |
sakthipriya | 2:c823d84b4cb0 | 879 | bit_data= ((uint16_t)MSB<<8)|LSB; |
sakthipriya | 2:c823d84b4cb0 | 880 | wait_ms(10); |
sakthipriya | 2:c823d84b4cb0 | 881 | temp[0]=(float)bit_data*sensitivity;//Converting into decimal value |
sakthipriya | 2:c823d84b4cb0 | 882 | ssn1=1; |
sakthipriya | 2:c823d84b4cb0 | 883 | wait_ms(10); |
sakthipriya | 2:c823d84b4cb0 | 884 | ssn2=0;//Reading data from sensor 2 |
sakthipriya | 2:c823d84b4cb0 | 885 | spi_bt.write(0x80); |
sakthipriya | 2:c823d84b4cb0 | 886 | LSB = spi_bt.write(0x00); |
sakthipriya | 2:c823d84b4cb0 | 887 | wait_ms(10); |
sakthipriya | 2:c823d84b4cb0 | 888 | MSB = spi_bt.write(0x00); |
sakthipriya | 2:c823d84b4cb0 | 889 | wait_ms(10); |
sakthipriya | 2:c823d84b4cb0 | 890 | bit_data= ((int16_t)MSB<<8)|LSB; |
sakthipriya | 2:c823d84b4cb0 | 891 | wait_ms(10); |
sakthipriya | 2:c823d84b4cb0 | 892 | temp[1]=(float)bit_data*sensitivity; |
sakthipriya | 2:c823d84b4cb0 | 893 | ssn2=1; |
sakthipriya | 2:c823d84b4cb0 | 894 | |
sakthipriya | 2:c823d84b4cb0 | 895 | } |