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
Diff: EPS.cpp
- Revision:
- 20:949d13045431
- Parent:
- 19:79e69017c855
- Child:
- 24:72bca5be7c4e
- Child:
- 27:61c856be467e
--- a/EPS.cpp Sat Jun 04 11:29:13 2016 +0000
+++ b/EPS.cpp Fri Jul 01 17:55:30 2016 +0000
@@ -1,11 +1,89 @@
#include "EPS.h"
#include "pin_config.h"
#include "iostream"
+
+//FOR APPEDING HK DATA===================================
+
+extern uint16_t crc_hk_data();
+
+//acs
+extern uint8_t ACS_DETUMBLING_ALGO_TYPE;
+extern uint8_t ACS_STATE;
+extern uint8_t ACS_MAG_TIME_DELAY;
+extern uint8_t ACS_DEMAG_TIME_DELAY;
+extern uint8_t ACS_Z_FIXED_MOMENT;
+extern uint16_t ACS_MM_X_COMSN;
+extern uint16_t ACS_MM_Y_COMSN;
+extern uint16_t ACS_MG_X_COMSN;
+extern uint16_t ACS_MG_Y_COMSN;
+extern uint16_t ACS_MM_Z_COMSN;
+extern uint16_t ACS_MG_Z_COMSN;
+extern uint8_t ACS_MAIN_STATUS;
+extern uint8_t ACS_STATUS;
+extern uint8_t ATS1_EVENT_STATUS_RGTR;
+extern uint8_t ATS1_SENTRAL_STATUS_RGTR;
+extern uint8_t ATS1_ERROR_RGTR;
+extern uint8_t ATS2_EVENT_STATUS_RGTR;
+extern uint8_t ATS2_SENTRAL_STATUS_RGTR;
+extern uint8_t ATS2_ERROR_RGTR;
+extern uint8_t ACS_DATA_ACQ_STATUS;
+extern uint8_t ACS_TR_X_PWM;
+extern uint8_t ACS_TR_Y_PWM;
+extern uint8_t ACS_TR_Z_PWM;
+extern uint8_t alarmmode;
+extern uint8_t controlmode_mms;
+extern uint8_t invjm_mms[9];
+extern uint8_t jm_mms[9];
+extern uint8_t bb_mms[3];
+extern uint8_t singularity_flag_mms;
+
+
+//bcn
+extern uint8_t BCN_SPND_TX;
+extern uint8_t BCN_FEN;
+extern uint8_t BCN_LONG_MSG_TYPE;
+extern uint8_t BCN_TX_MAIN_STATUS;
+extern uint8_t BCN_TX_STATUS;
+extern uint8_t BCN_INIT_STATUS;
+extern uint8_t BCN_FAIL_COUNT;
+extern uint16_t BCN_TX_MAIN_COUNTER;
+
+//bae
+extern uint8_t BAE_RESET_COUNTER;
+extern uint8_t BAE_INIT_STATUS;
+extern uint8_t BAE_STANDBY;
+extern uint16_t BAE_I2C_COUNTER;
+
+//eps
+extern uint8_t ACS_INIT_STATUS;
+extern uint16_t EPS_MAIN_COUNTER;
+
+//main
+extern uint8_t HTR_CYCLE_COUNTER;
+extern uint16_t ACS_MAIN_COUNTER;
+
+
+//=======================================================
+
+
/***********************************************global variable declaration***************************************************************/
extern uint32_t BAE_STATUS;
extern uint32_t BAE_ENABLE;
-extern uint8_t BAE_data[74];
-extern char BAE_chardata[74];
+extern uint8_t BAE_HK_data[134];
+//extern char BAE_chardata[74];
+
+//implement them assign them default values
+uint8_t EPS_BATT_TEMP_LOW;
+uint8_t EPS_BATT_TEMP_HIGH;
+uint8_t EPS_BATT_TEMP_DEFAULT;
+uint8_t EPS_SOC_LEVEL_12 = 70;
+uint8_t EPS_SOC_LEVEL_23 = 90;
+uint8_t EPS_BAT_TEMP_LOW;
+uint8_t EPS_BAT_TEMP_HIGH;
+uint8_t EPS_BAT_TEMP_DEFAULT;
+DigitalOut EPS_CHARGER_FAULT(PIN42);
+DigitalOut EPS_CHARGER_STATUS(PIN31);
+DigitalOut EPS_BATTERY_GAUGE_ALERT(PIN73);
//m_I2C.frequency(10000)
const char RCOMP0= 0x97;// don't know what it is now
@@ -14,6 +92,8 @@
BAE_HK_min_max bae_HK_minmax;
BAE_HK_arch arch_data;
+/************************battery temperature var*********************************/
+//instead just return the approprate value.. test it
//......................................Peripheral declarations.........................................................//
Serial pc_eps(USBTX,USBRX);
@@ -49,23 +129,62 @@
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 uint8_t EPS_BTRY_HTR_AUTO ;
+
+//eps cdms fault
+extern uint8_t CDMS_SW_STATUS;
+extern DigitalOut CDMS_OC_FAULT;
+extern bool CDMS_SW_ENABLE;
+extern int CDMS_FAULT_COUNTER;
+
+//eps hw faults
+
+/********* EXTERN ACS VAR ********************/
+extern uint8_t ACS_ATS_STATUS;
+extern uint8_t ACS_TR_Z_SW_STATUS;
+extern DigitalOut ACS_TR_Z_ENABLE;
+extern DigitalOut ACS_TR_Z_OC_FAULT;
+extern DigitalOut ACS_TR_Z_FAULT; //Driver IC fault
+extern int ACS_TR_Z_FAULT_COUNTER;
-extern char EPS_BATTERY_HEAT_ENABLE ;
+extern uint8_t ACS_TR_XY_SW_STATUS;
+extern DigitalOut ACS_TR_XY_ENABLE;
+extern DigitalOut ACS_TR_XY_OC_FAULT;
+extern DigitalOut ACS_TR_XY_FAULT; //Driver IC fault
+extern int ACS_TR_XY_FAULT_COUNTER;
+
+//extern uint8_t ACS_ATS1_SW_STATUS;
+extern DigitalOut ATS1_SW_ENABLE;
+extern DigitalOut ACS_ATS1_OC_FAULT;
+extern int ACS_ATS1_FAULT_COUNTER;
+
+//extern uint8_t ACS_ATS2_SW_STATUS;
+
+extern DigitalOut ATS2_SW_ENABLE;
+extern DigitalOut ACS_ATS2_OC_FAULT;
+extern int ACS_ATS2_FAULT_COUNTER;
+
+/********* EXTERN BCN VAR ********************/
+extern uint8_t BCN_TX_SW_STATUS;
+extern bool BCN_TX_ENABLE;
+extern DigitalOut BCN_TX_OC_FAULT;
+extern int BCN_TX_FAULT_COUNTER;
+extern uint8_t BCN_TMP;
//........................................... FUCTIONS.................................................//
void FCTN_EPS_INIT()
{
- printf("\n\r eps init \n");
- EPS_INIT_STATUS = 's' ; //set EPS_INIT_STATUS flag
+//// printf("\n\r eps init \n");
+ 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;
@@ -73,19 +192,191 @@
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
- //actual_data.Batt_voltage_data = Batt_voltage.read();/*changed 1.0*/
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
+
+}
+
+void FCTN_EPS_HANDLE_CDMS_FAULT()
+{ //Variable names from MMS structure, if not, marked as //Temp name
+ if(CDMS_SW_STATUS == 0b11) //powered on and oc fault
+ if(!CDMS_OC_FAULT)
+ CDMS_SW_STATUS = 0b01; //powered on and working
+ else
+ {
+ if(CDMS_SW_STATUS == 0b10) //powered off and oc fault
+ CDMS_SW_ENABLE = 1; //Temp name
+ if(CDMS_OC_FAULT == 0)
+ {
+ CDMS_FAULT_COUNTER = 0; //Temp name
+ CDMS_SW_STATUS = 0b01; //powered on and working
+ }
+ else
+ {
+ CDMS_FAULT_COUNTER++;
+ if(CDMS_FAULT_COUNTER == 3)
+ CDMS_SW_STATUS = 0b11; //powered on and oc fault
+ else
+ {
+ CDMS_SW_ENABLE = 0; //power OFF switch
+ CDMS_SW_STATUS = 0b10; //powered off and oc fault
+ }
+ }
+ }
+}
+
+void FCTN_EPS_HANDLE_HW_FAULTS()
+{ //Variable names from MMS structure, if not, marked as //Temp name
+
+ //--------ACS_TR_Z--------//
+ if(ACS_TR_Z_SW_STATUS != 0b11) //!disabled
+ {
+ if(ACS_TR_Z_SW_STATUS == 0b10) //oc fault and powered off
+ ACS_TR_Z_ENABLE = 1;
+ if(ACS_TR_Z_OC_FAULT || ACS_TR_Z_FAULT)
+ {
+ ACS_TR_Z_ENABLE = 0;
+ ACS_TR_Z_FAULT_COUNTER++; //Temp name
+ if(ACS_TR_Z_FAULT_COUNTER == 3)
+ ACS_TR_Z_SW_STATUS = 0b11; //disabled
+ //update in flash as default state at bootup
+ else ACS_TR_Z_SW_STATUS = 0b10; //oc fault and powered off
+ }
+ else
+ {
+ ACS_TR_Z_SW_STATUS = 0b01; //powered on and working;
+ //update in flash also
+ ACS_TR_Z_FAULT_COUNTER = 0;
+ }
+ }
+
+ //--------ACS_TR_XY--------//
+ //Same as ACS_TR_Z, just replace Z with XY
+ if(ACS_TR_XY_SW_STATUS != 0b11) //!disabled
+ {
+ if(ACS_TR_XY_SW_STATUS == 0b10) //oc fault and powered off
+ ACS_TR_XY_ENABLE = 1;
+ if(ACS_TR_XY_OC_FAULT || ACS_TR_XY_FAULT)
+ {
+ ACS_TR_XY_ENABLE = 0;
+ ACS_TR_XY_FAULT_COUNTER++; //Temp name
+ if(ACS_TR_XY_FAULT_COUNTER == 3)
+ ACS_TR_XY_SW_STATUS = 0b11; //disabled
+ //update in flash as default state at bootup
+ else ACS_TR_XY_SW_STATUS = 0b10; //oc fault and powered off
+ }
+ else
+ {
+ ACS_TR_XY_SW_STATUS = 0b01; //powered on and working;
+ //update in flash also
+ ACS_TR_XY_FAULT_COUNTER = 0;
+ }
+ }
+ //--------ACS_ATS1--------//
+ //Same as ACS_ATS2
+ //if(ACS_ATS1_SW_STATUS & 0b1100 != 0b1100) //!disabled
+ if(ACS_ATS_STATUS&0xC0!=0xC0)
+ {
+ //if(ACS_ATS1_SW_STATUS & 0b1100 == 0b1000) //oc fault and powered off
+ if(ACS_ATS_STATUS&0xC0!=0x80)
+ ATS1_SW_ENABLE = 0; //Temp name
+ if(ACS_ATS1_OC_FAULT)
+ {
+ ATS1_SW_ENABLE = 1;
+ ACS_ATS1_FAULT_COUNTER++; //Temp name
+ if(ACS_ATS1_FAULT_COUNTER == 3)
+ //ACS_ATS1_SW_STATUS = ACS_ATS1_SW_STATUS | 0b1100; //disabled
+ ACS_ATS_STATUS = (ACS_ATS_STATUS&0x0F)|0xC0;
+ //update in flash as default state at bootup
+ else
+ {
+ //ACS_ATS1_SW_STATUS = ACS_ATS1_SW_STATUS | 0b1000; //setting to 10xx
+ ACS_ATS_STATUS = (ACS_ATS_STATUS&0x0F)|0x80;
+ //ACS_ATS1_SW_STATUS = ACS_ATS1_SW_STATUS & 0b1011; //oc fault and powered off
+ }
+ }
+ else
+ {
+ //if(ACS_ATS1_SW_STATUS & 0b1100 == 0b1000) //Device oc fault?
+ if(ACS_ATS_STATUS&0xC0==0x80)
+ ATS1_SW_ENABLE = 1;
+ //ACS_ATS1_SW_STATUS = ACS_ATS1_SW_STATUS & 0b0011; //working but powered off
+ ACS_ATS_STATUS = ACS_ATS_STATUS&0x3F;
+ //Update in flash also
+ ACS_ATS1_FAULT_COUNTER = 0;
+ }
+ }
+
+ //--------ACS_ATS2--------//
+ //if(ACS_ATS2_SW_STATUS & 0b1100 != 0b1100) //!disabled
+ if(ACS_ATS_STATUS&0x0C!=0x0C)
+ {
+ //if(ACS_ATS2_SW_STATUS & 0b1100 == 0b1000) //oc fault and powered off
+ if(ACS_ATS_STATUS&0x0C!=0x08)
+ ATS2_SW_ENABLE = 0; //Temp name
+ if(ACS_ATS2_OC_FAULT)
+ {
+ ATS2_SW_ENABLE = 1;
+ ACS_ATS2_FAULT_COUNTER++; //Temp name
+ if(ACS_ATS2_FAULT_COUNTER == 3)
+ //ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS | 0b1100; //disabled
+ ACS_ATS_STATUS = (ACS_ATS_STATUS&0xF0)|0x0C;
+ //update in flash as default state at bootup
+ else
+ {
+ //ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS | 0b1000; //setting to 10xx
+ //ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS & 0b1011; //oc fault and powered off
+ ACS_ATS_STATUS = (ACS_ATS_STATUS&0xF0)|0x08;
+ }
+ }
+ else
+ {
+ //if(ACS_ATS2_SW_STATUS & 0b1100 == 0b1000) //Device oc fault?
+ if(ACS_ATS_STATUS&0x0C==0x08)
+ ATS2_SW_ENABLE = 1;
+ //ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS & 0b0011; //working but powered off
+ ACS_ATS_STATUS = ACS_ATS_STATUS&0xF3;
+ //Update in flash also
+ ACS_ATS2_FAULT_COUNTER = 0;
+ }
+ }
+
+ //--------BCN_TX----------//
+ if(BCN_TX_SW_STATUS != 0b11) //!disabled
+ {
+ if(BCN_TX_SW_STATUS == 0b10) //oc fault and powered off
+ BCN_TX_ENABLE = 1; //Temp name
+ if(BCN_TX_OC_FAULT)
+ {
+ BCN_TX_ENABLE = 0;
+ BCN_TX_FAULT_COUNTER++; //Temp name
+ if(BCN_TX_FAULT_COUNTER == 3)
+ BCN_TX_SW_STATUS = 0b11; //disabled
+ //update in flash as default state at bootup
+ else BCN_TX_SW_STATUS = 0b10; //oc fault and powered off
+
+ }
+ else
+ {
+ BCN_TX_SW_STATUS = 0b01; //powered on and working;
+ //update in flash also
+ BCN_TX_FAULT_COUNTER = 0;
+ }
+ }
+
}
//----------------------------------------------------Power algo code--------------------------------------------------------------------//
@@ -105,8 +396,6 @@
//...................................................HK...........................................//
/*reading values*/
-uint16_t val_read;
-float readval;
void FCTN_HK_MAIN()
{
@@ -123,73 +412,33 @@
SelectLineb3=0;
//collecting data
- for(Iteration=0; Iteration<16; Iteration++){
- wait_ms(100);
- readval=VoltageInput.read();
- wait_ms(10);
+ for(Iteration=0; Iteration<16; Iteration++)
+ {
actual_data.voltage_actual[Iteration]=VoltageInput.read();
- val_read=VoltageInput.read_u16();
- //wait_ms(80);
- printf("\n\ractual reading voltage%f",readval);
- printf("\n\ractual raw data vol %f ",actual_data.voltage_actual[Iteration]);
- printf("\n\ractual raw data vol in uint16_t %x ",val_read);
actual_data.current_actual[Iteration]=CurrentInput.read();
- readval=CurrentInput.read();
- printf("\n\ractual reading curr%f",readval);
- //wait_ms(80);
-
- /* SelectLinea0=!(SelectLinea0);
+
+ SelectLinea0=!(SelectLinea0);
if(Iteration%2==1)
SelectLinea1=!(SelectLinea1);
if(Iteration%4==3)
SelectLinea2=!(SelectLinea2);
if(Iteration%8==7)
SelectLinea3=!(SelectLinea3);
-
- */
int s0,s1,s2,s3;
s0=SelectLineb0=SelectLinea0;
- s1=SelectLineb1=SelectLinea1;// changed to
+ s1=SelectLineb1=SelectLinea2;
s2=SelectLineb2=SelectLinea2;
s3=SelectLineb3=SelectLinea3;
- printf("\n\r %d %d %d %d", s0,s1,s2,s3);
+//// printf("\n\r %d %d %d %d", s0,s1,s2,s3);
}
-
-
- //_____________________________________________________________________________________________
-
for(Iteration=0; Iteration<16; Iteration++)
- {
- printf("\n\rRaw data is for voltage %f",actual_data.voltage_actual[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
actual_data.voltage_actual[Iteration]= actual_data.voltage_actual[Iteration]*3.3*5.63;
}
-
- //_____________________________________________________________________________________________
-
- for(Iteration=0; Iteration<16; Iteration++)
- {
- printf("\n\ractual data is for voltage %f",actual_data.voltage_actual[Iteration]);
- }
- //_____________________________________________________________________________________________
-
-
-
- //_____________________________________________________________________________________________
-
- for(Iteration=0; Iteration<16; Iteration++)
- {
- printf("\n\rRAW data is for current %f",actual_data.current_actual[Iteration]);
- }
- //_____________________________________________________________________________________________
for(Iteration=0;Iteration<12;Iteration++){
if(Iteration<8)
@@ -208,17 +457,6 @@
actual_data.current_actual[Iteration]=3365.4/log(7.60573*resistance);
}
}
-
-
- //_____________________________________________________________________________________________
-
- for(Iteration=0; Iteration<16; Iteration++)
- {
- printf("\n\ractual data is for current %f",actual_data.current_actual[Iteration]);
- }
- //_____________________________________________________________________________________________
-
-
actual_data.BAE_temp_actual=(-90.7*3.3*actual_data.BAE_temp_actual)+190.1543;
actual_data.Batt_voltage_actual=Batt_voltage.read()*3.3*5.63;
@@ -250,15 +488,15 @@
quant_data.BAE_temp_quant=quantiz(tstart,tstep,actual_data.BAE_temp_actual);
- for(Iteration=0;Iteration<3;Iteration++){
- quant_data.AngularSpeed_quant[Iteration]=actual_data.AngularSpeed_actual[Iteration];
- printf("\n\r w value %f",quant_data.AngularSpeed_quant[Iteration]);
- }
+//// for(Iteration=0;Iteration<3;Iteration++){
+//// quant_data.AngularSpeed_quant[Iteration]=actual_data.AngularSpeed_actual[Iteration];
+//// printf("\n\r w value %f",quant_data.AngularSpeed_quant[Iteration]);
+//// }
- for(Iteration=0;Iteration<3;Iteration++){
- quant_data.Bvalue_quant[Iteration]=actual_data.Bvalue_actual[Iteration];
- printf("\n\r b value %f",quant_data.Bvalue_quant[Iteration]);
- }
+//// for(Iteration=0;Iteration<3;Iteration++){
+//// quant_data.Bvalue_quant[Iteration]=actual_data.Bvalue_actual[Iteration];
+//// printf("\n\r b value %f",quant_data.Bvalue_quant[Iteration]);
+//// }
quant_data.Batt_voltage_quant=quantiz(vstart,vstep,actual_data.Batt_voltage_actual);
@@ -271,55 +509,173 @@
arch_data.faultPoll_status=actual_data.faultPoll_status;
arch_data.faultIr_status=actual_data.faultIr_status;
arch_data.Batt_voltage=quant_data.Batt_voltage_quant;
- printf("\n\r in hk");
+//// printf("\n\r in hk");
}
void FCTN_APPEND_HKDATA()
{
- // quantized data
- for (int i=0;i<16;i++)
- BAE_data[i] = quant_data.voltage_quant[i];
- for (int i=16;i<28;i++)
- BAE_data[i] = quant_data.current_quant[i-16];
- BAE_data[28] = quant_data.Batt_temp_quant[0];
- BAE_data[29] = quant_data.Batt_temp_quant[1];
- BAE_data[30] = quant_data.Batt_gauge_quant[1];
- BAE_data[31] = quant_data.Batt_gauge_quant[1];
- BAE_data[32] = quant_data.Batt_gauge_quant[1];
- FCTN_CONVERT_FLOAT(quant_data.Batt_gauge_alerts,&BAE_data[33]);
- BAE_data[37] = quant_data.BAE_temp_quant;
- FCTN_CONVERT_FLOAT(quant_data.AngularSpeed_quant[0],&BAE_data[38]);
- //printf("\n\r outside %d %d %d %d", BAE_data[38],BAE_data[39],BAE_data[40],BAE_data[41]);
- //std:: cout << "\n\r uint8 outside " << BAE_data[38] << '\t' << BAE_data[39] << '\t' << BAE_data[40] << '\t' << BAE_data[41] <<std::endl;
- FCTN_CONVERT_FLOAT(quant_data.AngularSpeed_quant[1],&BAE_data[42]);
- //std:: cout << "\n\r uint8 outside " << BAE_data[42] << '\t' << BAE_data[43] << '\t' << BAE_data[44] << '\t' << BAE_data[45] <<std::endl;
- // printf("\n\r outside %d %d %d %d", BAE_data[42],BAE_data[43],BAE_data[44],BAE_data[45]);
- FCTN_CONVERT_FLOAT(quant_data.AngularSpeed_quant[2],&BAE_data[46]);
- //printf("\n\r outside %d %d %d %d", BAE_data[46],BAE_data[47],BAE_data[48],BAE_data[49]);
- //std:: cout << "\n\r uint8 outside " << BAE_data[46] << '\t' << BAE_data[47] << '\t' << BAE_data[48] << '\t' << BAE_data[49] <<std::endl;
- FCTN_CONVERT_FLOAT(quant_data.Bvalue_quant[0],&BAE_data[50]);
- FCTN_CONVERT_FLOAT(quant_data.Bvalue_quant[1],&BAE_data[54]);
- FCTN_CONVERT_FLOAT(quant_data.Bvalue_quant[2],&BAE_data[58]);
- BAE_data[62] = quant_data.Batt_voltage_quant;
- BAE_data[63] = (uint8_t)actual_data.power_mode;
- BAE_data[64] = actual_data.faultPoll_status;
- BAE_data[65] = actual_data.faultIr_status;
- // archived data
- BAE_data[66] = arch_data.Batt_1_temp; //verify if uint8_t is right
- BAE_data[67] = arch_data.Batt_2_temp;
- BAE_data[68] = arch_data.EPS_PCB_temp;
- BAE_data[69] = arch_data.Batt_SOC;
- BAE_data[70] = (uint8_t)arch_data.power_mode;
- BAE_data[71] = arch_data.faultPoll_status;
- BAE_data[72] = arch_data.faultIr_status;
- BAE_data[73] = arch_data.Batt_voltage;
- for(int i=0; i<73;i++)
- BAE_chardata[i] = (char)BAE_data[i];
- BAE_chardata[73] = '\0';
- printf("\n\r bae ats data %c %c %c", BAE_chardata[38],BAE_chardata[39],BAE_chardata[40]);
- printf("\n\r BAE data is %s", BAE_chardata);
+ BAE_HK_data[0] = 0x28;
+ BAE_HK_data[1] = 0x00;
+ BAE_HK_data[2] = 0x00;
+ BAE_HK_data[3] = 0x00;
+ BAE_HK_data[4] = ACS_ATS_STATUS;
+ BAE_HK_data[5] = ACS_TR_XY_SW_STATUS;
+ BAE_HK_data[5] = (BAE_HK_data[5]<<2)| ACS_TR_Z_SW_STATUS;
+ BAE_HK_data[5] = (BAE_HK_data[5]<<1) | ACS_DETUMBLING_ALGO_TYPE;
+ BAE_HK_data[5] = (BAE_HK_data[5]<<3) | ACS_STATE;
+ BAE_HK_data[6] = BCN_TX_SW_STATUS;
+ BAE_HK_data[6] = (BAE_HK_data[6]<<1) | BCN_SPND_TX;
+ BAE_HK_data[6] = (BAE_HK_data[6]<<1) | BCN_FEN;
+ BAE_HK_data[6] = (BAE_HK_data[6]<<1) | BCN_LONG_MSG_TYPE;
+ BAE_HK_data[6] = (BAE_HK_data[6]<<1) | EPS_BTRY_HTR_AUTO;//EPS_BATTERY_HEATER_ENABLE
+ //now two spares in BAE_HK_data[5]
+ BAE_HK_data[7] = BAE_RESET_COUNTER;
+ BAE_HK_data[8] = EPS_SOC_LEVEL_12;
+ BAE_HK_data[9] = EPS_SOC_LEVEL_23;
+ BAE_HK_data[10] = ACS_MAG_TIME_DELAY;
+ BAE_HK_data[11] = ACS_DEMAG_TIME_DELAY;
+ BAE_HK_data[12] = EPS_BAT_TEMP_LOW;
+ BAE_HK_data[13] = EPS_BAT_TEMP_HIGH;
+ BAE_HK_data[14] = EPS_BAT_TEMP_DEFAULT;
+ BAE_HK_data[15] = ACS_MM_X_COMSN >> 8;
+ BAE_HK_data[16] = ACS_MM_X_COMSN;
+ BAE_HK_data[17] = ACS_MM_Y_COMSN >> 8;
+ BAE_HK_data[18] = ACS_MM_Y_COMSN;
+
+ BAE_HK_data[19] = ACS_MG_X_COMSN >> 8;
+ BAE_HK_data[20] = ACS_MG_X_COMSN;
+
+ BAE_HK_data[21] = ACS_MG_Y_COMSN >> 8;
+ BAE_HK_data[22] = ACS_MG_Y_COMSN;
+
+ BAE_HK_data[23] = ACS_MM_Z_COMSN >> 8;
+ BAE_HK_data[24] = ACS_MM_Z_COMSN;
+
+ BAE_HK_data[25] = ACS_MG_Z_COMSN >> 8;
+ BAE_HK_data[26] = ACS_MG_Z_COMSN;
+
+ BAE_HK_data[27] = ACS_Z_FIXED_MOMENT >> 8;
+ BAE_HK_data[28] = ACS_Z_FIXED_MOMENT;
+
+ //BAE RAM PARAMETER
+ BAE_HK_data[29] = BAE_INIT_STATUS;
+ BAE_HK_data[29] = (BAE_HK_data[29]<<1) | 0;//change it================================
+ BAE_HK_data[29] = (BAE_HK_data[29]<<1) | BCN_INIT_STATUS;
+ BAE_HK_data[29] = (BAE_HK_data[29]<<1) | BCN_TX_MAIN_STATUS;
+ BAE_HK_data[29] = (BAE_HK_data[29]<<3) | BCN_TX_STATUS;
+ BAE_HK_data[29] = (BAE_HK_data[29]<<3) | ACS_INIT_STATUS;
+
+ BAE_HK_data[30] = ACS_DATA_ACQ_STATUS;
+ BAE_HK_data[30] = (BAE_HK_data[30]<<1) | ACS_MAIN_STATUS;
+ BAE_HK_data[30] = (BAE_HK_data[30]<<3) | ACS_STATUS;
+ BAE_HK_data[30] = (BAE_HK_data[30]<<1) | EPS_INIT_STATUS;
+ BAE_HK_data[30] = (BAE_HK_data[30]<<3) | EPS_BATTERY_GAUGE_STATUS;
+
+ BAE_HK_data[31] = EPS_MAIN_STATUS;
+ BAE_HK_data[31] = (BAE_HK_data[31]<<1) | EPS_BATTERY_TEMP_STATUS;
+ BAE_HK_data[31] = (BAE_HK_data[31]<<3) | EPS_STATUS;
+ BAE_HK_data[31] = (BAE_HK_data[31]<<2) | CDMS_SW_STATUS;
+ //BAE_HK_data[31] = (BAE_HK_data[31]<<1) | EPS_BTRY_HTR_STATUS;//new to : implement===========
+ //spare 1
+ //spare 5
+ BAE_HK_data[32] = BAE_STANDBY;
+ // 6 next telemetries value to be given by registers
+ BAE_HK_data[33] = ATS1_EVENT_STATUS_RGTR;
+ BAE_HK_data[34] = ATS1_SENTRAL_STATUS_RGTR;
+ BAE_HK_data[35] = ATS1_ERROR_RGTR;
+ BAE_HK_data[36] = ATS2_EVENT_STATUS_RGTR;
+ BAE_HK_data[37] = ATS2_SENTRAL_STATUS_RGTR;
+ BAE_HK_data[38] = ATS2_ERROR_RGTR;
+
+ BAE_HK_data[39] = BCN_FAIL_COUNT;
+ BAE_HK_data[40] = actual_data.power_mode;
+ BAE_HK_data[41] = HTR_CYCLE_COUNTER;//new to : implement
+
+ BAE_HK_data[42] = BAE_I2C_COUNTER;
+ BAE_HK_data[43] = BAE_I2C_COUNTER>>8;
+ BAE_HK_data[44] = ACS_MAIN_COUNTER;
+ BAE_HK_data[45] = ACS_MAIN_COUNTER>>8;
+ BAE_HK_data[46] = BCN_TX_MAIN_COUNTER;
+ BAE_HK_data[47] = BCN_TX_MAIN_COUNTER>>8;
+ BAE_HK_data[48] = EPS_MAIN_COUNTER;
+ BAE_HK_data[49] = EPS_MAIN_COUNTER>>8;
+ BAE_HK_data[50] = actual_data.bit_data_acs_mm[0];
+ BAE_HK_data[51] = actual_data.bit_data_acs_mm[0]>>8;
+ BAE_HK_data[52] = actual_data.bit_data_acs_mm[1];
+ BAE_HK_data[53] = actual_data.bit_data_acs_mm[1]>>8;
+ BAE_HK_data[54] = actual_data.bit_data_acs_mm[2];
+ BAE_HK_data[55] = actual_data.bit_data_acs_mm[2]>>8;
+
+ BAE_HK_data[56] = actual_data.bit_data_acs_mg[0];
+ BAE_HK_data[57] = actual_data.bit_data_acs_mg[0]>>8;
+ BAE_HK_data[58] = actual_data.bit_data_acs_mg[1];
+ BAE_HK_data[59] = actual_data.bit_data_acs_mg[1]>>8;
+ BAE_HK_data[60] = actual_data.bit_data_acs_mg[2];
+ BAE_HK_data[61] = actual_data.bit_data_acs_mg[2]>>8;
+
+ BAE_HK_data[62] = BCN_TX_OC_FAULT;
+ BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_XY_ENABLE;
+ BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_Z_ENABLE;
+ BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_XY_OC_FAULT;
+ BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_Z_OC_FAULT;
+ BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_XY_FAULT;
+ BAE_HK_data[62] = (BAE_HK_data[62]<<1) | EPS_CHARGER_FAULT;
+ BAE_HK_data[62] = (BAE_HK_data[62]<<1) | EPS_CHARGER_STATUS;
+
+ BAE_HK_data[63] = (BAE_HK_data[63]<<1) | EPS_BATTERY_GAUGE_ALERT;
+ BAE_HK_data[63] = (BAE_HK_data[63]<<1) | CDMS_OC_FAULT;
+ BAE_HK_data[63] = (BAE_HK_data[63]<<1) | ACS_ATS1_OC_FAULT;
+ BAE_HK_data[63] = (BAE_HK_data[63]<<1) | ACS_ATS2_OC_FAULT;
+ BAE_HK_data[63] = (BAE_HK_data[63]<<1) | ACS_TR_Z_FAULT;
+ //3 spare
+
+ BAE_HK_data[64] = ACS_TR_X_PWM;
+ BAE_HK_data[65] = ACS_TR_Y_PWM;
+ BAE_HK_data[66] = ACS_TR_Z_PWM;
+ //spare byte
+ //assigned it to counter HTR_CYCLE_COUNTER
+
+ //assign it b_scz_angle
+ BAE_HK_data[67] = 0x00;
+ BAE_HK_data[67] = (BAE_HK_data[65]<<1) | alarmmode;
+ BAE_HK_data[67] = (BAE_HK_data[65]<<1) | controlmode_mms;
+ //2 bit spare
+
+ for(int i=0;i<9;i++)
+ {
+ BAE_HK_data[68+i] = invjm_mms[i];
+ BAE_HK_data[81+i] = jm_mms[i];
+ }
+
+ for(int i=0;i<3;i++)
+ BAE_HK_data[77+i] = bb_mms[i];
+
+ BAE_HK_data[80] = singularity_flag_mms;
+
+ for(int i=0;i<16;i++)
+ {
+ BAE_HK_data[90+i] = quant_data.voltage_quant[i];
+ BAE_HK_data[106+i] = quant_data.current_quant[i];
+ }
+
+ BAE_HK_data[122] = quant_data.Batt_voltage_quant;
+ BAE_HK_data[123] = quant_data.BAE_temp_quant;
+ BAE_HK_data[124] = (uint8_t)(actual_data.Batt_gauge_actual[1]);
+ BAE_HK_data[125] = quant_data.Batt_temp_quant[0];
+ BAE_HK_data[126] = quant_data.Batt_temp_quant[1];
+ BAE_HK_data[127] = BCN_TMP;
+ BAE_HK_data[128] = 0x00;
+ BAE_HK_data[129] = 0x00;
+ BAE_HK_data[130] = 0x00;
+ BAE_HK_data[131] = 0x00;
+ uint16_t crc = crc_hk_data();
+ BAE_HK_data[132] = (uint8_t)(crc >> 8);
+ BAE_HK_data[133] = crc;
+
+//===================================================
+/* can be retrived from the earlier code (function)*/
}
uint8_t quantiz(float start,float step,float x)
@@ -362,17 +718,25 @@
bae_HK_minmax.Batt_temp_min[i] = quant_data.Batt_temp_quant[i];
bae_HK_minmax.Batt_temp_max[i] = quant_data.Batt_temp_quant[i];
}
+ /*
for (int i = 0; i < 3; ++i){
bae_HK_minmax.Batt_gauge_min[i] = quant_data.Batt_gauge_quant[i];
bae_HK_minmax.Batt_gauge_max[i] = quant_data.Batt_gauge_quant[i];
}
+ */
+ bae_HK_minmax.Batt_SOC_min = quant_data.Batt_gauge_quant[1];
+ bae_HK_minmax.Batt_SOC_max = quant_data.Batt_gauge_quant[1];
+
+ bae_HK_minmax.BCN_TEMP_min = BCN_TMP;
+ bae_HK_minmax.BCN_TEMP_min = BCN_TMP;
+
for (int i = 0; i < 3; ++i){
- bae_HK_minmax.AngularSpeed_min[i] = quant_data.AngularSpeed_quant[i];
- bae_HK_minmax.AngularSpeed_max[i] = quant_data.AngularSpeed_quant[i];
+ bae_HK_minmax.bit_data_acs_mg_min[i] = actual_data.bit_data_acs_mg[i];
+ bae_HK_minmax.bit_data_acs_mg_max[i] = actual_data.bit_data_acs_mg[i];
}
for (int i = 0; i < 3; ++i){
- bae_HK_minmax.Bvalue_min[i] = quant_data.Bvalue_quant[i];
- bae_HK_minmax.Bvalue_max[i] = quant_data.Bvalue_quant[i];
+ bae_HK_minmax.bit_data_acs_mm_min[i] = actual_data.bit_data_acs_mm[i];//Bvalue_quant earlier
+ bae_HK_minmax.bit_data_acs_mm_max[i] = actual_data.bit_data_acs_mm[i];
}
bae_HK_minmax.BAE_temp_min=quant_data.BAE_temp_quant;
bae_HK_minmax.BAE_temp_max=quant_data.BAE_temp_quant;
@@ -397,20 +761,28 @@
saveMin(bae_HK_minmax.Batt_temp_min[i],quant_data.Batt_temp_quant[i]);
saveMax(bae_HK_minmax.Batt_temp_max[i],quant_data.Batt_temp_quant[i]);
}
+ /*
for (int i = 0; i < 3; ++i)
{
saveMin(bae_HK_minmax.Batt_gauge_min[i], quant_data.Batt_gauge_quant[i]);
saveMax(bae_HK_minmax.Batt_gauge_max[i], quant_data.Batt_gauge_quant[i]);
}
+ */
+ saveMin(bae_HK_minmax.Batt_SOC_min, quant_data.Batt_gauge_quant[1]);
+ saveMax(bae_HK_minmax.Batt_SOC_max, quant_data.Batt_gauge_quant[1]);
+
+ saveMin(bae_HK_minmax.BCN_TEMP_min, BCN_TMP);
+ saveMin(bae_HK_minmax.BCN_TEMP_max, BCN_TMP);
+
for (int i = 0; i < 3; ++i)
{
- saveMin(bae_HK_minmax.AngularSpeed_min[i], quant_data.AngularSpeed_quant[i]);
- saveMax(bae_HK_minmax.AngularSpeed_max[i], quant_data.AngularSpeed_quant[i]);
+ saveMin(bae_HK_minmax.bit_data_acs_mg_min[i], actual_data.bit_data_acs_mg[i]);
+ saveMax(bae_HK_minmax.bit_data_acs_mg_max[i], actual_data.bit_data_acs_mg[i]);
}
for (int i = 0; i < 3; ++i)
{
- saveMin(bae_HK_minmax.Bvalue_min[i], quant_data.Bvalue_quant[i]);
- saveMax(bae_HK_minmax.Bvalue_max[i], quant_data.Bvalue_quant[i]);
+ saveMin(bae_HK_minmax.bit_data_acs_mm_min[i], actual_data.bit_data_acs_mm[i]);
+ saveMax(bae_HK_minmax.bit_data_acs_mm_max[i], actual_data.bit_data_acs_mm[i]);
}
saveMin(bae_HK_minmax.BAE_temp_min,quant_data.BAE_temp_quant);
saveMax(bae_HK_minmax.BAE_temp_max,quant_data.BAE_temp_quant);
@@ -437,7 +809,7 @@
void FCTN_BATTERYGAUGE_MAIN(float Battery_parameters[4])
{
-/// printf("\n\r battery gauge \n");
+//// printf("\n\r battery gauge \n");
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.
tempCompensation(temp);
@@ -447,9 +819,9 @@
Battery_parameters[1]=soc();
Battery_parameters[2]=crate();
- printf("\nVcell=%f",vcell()); //remove this for final code
- printf("\nSOC=%f",soc()); //remove this for final code
- printf("\nC_rate=%f",crate()); //remove this for final code
+//// printf("\nVcell=%f",vcell()); //remove this for final code
+//// printf("\nSOC=%f",soc()); //remove this for final code
+//// printf("\nC_rate=%f",crate()); //remove this for final code
if (alerting()== true) //alert is on
@@ -705,7 +1077,7 @@
ack = m_I2C.read(m_ADDR, buff, 2);
- printf("\n\r acknow %d", ack);
+//// printf("\n\r acknow %d", ack);
//Return SOC in percent
if(ack == 0)
@@ -747,6 +1119,7 @@
//HS=0;
spi_bt.format(8,3);
spi_bt.frequency(1000000);
+ EPS_BATTERY_TEMP_STATUS = 1;
}
void FCTN_BATT_TEMP_SENSOR_MAIN(float temp[2])
@@ -755,14 +1128,15 @@
int16_t bit_data;
float sensitivity=0.0078125; //1 LSB = sensitivity degree celcius
wait_ms(320);
+ //can we reduce it further ??? azad.......!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ssn1=0;
spi_bt.write(0x80);//Reading digital data from Sensor 1
LSB = spi_bt.write(0x00);//LSB first
- wait_ms(0);
+ wait_ms(10);
MSB = spi_bt.write(0x00);
wait_ms(10);
- pc_eps.printf("%d %d\n",MSB,LSB);
+//// pc_eps.printf("%d %d\n",MSB,LSB);
bit_data= ((uint16_t)MSB<<8)|LSB;
wait_ms(10);
temp[0]=(float)bit_data*sensitivity;//Converting into decimal value
