Add safety management in PID handler and main loop
This commit is contained in:
@@ -198,13 +198,17 @@ static void zero_ccm_ram(void)
|
||||
ptr[i] = 0UL;
|
||||
}
|
||||
|
||||
volatile bool error_state = false;
|
||||
volatile enum safety_adc_check_result safety_adc_status = SAFETY_ADC_CHECK_OK;
|
||||
|
||||
int main()
|
||||
{
|
||||
bool sd_card_mounted = false;
|
||||
shellmatta_handle_t shell_handle;
|
||||
int menu_wait_request;
|
||||
uint64_t quarter_sec_timestamp = 0ULL;
|
||||
enum safety_adc_check_result safety_adc_status;
|
||||
const struct oven_pid_status *pid_status;
|
||||
enum adc_pt1000_error pt1000_status;
|
||||
|
||||
zero_ccm_ram();
|
||||
setup_system();
|
||||
@@ -215,14 +219,46 @@ int main()
|
||||
while (1) {
|
||||
sd_card_mounted = mount_sd_card_if_avail(sd_card_mounted);
|
||||
|
||||
pid_status = oven_pid_get_status();
|
||||
|
||||
if(systick_ticks_have_passed(quarter_sec_timestamp, 250)) {
|
||||
safety_adc_status = handle_safety_adc();
|
||||
quarter_sec_timestamp = systick_get_global_tick();
|
||||
|
||||
if (safety_adc_status & SAFETY_ADC_CHECK_TEMP_LOW || safety_adc_status & SAFETY_ADC_CHECK_TEMP_HIGH) {
|
||||
oven_pid_report_error(OVEN_PID_ERR_OVERTEMP);
|
||||
}
|
||||
|
||||
if (safety_adc_status & SAFETY_ADC_CHECK_VREF_LOW || safety_adc_status & SAFETY_ADC_CHECK_VREF_HIGH) {
|
||||
oven_pid_report_error(OVEN_PID_ERR_VREF_TOL);
|
||||
}
|
||||
|
||||
if (safety_adc_status & SAFETY_ADC_INTERNAL_ERROR) {
|
||||
oven_pid_report_error(0);
|
||||
}
|
||||
|
||||
if (error_state) {
|
||||
led_set(1, !led_get(1));
|
||||
} else {
|
||||
led_set(1, 0);
|
||||
}
|
||||
|
||||
pt1000_status = adc_pt1000_check_error();
|
||||
|
||||
}
|
||||
|
||||
error_state = pid_status->aborted | !!safety_adc_status | !!pt1000_status;
|
||||
|
||||
menu_wait_request = reflow_menu_handle();
|
||||
|
||||
/* Deactivate oven output in case of error! */
|
||||
if (!pid_status->active || pid_status->aborted || error_state) {
|
||||
oven_pid_stop();
|
||||
oven_driver_set_power(0U);
|
||||
}
|
||||
|
||||
handle_shell_uart_input(shell_handle);
|
||||
|
||||
menu_wait_request = reflow_menu_handle();
|
||||
if (menu_wait_request)
|
||||
__WFI();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user