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 Mohamed Azad

Files at this revision

API Documentation at this revision

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
diff -r 5f0f2a3f3e8d -r bb0d64656ba1 EPS.cpp
--- 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
diff -r 5f0f2a3f3e8d -r bb0d64656ba1 main.cpp
--- 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;