-
Notifications
You must be signed in to change notification settings - Fork 0
/
task_pump_controll.h
131 lines (111 loc) · 2.98 KB
/
task_pump_controll.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#ifndef INC_TASKPUMPCONTROLL_H_
#define INC_TASKPUMPCONTROLL_H_
#include "stdbool.h"
#include "main.h"
#define PUMP_STATE_INPUT_INIT(X) can_pump_state_input X = {.motor_one_temp = 0, .motor_two_temp = 0, .input_flow = 0, .output_flow = 0}
#define TASK_PUMP_CONTROLL_COMMUNICATION_DELAY 1000 // Dask delay in ms
#define START_PUMP_TEMP 50// Motor temperature in deg C
#define STOP_PUMP_TEMP 40 // Motor temperature in deg C
#define MIN_INPUT_FLOW 100 // Minimum flow difference
#define MAX_OVER_TEMP 100 // Top hysteresis overheated state value
#define MIN_OVER_TEMP 90 // Bottom hysteresis overheated state value
// just for debug
#define Cooling_Pump_GPIO_Port TIM8_CH2_ENGINE_PUMP_GPIO_Port
#define Cooling_Pump_Pin TIM8_CH2_ENGINE_PUMP_Pin
typedef struct {
int16_t motor_one_temp; //temperature from analog sensor
int16_t motor_two_temp; //temperature from analog sensor
int16_t input_flow;
int16_t output_flow;
} can_pump_state_input;
typedef enum {
OVERHEAT, // too high motor temperature
DRY_RUNNING, // no water in cooling system
LEAK, // detected leakage in cooling system
NONE, // no error
TIMEOUT // task failed to read cooling system parameters in specified time
} SBT_e_pump_alarm;
typedef struct {
uint8_t PUMP_STOP;
uint8_t LEAK;
uint8_t TEMP_READ_ERROR;
uint8_t OVERHEAT;
} SBT_s_pump_fatal_alarm;
typedef enum {
PUMP_ON,
PUMP_OFF,
PUMP_AUTO
} SBT_e_pump_mode;
typedef enum{
PUMP_AUTO_OFF,
PUMP_AUTO_ON,
} SBT_e_pump_auto_action;
/**
* @brief Hysteresis controll
*
* @param process_temperature
*
* @param pump_pin_state
*
* @param stop_temp - turn off value
*
* @param start_temp - turn on value
*
* @retval None
*
*/
int SBT_Pump_Controll(int16_t process_temperature, uint8_t pump_pin_state, uint8_t stop_temp, uint8_t start_temp);
/**
* @brief Designate procces temperature
*
* @param p_pump_state_input - pointer to pump state struct
*
* @retval Value of process temperature
*
*/
int SBT_Designate_Process_Temperature(can_pump_state_input* p_pump_state_input);
/**
* @brief Analysis of motor temperature
*
* @param motor_one_temp
*
* @param motor_two_temp
*
* @param pump_pin_state
*
* @retval ID of detected error or NONE
*
*/
int SBT_Temperature_Analysis(can_pump_state_input* p_pump_state_input, int16_t process_temperature, uint8_t pump_pin_state);
/**
* @brief Analysis of water flow in cooling ciruit
*
* @param input_flow - measure behind pump
*
* @param output_flow - measure at the end of the cooling system
*
* @param pump_pin_state
*
* @retval ID of detected error or NONE
*
*/
int SBT_Flow_Analysis(int16_t input_flow, int16_t output_flow, uint8_t pump_pin_state);
/**
* @brief Sents error messeage to CAN queue
*
* @param error_id
*
* @retval None
*
*/
void SBT_System_Failure(SBT_e_pump_alarm error_id);
/**
* @brief Main function of Task Pump Controller
*
* @param None
*
* @retval None
*
*/
void StartTaskPumpControll(void const * argument);
#endif /* INC_TASKPUMPCONTROLL_H_ */