Further rewrite safety handling
This commit is contained in:
@@ -36,4 +36,6 @@
|
||||
|
||||
#define ABS(a) ((a) < 0 ? (-1*(a)) : (a))
|
||||
|
||||
#define is_power_of_two(num) ((num) && !((num) & ((num) - 1)))
|
||||
|
||||
#endif /* __HELPER_MACROS_H__ */
|
||||
|
@@ -25,32 +25,9 @@
|
||||
#include <stdbool.h>
|
||||
#include <reflow-controller/pid-controller.h>
|
||||
|
||||
enum oven_pid_error_report {
|
||||
OVEN_PID_NO_ERROR = 0,
|
||||
OVEN_PID_ERR_PT1000_ADC_WATCHDOG = (1<<0),
|
||||
OVEN_PID_ERR_PT1000_ADC_OFF = (1<<1),
|
||||
OVEN_PID_ERR_PT1000_OTHER = (1<<2),
|
||||
OVEN_PID_ERR_VREF_TOL = (1<<3),
|
||||
OVEN_PID_ERR_OVERTEMP = (1<<4),
|
||||
};
|
||||
|
||||
struct oven_pid_errors {
|
||||
bool generic_error;
|
||||
bool pt1000_adc_watchdog;
|
||||
bool pt1000_adc_off;
|
||||
bool pt1000_other;
|
||||
bool vref_tol;
|
||||
bool controller_overtemp;
|
||||
};
|
||||
|
||||
struct oven_pid_status {
|
||||
bool active;
|
||||
bool error_set;
|
||||
struct oven_pid_errors error_flags;
|
||||
float target_temp;
|
||||
float current_temp;
|
||||
uint64_t timestamp_last_run;
|
||||
};
|
||||
enum oven_pid_status {OVEN_PID_DEACTIVATED,
|
||||
OVEN_PID_RUNNING,
|
||||
OVEN_PID_ABORTED};
|
||||
|
||||
void oven_driver_init(void);
|
||||
|
||||
@@ -66,8 +43,8 @@ void oven_pid_handle(float target_temp);
|
||||
|
||||
void oven_pid_stop();
|
||||
|
||||
void oven_pid_report_error(enum oven_pid_error_report report);
|
||||
void oven_driver_apply_power_level(void);
|
||||
|
||||
const struct oven_pid_status *oven_pid_get_status(void);
|
||||
enum oven_pid_status oven_pid_get_status(void);
|
||||
|
||||
#endif /* __OVEN_DRIVER_H__ */
|
||||
|
@@ -29,26 +29,7 @@
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define SAFETY_ADC_VREF_MVOLT (2500.0f)
|
||||
#define SAFETY_ADC_VREF_TOL_MVOLT (100.0f)
|
||||
#define SAFETY_ADC_TEMP_LOW_LIM (0.0f)
|
||||
#define SAFETY_ADC_TEMP_HIGH_LIM (65.0f)
|
||||
|
||||
enum safety_adc_meas_channel {SAFETY_ADC_MEAS_VREF, SAFETY_ADC_MEAS_TEMP};
|
||||
enum safety_adc_check_result {
|
||||
SAFETY_ADC_CHECK_OK = 0UL,
|
||||
SAFETY_ADC_CHECK_VREF_LOW = (1U<<0),
|
||||
SAFETY_ADC_CHECK_VREF_HIGH = (1U<<1),
|
||||
SAFETY_ADC_CHECK_TEMP_LOW = (1U<<2),
|
||||
SAFETY_ADC_CHECK_TEMP_HIGH = (1U<<3),
|
||||
SAFETY_ADC_INTERNAL_ERROR = (1U<<4),
|
||||
};
|
||||
|
||||
extern enum safety_adc_check_result global_safety_adc_status;
|
||||
|
||||
enum safety_adc_check_result safety_adc_get_errors();
|
||||
|
||||
void safety_adc_clear_errors(void);
|
||||
|
||||
void safety_adc_init();
|
||||
|
||||
@@ -63,14 +44,9 @@ void safety_adc_trigger_meas(enum safety_adc_meas_channel measurement);
|
||||
*/
|
||||
int safety_adc_poll_result(uint16_t *adc_result);
|
||||
|
||||
enum safety_adc_check_result safety_adc_check_results(uint16_t vref_result, uint16_t temp_result,
|
||||
float *vref_calculated, float *temp_calculated);
|
||||
|
||||
enum safety_adc_check_result handle_safety_adc();
|
||||
|
||||
float safety_adc_get_temp();
|
||||
|
||||
float safety_adc_get_vref();
|
||||
float safety_adc_convert_channel(enum safety_adc_meas_channel channel, uint16_t analog_value);
|
||||
|
||||
#endif /* __SAFETY_ADC_H__ */
|
||||
|
||||
|
@@ -68,4 +68,9 @@ enum analog_value_monitor {
|
||||
|
||||
#define HALTING_CAREMASK (ERR_FLAG_STACK | ERR_FLAG_AMON_UC_TEMP)
|
||||
|
||||
#define SAFETY_ADC_VREF_MVOLT (2500.0f)
|
||||
#define SAFETY_ADC_VREF_TOL_MVOLT (100.0f)
|
||||
#define SAFETY_ADC_TEMP_LOW_LIM (0.0f)
|
||||
#define SAFETY_ADC_TEMP_HIGH_LIM (65.0f)
|
||||
|
||||
#endif /* __SAFETY_CONFIG_H__ */
|
||||
|
@@ -30,6 +30,12 @@
|
||||
#include <reflow-controller/safety/safety-config.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
enum analog_monitor_status {ANALOG_MONITOR_OK = 0,
|
||||
ANALOG_MONITOR_ERROR,
|
||||
ANALOG_MONITOR_INACTIVE,
|
||||
ANALOG_MONITOR_OVER,
|
||||
ANALOG_MONITOR_UNDER};
|
||||
|
||||
/**
|
||||
* @brief Initialize the safety controller
|
||||
*
|
||||
@@ -50,8 +56,14 @@ int safety_controller_report_error(enum safety_flag flag);
|
||||
|
||||
void safety_controller_report_timing(enum timing_monitor monitor);
|
||||
|
||||
void safety_controller_report_analog_value(enum analog_value_monitor monitor, float value);
|
||||
|
||||
int safety_controller_enable_timing_mon(enum timing_monitor monitor, bool enable);
|
||||
|
||||
enum analog_monitor_status safety_controller_get_analog_mon_value(enum analog_value_monitor monitor, float *value);
|
||||
|
||||
bool safety_controller_get_flag(enum safety_flag);
|
||||
|
||||
#endif /* __SAFETY_CONTROLLER_H__ */
|
||||
|
||||
/** @} */
|
||||
|
Reference in New Issue
Block a user