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: 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