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 QM_BAE_review_1 by
Diff: main.cpp
- Revision:
- 5:bb592f3185cc
- Parent:
- 4:39a4ae8c7ecd
- Child:
- 6:036d08b62785
diff -r 39a4ae8c7ecd -r bb592f3185cc main.cpp
--- a/main.cpp Wed Dec 30 04:57:46 2015 +0000
+++ b/main.cpp Thu Dec 31 17:12:52 2015 +0000
@@ -8,12 +8,14 @@
#define tm_len 134
#define tc_len 135
-#define bae_data_len 150
#define batt_heat_low 20
//***************************************************** flags *************************************************************//
uint32_t BAE_STATUS = 0x00000000;
uint32_t BAE_ENABLE = 0xFFFFFFFF;
+//i2c//
+char data_send_flag = 'h';
+
//.........acs...............//
char ACS_INIT_STATUS = 'q';
char ACS_DATA_ACQ_STATUS = 'q';
@@ -37,7 +39,7 @@
char EPS_BATTERY_HEAT_ENABLE = 'q';
//.......................global variables..................................................................// new hk structure- everything has to changed based on this
-char BAE_data[bae_data_len];
+uint8_t BAE_data[73];
//*************************************Global declarations************************************************//
@@ -56,11 +58,15 @@
extern BAE_HK_min_max bae_HK_minmax;
extern BAE_HK_arch arch_data;
-bool write_ack = 1;
-bool read_ack = 1;
+int write_ack = 1;
+int read_ack = 1;
char telecommand[tc_len];
char* telemetry;
-char data_send_flag = 'h';
+
+bool pf1check = 0;
+bool pf2check = 0;
+bool if1check = 0;
+bool if2check = 1;
//*****************************************************Assigning pins******************************************************//
DigitalOut gpo1(PTC0); // enable of att sens2 switch
@@ -75,6 +81,30 @@
PwmOut PWM2(PIN94); //y
PwmOut PWM3(PIN95); //z //PWM output comes from pins p6
+//........faults
+//Polled Faults
+DigitalIn pf1(PIN5);//Attitude Sensor 1 OC bar fault signal
+DigitalIn pf2(PIN97);//Attitude Sensor 2 OC bar fault signal
+DigitalIn pf3(PIN83);//Fault Bar for TRXY driver
+
+//Interrupt based faults
+//InterruptIn ir1(PIN73);//Battery Gauge - Alert Bar Signal
+InterruptIn ir2(PIN72);//TRXY Driver TR switch Fault
+InterruptIn ir3(PIN89);//TRZ Driver Fault Bar
+InterruptIn ir4(PIN91);//TRZ Driver TR switch Fault
+InterruptIn ir5(PIN79);//CDMS - Switch Fault
+InterruptIn ir6(PIN80);//Beacon- Switch OC bar
+InterruptIn ir7(PIN42);//Charger IC - Fault Bar
+
+DigitalOut TRXY_SW(PIN71); //TR XY Switch
+DigitalOut DRV_Z_SLP(PIN88); //Sleep pin of driver z
+DigitalOut TRZ_SW(PIN40); //TR Z Switch
+DigitalOut CDMS_RESET(PIN7); // CDMS RESET
+DigitalOut BCN_SW(PIN14); //Beacon switch
+DigitalOut DRV_XY_SLP(PIN82);
+
+
+
/*****************************************************************Threads USed***********************************************************************************/
@@ -89,9 +119,67 @@
void F_BCN();
//*******************************************ACS THREAD**************************************************//
+uint8_t iterP1;
+uint8_t iterP2;
+uint8_t iterI1;
+uint8_t iterI2;
+
void F_ACS()
{
+ if(pf1check == 1)
+ {
+ if(iterP1 >= 3)
+ {
+ gpo1 = 1; // turn off ats1 permanently
+ //FCTN_SWITCH_ATS(0); // switch on ATS2
+ }
+ else
+ {
+ gpo1 = 0;
+ iterP1++;
+ }
+ }
+ if(pf2check == 1)
+ {
+ if(iterP1 >= 3)
+ {
+ gpo2 = 1; // turn off ats2 permanently
+ ACS_DATA_ACQ_ENABLE == 'd';
+ ACS_STATE == '2' ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
+ }
+ else
+ {
+ gpo2 = 0;
+ iterP2++;
+ }
+ }
+ if(if1check == 1)
+ {
+ if(iterI1 >= 3)
+ {
+ TRXY_SW = 0; // turn off TRXY permanently
+ }
+ else
+ {
+ TRXY_SW = 1; //switch on TRXY
+ iterI1++;
+ }
+ }
+ if(if2check == 1)
+ {
+ if(iterI2 >= 3)
+ {
+ TRZ_SW = 0; // turn off TRZ permanently
+ ACS_STATE == '2' ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
+ }
+ else
+ {
+ TRZ_SW = 1; //switch on Z
+ iterI2++;
+ }
+ }
+
float b1[3]={-23.376,-37.56,14.739}, omega1[3]={-1.52,2.746,0.7629}, moment1[3]= {1.0498,-1.0535,1.3246};
//b1[3] = {22, 22,10};
//omega1[3] = {2.1,3.0,1.5};
@@ -120,13 +208,12 @@
for(int i=3; i<6; i++)
{
pc.printf("%f\n\r",data[i]);
-
+ }
for(int i=0;i<3;i++)
{
omega1[i]= data[i];
b1[i] = data[i+3];
}
- }
}//if ACS_DATA_ACQ_ENABLE = 1
else
{
@@ -245,7 +332,7 @@
EPS_BATTERY_TEMP_STATUS = 's'; //set EPS_BATTERY_TEMP_STATUS
if(EPS_BATTERY_HEAT_ENABLE == 'e')
{
- 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] < batt_heat_low) && (actual_data.Batt_temp_actual[1] < batt_heat_low)) // to confirm
{
batt_heat = 1; //turn on battery heater
}
@@ -283,8 +370,8 @@
// EPS_STATUS = EPS_ERR_BATTERY_TEMP;
// }
FCTN_HK_MAIN();
- //FCTN_APPEND_HKDATA();
- //minMaxHkData();
+ FCTN_APPEND_HKDATA();
+ minMaxHkData();
EPS_MAIN_STATUS = 'c'; // clear EPS main status
@@ -313,18 +400,24 @@
slave.stop();
else if( slave.receive() == 1) // slave writes to master
{
- write_ack=slave.write((char*)telemetry,tm_len);
- irpt_2_mstr = 0;
+ if(data_send_flag == 'h')
+ write_ack=slave.write((char*)BAE_data,73);
+ else if(data_send_flag == 't')
+ {
+ write_ack=slave.write(telemetry,tm_len);
+ data_send_flag = 'h';
+ irpt_2_mstr = 0;
+ }
}
else if( slave.receive()==3 || slave.receive()==2) // slave read
{
- read_ack=slave.read(telecommand,tc_len);
- pc.printf("\n\rTELECOMMAND received from CDMS is %s \n",telecommand);
- pc.printf("\n\r Executing Telecommand \n");
+ read_ack=slave.read(telecommand,tc_len);
+ pc.printf("\n\rTELECOMMAND received from CDMS is %s \n",telecommand);
+ pc.printf("\n\r Executing Telecommand \n");
// FCTN_TC_DECODE((uint8_t*) telecommand);
uint8_t* temp = FCTN_BAE_TM_TC((uint8_t*) telecommand);
telemetry = (char*)temp;
- FCTN_TM();
+ FCTN_TM();
// for(int i = 0; i<134; i++)
//pc.printf("%c", telemetry[i]);
}
@@ -335,6 +428,7 @@
void FCTN_TM()
{
//irpt_2_mstr = 0;
+ data_send_flag = 't';
pc.printf("\n\r Telemetry Generation \n");
irpt_2_mstr = 1;
}
@@ -348,6 +442,125 @@
}
+//***********************************************************FAULTS***************************************************************//
+/*void ir1clear()
+{
+ actual_data.faultIr_status |= 0x01; // alert
+
+}*/
+
+
+
+void ir2clear()
+{
+ actual_data.faultIr_status |= 0x02;
+ TRXY_SW = 0; // Switch off TR XY
+ if1check = 1;
+}
+
+void ir3clear()
+{
+ actual_data.faultIr_status |= 0x04;
+ DRV_Z_SLP = 0;
+ wait_us(1);
+ DRV_Z_SLP = 1;
+
+}
+
+void ir4clear()
+{
+ if2check = 1;
+ actual_data.faultIr_status |= 0x08;
+ TRZ_SW = 0;
+}
+
+void ir5clear()
+{
+ actual_data.faultIr_status |= 0x10;
+ CDMS_RESET = 0;
+ wait_us(1);
+ CDMS_RESET = 1;
+}
+
+void ir6clear()
+{
+ actual_data.faultIr_status |= 0x20;
+ BCN_SW = 0;
+ wait_us(1);
+ BCN_SW = 1;
+}
+
+void ir7clear()
+{
+ actual_data.faultIr_status |= 0x40;
+}
+uint8_t iter2=0,iter4 = 0;
+
+
+
+void pollfault()
+{
+
+
+
+ if (pf1==0) // OC_ATS1
+ {
+ pf1check=1;
+ actual_data.faultPoll_status |=0x01 ;
+ gpo1 = 1; // turn off ats1 // to be turned on next cycle in ACS
+ }
+ else actual_data.faultPoll_status &= 0xFE;
+
+ if (pf2==0)
+ {
+ pf2check=1;
+ actual_data.faultPoll_status |=0x02 ;
+ gpo2 = 1; // turn off ats2 // turn on in ACS
+ }
+ else actual_data.faultPoll_status &= 0xFD;
+
+ if (pf3==0)
+ { actual_data.faultPoll_status |=0x04 ;
+ DRV_XY_SLP = 0;
+ wait_us(1);
+ DRV_XY_SLP = 1;
+ }
+ else actual_data.faultPoll_status &= 0xFB;
+
+
+
+
+ /*if (ir1==1)
+ {
+ actual_data.faultIr_status &=0xFE;
+ }*/
+ if (ir2==1)
+ {
+ actual_data.faultIr_status &=0xFD;
+ }
+ if (ir3==1)
+ {
+ actual_data.faultIr_status &=0xFB;
+ }
+ if (ir4==1)
+ {
+ actual_data.faultIr_status &=0xF7;
+ }
+ if (ir5==1)
+ {
+ actual_data.faultIr_status &=0xEF;
+ }
+ if (ir6==1)
+ {
+ actual_data.faultIr_status &=0xDF;
+ }if (ir7==1)
+ {
+ actual_data.faultIr_status &=0xBF;
+ }
+
+}
+
+
//------------------------------------------------------------------------------------------------------------------------------------------------
//SCHEDULER
//------------------------------------------------------------------------------------------------------------------------------------------------
@@ -436,15 +649,49 @@
BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000060); //ACS_STATE = ACS_DETUMBLING_CONTROL
//...............eps......................//
- if(EPS_INIT_STATUS == 's')
- BAE_STATUS |= 0x00010000; //set EPS_INIT_STATUS flag
- else if(EPS_INIT_STATUS == 'c')
- BAE_STATUS &= 0xFFFEFFFF; //clear EPS_INIT_STATUS flag
- if(EPS_BATTERY_GAUGE_STATUS == 'c')
- BAE_STATUS &= 0xFFFDFFFF; //clear EPS_BATTERY_GAUGE_STATUS
- else if(EPS_BATTERY_GAUGE_STATUS == 's')
- BAE_STATUS |= 0x00020000; //set EPS_BATTERY_GAUGE_STATUS
-
+
+
+if (EPS_INIT_STATUS=='s') // Set EPS_INIT_STATUS
+ BAE_STATUS |= 0x00010000;
+else if(EPS_INIT_STATUS=='c') // Clear
+ BAE_STATUS &= 0xFFFEFFFF;
+
+
+if (EPS_MAIN_STATUS=='s') // Set EPS_MAIIN_STATUS
+ BAE_STATUS |= 0x00040000;
+else if(EPS_MAIN_STATUS=='c') // Clear
+ BAE_STATUS &= 0xFFFBFFFF;
+
+
+if (EPS_BATTERY_GAUGE_STATUS=='s') // Set EPS_BATTERY_GAUGE_STATUS
+ BAE_STATUS |= 0x00020000;
+else if(EPS_BATTERY_GAUGE_STATUS=='c') // Clear
+ BAE_STATUS &= 0xFFFDFFFF;
+
+
+if (EPS_BATTERY_TEMP_STATUS=='s') // Set EPS_BATTERY_TEMP_STATUS
+ BAE_STATUS |= 0x00080000;
+else if(EPS_BATTERY_TEMP_STATUS=='c') // Clear
+ BAE_STATUS &= 0xFFF7FFFF;
+
+if (EPS_STATUS==0)
+ BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF); // Set EPS_ERR_BATTERY_TEMP
+else if (EPS_STATUS==1)
+ BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00010000; // Set EPS_BATTERY_HEATER_DISABLED
+else if (EPS_STATUS==2)
+ BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00020000; // Set EPS_ERR_HEATER_SWITCH_OFF
+else if (EPS_STATUS==3)
+ BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00030000; // Set EPS_ERR_HEATER_SWITCH_ON
+else if (EPS_STATUS==4)
+ BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00040000; // Set EPS_BATTERY_HEATER_OFF
+else if (EPS_STATUS==5)
+ BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00050000; // Set EPS_BATTERY_HEATER_ON
+
+
+ if(EPS_BATTERY_HEAT_ENABLE == 'e')
+ BAE_ENABLE |= 0x00000080;
+ else if(EPS_BATTERY_HEAT_ENABLE == 'd')
+ BAE_ENABLE = BAE_ENABLE &0xFFFFFF7;
@@ -495,9 +742,16 @@
ptr_t_i2c = new Thread(T_TC);
ptr_t_i2c->set_priority(osPriorityHigh);
-
+
irpt_4m_mstr.enable_irq();
irpt_4m_mstr.rise(&FCTN_I2C_ISR);
+ // ir1.fall(&ir1clear); //Battery Gauge - Alert Bar Signal
+ ir2.fall(&ir2clear); //TRXY Driver TR switch Fault
+ ir3.fall(&ir3clear); //TRZ Driver Fault Bar
+ ir4.fall(&ir4clear); //TRZ Driver TR switch Fault
+ ir5.fall(&ir5clear); //CDMS - Switch Fault
+ ir6.fall(&ir6clear); //Beacon- Switch OC bar
+ ir7.fall(&ir7clear); //Charger IC - Fault Bar
RtosTimer t_sc_timer(T_SC,osTimerPeriodic); // Initiating the scheduler thread
t_sc_timer.start(10000);
t_start.start();
