Updated EPS code with flowchart v2.3 (CDMS and HW faults)
Dependencies: FreescaleIAP mbed-rtos mbed
Fork of QM_BAE_review_1_EPS_faults by
Revision 17:bb0d64656ba1, committed 2016-06-23
- Comitter:
- azaddevarm
- Date:
- Thu Jun 23 12:14:28 2016 +0000
- Parent:
- 16:5f0f2a3f3e8d
- Commit message:
- Updated EPS code with flowchart v2.3
Changed in this revision
EPS.cpp | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/EPS.cpp Mon Jun 13 10:37:50 2016 +0000 +++ b/EPS.cpp Thu Jun 23 12:14:28 2016 +0000 @@ -49,13 +49,13 @@ DigitalOut SelectLineb0 (PIN59); // LSB of Select Lines //*********************************************************flags********************************************************// -extern char EPS_INIT_STATUS ; -extern char EPS_BATTERY_GAUGE_STATUS ; -extern char EPS_MAIN_STATUS; -extern char EPS_BATTERY_TEMP_STATUS ; -extern char EPS_STATUS ; +extern uint8_t EPS_INIT_STATUS ; +extern uint8_t EPS_BATTERY_GAUGE_STATUS ; +extern uint8_t EPS_MAIN_STATUS; +extern uint8_t EPS_BATTERY_TEMP_STATUS ; +extern uint8_t EPS_STATUS ; -extern char EPS_BATTERY_HEAT_ENABLE ; +extern uint8_t EPS_BATTERY_HEATER_ENABLE ; //eps cdms fault extern uint8_t CDMS_SW_STATUS; @@ -98,10 +98,9 @@ void FCTN_EPS_INIT() { printf("\n\r eps init \n"); - EPS_INIT_STATUS = 's' ; //set EPS_INIT_STATUS flag + EPS_INIT_STATUS = 1 ; //set EPS_INIT_STATUS flag // FLAG(); FCTN_BATTERYGAUGE_INIT(); - FCTN_BATTTEMP_INIT(); EN3V3A = 1; //enable dc dc converter A char value=alertFlags(); // initialization part of battery gauge unsigned short value_u= (short int )value; @@ -109,17 +108,20 @@ if(value_u ==0x0001) // battery gauge not initialised { actual_data.power_mode = 1; - EPS_BATTERY_GAUGE_STATUS = 'c'; //clear EPS_BATTERY_GAUGE_STATUS + EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS } else { actual_data.Batt_gauge_actual[1] = soc(); actual_data.Batt_voltage_actual = Batt_voltage.read()*3.3; //1 corresponds to 3.3 scaling factor FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]); - EPS_BATTERY_GAUGE_STATUS = 's'; //set EPS_BATTERY_GAUGE_STATUS + EPS_BATTERY_GAUGE_STATUS = 1; //set EPS_BATTERY_GAUGE_STATUS } - EPS_INIT_STATUS = 'c' ; //clear EPS_INIT_STATUS flag + FCTN_BATTTEMP_INIT(); + EPS_BATTERY_GAUGE_STATUS = 1; + + EPS_INIT_STATUS = 0 ; //clear EPS_INIT_STATUS flag } @@ -267,8 +269,8 @@ SelectLineb3=0; //collecting data - for(Iteration=0; Iteration<16; Iteration++){ - + for(Iteration=0; Iteration<16; Iteration++) + { actual_data.voltage_actual[Iteration]=VoltageInput.read(); actual_data.current_actual[Iteration]=CurrentInput.read(); @@ -287,8 +289,8 @@ printf("\n\r %d %d %d %d", s0,s1,s2,s3); } - for(Iteration=0; Iteration<16; Iteration++){ - + for(Iteration=0; Iteration<16; Iteration++) + { if(Iteration==14) actual_data.voltage_actual[Iteration]= (-90.7*3.3*actual_data.voltage_actual[Iteration])+190.1543; else
--- a/main.cpp Mon Jun 13 10:37:50 2016 +0000 +++ b/main.cpp Thu Jun 23 12:14:28 2016 +0000 @@ -8,7 +8,7 @@ #define tm_len 135 #define tc_len 11 -#define batt_heat_low 20 +//#define batt_heat_low 20 //***************************************************** flags *************************************************************// uint32_t BAE_STATUS = 0x00000000; @@ -47,7 +47,7 @@ char EPS_BATTERY_TEMP_STATUS = 'q'; char EPS_STATUS = 'q'; -char EPS_BATTERY_HEAT_ENABLE = 'q'; +char EPS_BATTERY_HEATER_ENABLE = 'q'; */ uint8_t EPS_INIT_STATUS = 0; @@ -58,7 +58,10 @@ uint8_t EPS_BATTERY_TEMP_STATUS = 0; uint8_t EPS_STATUS = 7; //invalid status -uint8_t EPS_BATTERY_HEAT_ENABLE = 0; +int EPS_MAIN_COUNTER = 0; + +uint8_t EPS_BATTERY_HEATER_ENABLE = 0; +float EPS_BAT_TEMP_LOW = 20.0; //eps cdms fault uint8_t CDMS_SW_STATUS; @@ -396,37 +399,67 @@ pc.printf("\n\rEntered EPS %f\n",t_start.read()); EPS_MAIN_STATUS = 1; // Set EPS main status + EPS_MAIN_COUNTER++; FCTN_BATT_TEMP_SENSOR_MAIN(actual_data.Batt_temp_actual); pc.printf("\n\r Battery temperature %f %f" ,actual_data.Batt_temp_actual[0], actual_data.Batt_temp_actual[1]); EPS_BATTERY_TEMP_STATUS = 1; //set EPS_BATTERY_TEMP_STATUS - if(EPS_BATTERY_HEAT_ENABLE == 1) + if(EPS_BATTERY_HEATER_ENABLE == 1) { - if((actual_data.Batt_temp_actual[0] < batt_heat_low) && (actual_data.Batt_temp_actual[1] < batt_heat_low)) // to confirm + if((actual_data.Batt_temp_actual[0] < EPS_BAT_TEMP_LOW) && (actual_data.Batt_temp_actual[1] < EPS_BAT_TEMP_LOW)) // to confirm { batt_heat = 1; //turn on battery heater + if( actual_data.current_actual[12] == 0 ) + EPS_STATUS = 3; // Set EPS_ERR_HEATER_SWITCH_ON + else + EPS_STATUS = 5; // Set EPS_BATTERY_HEATER_ON } else { batt_heat = 0; //turn off battery heater + if( actual_data.current_actual[12] == 0 ) + EPS_STATUS = 2; // Set EPS_ERR_HEATER_SWITCH_OFF + else + EPS_STATUS = 4; // Set EPS_BATTERY_HEATER_OFF } } - else if(EPS_BATTERY_HEAT_ENABLE == 0) + else if(EPS_BATTERY_HEATER_ENABLE == 0) { EPS_STATUS = 1;//EPS_STATUS = EPS_BATTERY_HEATER_DISABLED } - FCTN_BATTERYGAUGE_MAIN(actual_data.Batt_gauge_actual); - if (actual_data.Batt_gauge_actual[1] == 200) //data not received + + int BTG_MAIN_FLAG = 0; //Flag to check whether data received from gauge + if( read(REG_STATUS) & 0x0100 == 0x0100 ) //checking if Reset Indicator bit is set { - actual_data.power_mode = 1; - EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS - + FCTN_BATTERYGAUGE_INIT(); + write(REG_STATUS, read(REG_STATUS) & 0xFEFF); //Clearing Reset Indicator bit + if( EPS_BATTERY_TEMP_STATUS == 1 ) + { + FCTN_BATTERYGAUGE_MAIN(actual_data.Batt_gauge_actual); + BTG_MAIN_FLAG = 1; + } + else + { + actual_data.power_mode = 1; + EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS + } } - else + if( read(REG_STATUS) & 0x0100 == 0x0000 ) { - FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]); //updating power level - EPS_BATTERY_GAUGE_STATUS = 1; //set EPS_BATTERY_GAUGE_STATUS + FCTN_BATTERYGAUGE_MAIN(actual_data.Batt_gauge_actual); + BTG_MAIN_FLAG = 1; } + if( BTG_MAIN_FLAG == 1 ) + if (actual_data.Batt_gauge_actual[1] == 200) //data not received + { + actual_data.power_mode = 1; + EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS + } + else + { + FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]); //updating power level + EPS_BATTERY_GAUGE_STATUS = 1; //set EPS_BATTERY_GAUGE_STATUS + } // if( Temperature data received) //{ @@ -440,6 +473,8 @@ // } FCTN_HK_MAIN(); // printf("\n\r here"); + FCTN_EPS_HANDLE_HW_FAULTS(); + FCTN_EPS_HANDLE_CDMS_FAULT(); FCTN_APPEND_HKDATA(); minMaxHkData(); //printf("\n\r here"); @@ -781,9 +816,9 @@ BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00050000; // Set EPS_BATTERY_HEATER_ON - if(EPS_BATTERY_HEAT_ENABLE == 1) + if(EPS_BATTERY_HEATER_ENABLE == 1) BAE_ENABLE |= 0x00000080; - else if(EPS_BATTERY_HEAT_ENABLE == 0) + else if(EPS_BATTERY_HEATER_ENABLE == 0) BAE_ENABLE = BAE_ENABLE &0xFFFFFF7; @@ -798,7 +833,7 @@ ACS_STATE = 4; ACS_ATS_ENABLE = 1; ACS_DATA_ACQ_ENABLE = 1; - EPS_BATTERY_HEAT_ENABLE = 1; + EPS_BATTERY_HEATER_ENABLE = 1; actual_data.power_mode=3; //............intializing pins................// ATS1_SW_ENABLE = 0;