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_10thDec by
Diff: main.cpp
- Revision:
- 30:22b338b027de
- Parent:
- 29:bb0d64656ba1
- Child:
- 31:046685b48b71
--- a/main.cpp Thu Jun 23 12:14:28 2016 +0000
+++ b/main.cpp Fri Jul 01 14:59:12 2016 +0000
@@ -44,7 +44,7 @@
char EPS_BATTERY_GAUGE_STATUS = 'q';
//eps main
char EPS_MAIN_STATUS = 'q';
-char EPS_BATTERY_TEMP_STATUS = 'q';
+char EPS_BTRY_TMP_STATUS = 'q';
char EPS_STATUS = 'q';
char EPS_BATTERY_HEATER_ENABLE = 'q';
@@ -55,13 +55,18 @@
//eps main
uint8_t EPS_MAIN_STATUS = 0;
-uint8_t EPS_BATTERY_TEMP_STATUS = 0;
+uint8_t EPS_BTRY_TMP_STATUS = 0;
uint8_t EPS_STATUS = 7; //invalid status
+uint8_t EPS_BTRY_HTR_AUTO = 1;
int EPS_MAIN_COUNTER = 0;
-uint8_t EPS_BATTERY_HEATER_ENABLE = 0;
-float EPS_BAT_TEMP_LOW = 20.0;
+uint8_t EPS_BTRY_HTR = 0;
+float EPS_BTRY_TMP_LOW;
+float EPS_BTRY_TMP_HIGH;
+int EPS_BAT_TEMP_DEFAULT = 20;
+
+
//eps cdms fault
uint8_t CDMS_SW_STATUS;
@@ -98,6 +103,7 @@
bool BCN_TX_OC_FAULT;
int BCN_TX_FAULT_COUNTER;
+
//.......................global variables..................................................................// new hk structure- everything has to changed based on this
uint8_t BAE_data[74];
char BAE_chardata[74];
@@ -137,7 +143,7 @@
InterruptIn irpt_4m_mstr(PIN38); //I2c interrupt from CDMS
DigitalOut irpt_2_mstr(PIN4); //I2C interrupt to CDMS
I2CSlave slave (PIN1,PIN2);///pin1 pin2
-DigitalOut batt_heat(PIN96);
+DigitalOut BTRY_HTR_ENABLE(BATT_HEAT); //BTRY_HEAT
//ATS1_SW_ENABLE = 0;
PwmOut PWM1(PIN93); //x //Functions used to generate PWM signal
@@ -396,81 +402,64 @@
void F_EPS()
{
-
- 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_HEATER_ENABLE == 1)
- {
- 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_HEATER_ENABLE == 0)
- {
- EPS_STATUS = 1;//EPS_STATUS = EPS_BATTERY_HEATER_DISABLED
- }
-
- int BTG_MAIN_FLAG = 0; //Flag to check whether data received from gauge
+ float eps_btry_temp;
+ 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]);
+ if(abs(actual_data.Batt_temp_actual[0] - actual_data.Batt_temp_actual[1]) > 10)
+ {
+ EPS_BTRY_TMP_STATUS = 0; //clear EPS_BTRY_TMP_STATUS
+ eps_btry_temp = (float) EPS_BAT_TEMP_DEFAULT;
+ }
+ else
+ {
+ EPS_BTRY_TMP_STATUS = 1; //set EPS_BTRY_TMP_STATUS
+ eps_btry_temp = ( actual_data.Batt_temp_actual[0] + actual_data.Batt_temp_actual[1] )/2;
+ }
+
+ if(EPS_BTRY_HTR_AUTO == 0)
+ EPS_STATUS = 1; //EPS_BATTERY_HEATER_DISABLED
+ else if( EPS_BTRY_TMP_STATUS == 0 )
+ {
+ BTRY_HTR_ENABLE = 0;
+ EPS_BTRY_HTR = 0;
+ EPS_STATUS = 0; //Set EPS_ERR_BATTERY_TEMP
+ }
+ else
+ {
+ if( EPS_BTRY_HTR == 1 && eps_btry_temp >= EPS_BTRY_TMP_HIGH )
+ {
+ BTRY_HTR_ENABLE = 0;
+ EPS_BTRY_HTR = 0;
+ EPS_STATUS = 4; //Set EPS_BATTERY_HEATER_OFF
+ }
+ else if( EPS_BTRY_HTR == 0 && eps_btry_temp < EPS_BTRY_TMP_LOW )
+ {
+ BTRY_HTR_ENABLE = 1;
+ EPS_BTRY_HTR = 1;
+ EPS_STATUS = 5; //Set EPS_BATTERY_HEATER_ON
+ }
+ }
+
+ unsigned short statusreg = read(REG_STATUS);
+ if( EPS_BATTERY_GAUGE_STATUS == 0 ) reset();
if( read(REG_STATUS) & 0x0100 == 0x0100 ) //checking if Reset Indicator bit is set
- {
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
+
+ int BTG_MAIN_FLAG = FCTN_BATTERYGAUGE_MAIN(actual_data.Batt_gauge_actual, eps_btry_temp);
+ if( BTG_MAIN_FLAG == 0 ) //Data not received
{
actual_data.power_mode = 1;
EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS
}
- }
- if( read(REG_STATUS) & 0x0100 == 0x0000 )
- {
- 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
+ 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)
- //{
-
-
- // }
-// else
-// {
-// Set battery temp to XX
-// EPS_BATTERY_TEMP_STATUS = 0; //clear EPS_BATTERY_TEMP_STATUS
-// EPS_STATUS = EPS_ERR_BATTERY_TEMP;
-// }
+
FCTN_HK_MAIN();
// printf("\n\r here");
FCTN_EPS_HANDLE_HW_FAULTS();
@@ -700,19 +689,19 @@
schedcount = 1;
}
if(schedcount%1==0)
- { pc.printf("\nSTATE IS !!!!!! = %x !!\n",ACS_STATE);
- pc.printf("\niterp1 !!!!!! = %x !!\n",iterP1);
- pc.printf("\niteri2 IS !!!!!! = %x !!\n",iterI2);
- F_ACS();
+ { //pc.printf("\nSTATE IS !!!!!! = %x !!\n",ACS_STATE);
+ //pc.printf("\niterp1 !!!!!! = %x !!\n",iterP1);
+ //pc.printf("\niteri2 IS !!!!!! = %x !!\n",iterI2);
+ //F_ACS();
}
if(schedcount%2==0)
{
- // F_EPS();
+ F_EPS();
}
if(schedcount%1==0)
{
- F_BCN();
+ // F_BCN();
}
schedcount++;
printf("\n\r exited scheduler");
@@ -797,9 +786,9 @@
BAE_STATUS &= 0xFFFDFFFF;
-if (EPS_BATTERY_TEMP_STATUS==1) // Set EPS_BATTERY_TEMP_STATUS
+if (EPS_BTRY_TMP_STATUS==1) // Set EPS_BTRY_TMP_STATUS
BAE_STATUS |= 0x00080000;
-else if(EPS_BATTERY_TEMP_STATUS==0) // Clear
+else if(EPS_BTRY_TMP_STATUS==0) // Clear
BAE_STATUS &= 0xFFF7FFFF;
if (EPS_STATUS==0)
@@ -816,9 +805,9 @@
BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00050000; // Set EPS_BATTERY_HEATER_ON
- if(EPS_BATTERY_HEATER_ENABLE == 1)
+ if(EPS_BTRY_HTR == 1)
BAE_ENABLE |= 0x00000080;
- else if(EPS_BATTERY_HEATER_ENABLE == 0)
+ else if(EPS_BTRY_HTR == 0)
BAE_ENABLE = BAE_ENABLE &0xFFFFFF7;
@@ -833,7 +822,7 @@
ACS_STATE = 4;
ACS_ATS_ENABLE = 1;
ACS_DATA_ACQ_ENABLE = 1;
- EPS_BATTERY_HEATER_ENABLE = 1;
+ EPS_BTRY_HTR = 1;
actual_data.power_mode=3;
//............intializing pins................//
ATS1_SW_ENABLE = 0;
@@ -845,8 +834,8 @@
TRXY_SW = 1;
//............................//
- FCTN_ACS_INIT();
- // FCTN_EPS_INIT();
+ //FCTN_ACS_INIT();
+ FCTN_EPS_INIT();
//FCTN_BCN_INIT();
@@ -872,7 +861,7 @@
//FLAG();
- FCTN_BAE_INIT();
+ //FCTN_BAE_INIT();
//...i2c..
