diff --git a/common/common.h b/common/common.h index ceb09f9..f08428f 100644 --- a/common/common.h +++ b/common/common.h @@ -97,8 +97,10 @@ typedef enum _ERROR_CODE ERROR_SENSOR_FORMAT_ERROR, /* unused */ ERROR_INVALID_STATE_ERROR, /* FSM has reached a state that it shouldn't */ ERROR_CONFIG_VALIDITY_ERROR, /* Loaded configuration is invalid */ - ERROR_IGNITION_CONTINUITY_ERROR /* Parachute terminals do not have continuity */ - } ERROR_CODE; + ERROR_IGNITION_CONTINUITY_ERROR, /* Parachute terminals do not have continuity */ + ERROR_FUEL_TIM_INIT_ERROR, + ERROR_LOX_TIM_INIT_ERROR +} ERROR_CODE; /*------------------------------------------------------------------------------ diff --git a/sensor/sensor.c b/sensor/sensor.c index 113eefa..5fa9686 100644 --- a/sensor/sensor.c +++ b/sensor/sensor.c @@ -60,9 +60,9 @@ /* Hash table of sensor readout sizes and offsets */ static SENSOR_DATA_SIZE_OFFSETS sensor_size_offsets_table[ NUM_SENSORS ]; -extern volatile uint32_t tdelta, previous_time; #ifdef FLIGHT_COMPUTER +extern volatile uint32_t tdelta, previous_time; extern GPS_DATA gps_data; extern IMU_OFFSET imu_offset; #endif @@ -468,8 +468,10 @@ switch ( subcommand ) } #endif + #ifdef FLIGHT_COMPUTER // Reset start time previous_time = HAL_GetTick(); + #endif /* Start polling sensors */ while ( sensor_poll_cmd != SENSOR_POLL_STOP ) @@ -513,8 +515,10 @@ switch ( subcommand ) /* Poll Sensors */ case SENSOR_POLL_REQUEST: { + #ifdef FLIGHT_COMPUTER tdelta = HAL_GetTick() - previous_time; previous_time = HAL_GetTick(); + #endif /* FLIGHT_COMPUTER */ sensor_status = sensor_poll( &sensor_data , &poll_sensors[0], num_sensors ); @@ -543,9 +547,11 @@ switch ( subcommand ) /* STOP Executtion */ case SENSOR_POLL_STOP: { - // Reset timing + #ifdef FLIGHT_COMPUTER + // Reset timing for flight computer previous_time = 0; tdelta = 0; + #endif break; } /* case SENSOR_POLL_STOP */ diff --git a/solenoid/solenoid.c b/solenoid/solenoid.c index ae7f283..73bf326 100644 --- a/solenoid/solenoid.c +++ b/solenoid/solenoid.c @@ -165,10 +165,13 @@ switch(solenoid_base_code) case SOL_GETSTATE_CODE: { sol_state = solenoid_get_state(); - #if defined( TERMINAL ) + #if defined( TERMINAL ) usb_transmit( &sol_state, sizeof( sol_state ), HAL_DEFAULT_TIMEOUT ); - #elif defined( HOTFIRE ) - valve_transmit( &sol_state, sizeof( sol_state ), HAL_DEFAULT_TIMEOUT ); + #elif defined( HOTFIRE ) + if (USB_MODE) + usb_transmit( &sol_state, sizeof( sol_state ), HAL_DEFAULT_TIMEOUT ); + else + valve_transmit( &sol_state, sizeof( sol_state ), HAL_DEFAULT_TIMEOUT ); #endif break; } diff --git a/valve/valve.c b/valve/valve.c index a1834f4..1fed415 100644 --- a/valve/valve.c +++ b/valve/valve.c @@ -282,9 +282,14 @@ switch( subcommand ) { main_valve_states = valve_get_valve_states(); #if defined( HOTFIRE ) - valve_transmit( &main_valve_states , - sizeof( main_valve_states ), - HAL_DEFAULT_TIMEOUT ); + if (USB_MODE){ + usb_transmit( &main_valve_states , + sizeof( main_valve_states ), + HAL_DEFAULT_TIMEOUT ); + } else + valve_transmit( &main_valve_states , + sizeof( main_valve_states ), + HAL_DEFAULT_TIMEOUT ); #elif defined( TERMINAL ) usb_transmit( &main_valve_states, sizeof( main_valve_states ), @@ -569,6 +574,58 @@ return VALVE_OK; } /* valve_open_fuel_valve */ +/******************************************************************************* +* * +* PROCEDURE: * +* valve_open_fuel_valve * +* * +* DESCRIPTION: * +* Open the main fuel valve * +* * +*******************************************************************************/ +VALVE_STATUS valve_slow_open_fuel_valve + ( + void + ) +{ +/*------------------------------------------------------------------------------ + Local Variables +------------------------------------------------------------------------------*/ +VALVE_STATUS valve_status; /* Status return codes from valve API */ + + +/*------------------------------------------------------------------------------ + Initializations +------------------------------------------------------------------------------*/ +valve_status = VALVE_OK; + + +/*------------------------------------------------------------------------------ + Implementation +------------------------------------------------------------------------------*/ + +/* Check if valve is already open */ +if ( fuel_valve_pos == VALVE_OPEN_POS ) + { + return VALVE_OK; + } + +/* Set the direction */ +valve_status = fuel_driver_set_direction( STEPPER_DRIVER_CW ); +if ( valve_status != VALVE_OK ) + { + return valve_status; + } + +/* Actuate the valve */ +fuel_valve_opening = true; +HAL_TIM_PWM_Start( &( VALVE_FUEL_TIM ), VALVE_FUEL_TIM_CHANNEL ); +return VALVE_OK; +} /* valve_open_fuel_valve */ + + + + /******************************************************************************* * * * PROCEDURE: * @@ -922,22 +979,22 @@ if ( HAL_GPIO_ReadPin( LOX_ENC_GPIO_PORT, LOX_ENC_A_PIN ) ) if ( !lox_channelB_state ) { //lox_valve_pos -= 1; - dec_lox_encoder(); + // dec_lox_encoder(); /* Detect valve closed position */ - if ( ox_valve_closing && ( lox_valve_pos == VALVE_CLOSED_POS ) ) - { - HAL_TIM_PWM_Stop( &( VALVE_LOX_TIM ), VALVE_LOX_TIM_CHANNEL ); - ox_valve_closing = false; - } - /* + // if ( ox_valve_closing && ( lox_valve_pos == VALVE_CLOSED_POS ) ) + // { + // HAL_TIM_PWM_Stop( &( VALVE_LOX_TIM ), VALVE_LOX_TIM_CHANNEL ); + // ox_valve_closing = false; + // } + if ( ox_valve_closing && ( valve_get_ox_valve_state() == VALVE_CLOSED ) ) { HAL_TIM_PWM_Stop( &( VALVE_LOX_TIM ), VALVE_LOX_TIM_CHANNEL ); ox_valve_closing = false; lox_valve_pos = 0; } - */ + } } /* High to Low Transition */ @@ -1015,13 +1072,21 @@ if ( HAL_GPIO_ReadPin( KER_ENC_GPIO_PORT, KER_ENC_A_PIN ) ) if ( !fuel_channelB_state ) { //fuel_valve_pos -= 1; - dec_fuel_encoder(); + // dec_fuel_encoder(); /* Detect valve closed */ - if ( fuel_valve_closing && ( fuel_valve_pos == VALVE_CLOSED_POS ) ) + // if ( fuel_valve_closing && ( fuel_valve_pos == VALVE_CLOSED_POS ) ) + // { + // HAL_TIM_PWM_Stop( &( VALVE_FUEL_TIM ), VALVE_FUEL_TIM_CHANNEL ); + // fuel_valve_closing = false; + // } + // } + + if ( fuel_valve_closing && ( valve_get_fuel_valve_state() == VALVE_CLOSED ) ) { HAL_TIM_PWM_Stop( &( VALVE_FUEL_TIM ), VALVE_FUEL_TIM_CHANNEL ); fuel_valve_closing = false; + fuel_valve_pos = 0; } } } @@ -1273,13 +1338,13 @@ main_valve_states = 0; /* Check the LOX valve */ if ( valve_get_ox_valve_state() == VALVE_OPEN ) { - main_valve_states |= ( 1 << 7 ); + main_valve_states |= ( 1 << 6 ); } /* Check the fuel valve */ if ( valve_get_fuel_valve_state() == VALVE_OPEN ) { - main_valve_states |= ( 1 << 6 ); + main_valve_states |= ( 1 << 7 ); } return main_valve_states; diff --git a/valve/valve.h b/valve/valve.h index c9100da..beb80e3 100644 --- a/valve/valve.h +++ b/valve/valve.h @@ -149,6 +149,12 @@ VALVE_STATUS valve_open_fuel_valve void ); +/* Slowly open the main fuel valve */ +VALVE_STATUS valve_slow_open_fuel_valve + ( + void + ); + /* Close the main oxidizer valve */ VALVE_STATUS valve_close_ox_valve (