source: trunk/firmware_v2/SES/src/mode_ovp.c@ 29

Last change on this file since 29 was 24, checked in by f.jahn, 4 months ago
LVP, OVP, LVP
OVP modes implementiert
  • Lüftersteuerung in eigenes Modul verlagert
File size: 7.0 KB
Line 
1
2// Wie OVP||OVP Modul
3// Jedoch hier nur OVP
4
5
6
7#include "stdio.h"
8#include "mode_ovp.h"
9#include "button.h"
10#include "relais.h"
11#include "main.h"
12#include "leds.h"
13#include "buzzer.h"
14#include "chip_temperature.h"
15
16
17typedef enum OVP_State_enum
18{
19 OVP_OFF,
20 OVP_ON,
21 OVP_MANUAL_ON,
22 OVP_ERROR
23} OVP_state_t;
24
25
26static OVP_state_t smState;
27
28
29static void OVP_SM_Off(void)
30{
31 int faultInput;
32
33
34 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)
35 {
36 faultInput = 1;
37 }
38 else
39 {
40 faultInput = 0;
41 }
42
43
44
45
46
47 //Prüfe auf Wechsel des Modus AUTO / SM ON
48 if (BUTTON_GetMode() == BUTTON_AUTO)
49 {
50 if (faultInput == 0)
51 {
52 RELAIS_SetPuls();
53 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM);
54 LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME);
55 printf("OVP_SM_Off: NEW_STATE: OVP_ON\n");
56 smState = OVP_ON;
57
58 }
59 else
60 {
61 //Wechsel nicht möglich. Fehler Eingang aktiv
62 BUZZER_Beep(BUZZER_ON_TIME_REJECT);
63 BUTTON_SetModeOff();
64 //LEDS_RT_Blink_Start(LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_GN_OFF_TIME); //Fehler Anzeigen
65 LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_FAULT_INPUT, LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_RT_OFF_TIME, LED_RT_OFF_TIME *5); //Fehler Anzeigen
66 printf("OVP_SM_Off: NEW_STATE: OVP_ERROR_FAULT_INPUT\n");
67 smState =OVP_ERROR;
68 }
69 }
70
71
72 //Prüfe auf Wechsel in MANUAL ON Mode
73 //Keine Fehlerüberprüfungen. In diesem Modus werdem alle Alarme ignoriert.
74 if (BUTTON_GetMode() == BUTTON_MANUAL_ON)
75 {
76
77 RELAIS_SetPuls();
78 BUZZER_Alarm_Start(BUZZER_ON_TIME_ALARM_MANUAL_MODE, BUZZER_OFF_TIME);
79 LEDS_GN_On();
80 LEDS_RT_BlinkCode_Start(BLINK_CODE_WARN_MANUAL, LED_RT_ON_TIME_WARN_MANUAL_MODE, LED_RT_OFF_TIME, LED_RT_OFF_TIME * 5); //Fehler Anzeigen
81 printf("NEW_STATE: OVP_MANUAL_ON\n");
82 smState = OVP_MANUAL_ON;
83 }
84
85
86
87}
88
89static void OVP_SM_On(void)
90{
91 int faultInput = 0;
92 static int ovpInput = 0;
93 static int ovpTimeCounter = 0;
94 static int oldtime;
95
96 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)
97 {
98 faultInput = 1;
99 }
100 else
101 {
102 faultInput = 0;
103 }
104
105 if ((HAL_GPIO_ReadPin(GPIO_INPUT_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_SET) || (HAL_GPIO_ReadPin(GPIO_INPUT_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_SET))
106 {
107 if (HAL_GetTick() != oldtime)
108 {
109 if (ovpTimeCounter < 5000) ovpTimeCounter++;
110 if (ovpTimeCounter >= 5000)
111 {
112 ovpInput = 1;
113 ovpTimeCounter=0;
114 }
115 oldtime = HAL_GetTick();
116 }
117 }
118
119 if (HAL_GPIO_ReadPin(GPIO_INPUT_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_RESET)
120 {
121// if (HAL_GetTick() != oldtime)
122// {
123// ovpAndOvpInputTimeCounter++;
124// if (ovpAndOvpInputTimeCounter > 30000)
125// {
126 ovpInput = 0;
127 ovpTimeCounter=0;
128// }
129// oldtime = HAL_GetTick();
130// }
131 }
132
133
134
135
136 //Prüfe auf Fehlermode
137 if (faultInput == 1)
138 {
139 RELAIS_ResetPuls();
140 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
141 LEDS_GN_Off();
142 LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_FAULT_INPUT, LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_RT_OFF_TIME, LED_RT_OFF_TIME *5); //Fehler Anzeigen
143 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
144 printf("FAULT INPUT EVENT DETECTED!\n");
145 printf("NEW_STATE: OVP_ERROR\n");
146 smState = OVP_ERROR;
147 }
148
149 if (CHIP_TEMPERATURE_GetTemp() > 80)
150 {
151 RELAIS_ResetPuls();
152 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
153 LEDS_GN_Off();
154 LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_TEMP, LED_RT_ON_TIME_WARN_TEMP, LED_GN_OFF_TIME, LED_GN_OFF_TIME *5); //Fehler Anzeigen
155 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
156 printf("NEW_STATE: MAINSWITCH_ERROR, Temp too high\n");
157 smState = OVP_ERROR;
158 }
159
160
161 //OVP oder OVP hat stattgefunden, und Relais ist ein, dann aus
162 if ((ovpInput == 1) && (RELAIS_GetState() == 1))
163 {
164 RELAIS_ResetPuls();
165 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
166 LEDS_GN_Off();
167 printf("OVP OFF!\n");
168 printf("NEW_STATE: OVP_Auto On, Relais off\n");
169
170 }
171
172 //KEIN OVP und keine OVP Abschaltung, Relais ist aber noch aus, dann einschalten
173 if ((ovpInput == 0) && (RELAIS_GetState() == 0))
174 {
175 RELAIS_SetPuls();
176 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Warnung
177 LEDS_GN_Off();
178 LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME);
179 printf("OVP ON!\n");
180 printf("NEW_STATE: OVP_OVP_Auto On, Relais on\n");
181
182 }
183
184 // Prüfe Wechsel in off mode
185 if (BUTTON_GetMode() == BUTTON_OFF)
186 {
187 //Ausschalten muss immer möglich sein
188 RELAIS_ResetPuls();
189 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Bestätigung
190 LEDS_GN_Off();
191 LEDS_RT_Off();
192 printf("NEW_STATE: OVP_OFF\n");
193 smState = OVP_OFF;
194 //Damit beim drücken auf on erstmal eingeschaltet wird
195 ovpTimeCounter=0;
196 ovpInput = 0;
197 }
198
199
200}
201
202static void OVP_SM_ManualOn(void)
203{
204 // Prüfe Wechsel in off mode
205 if (BUTTON_GetMode() == BUTTON_OFF)
206 {
207 //Ausschalten muss immer möglich sein
208 RELAIS_ResetPuls();
209 BUZZER_Alarm_Stop();
210 LEDS_GN_Off();
211 LEDS_RT_Off();
212 printf("NEW_STATE: OVP_OFF\n");
213 smState = OVP_OFF;
214 }
215
216}
217
218static void OVP_SM_Error(void)
219{
220 int faultInput;
221 int ovpAndOvpInput;
222
223 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)
224 {
225 faultInput = 1;
226 }
227 else
228 {
229 faultInput = 0;
230 }
231
232
233
234 //Prüfe auf Wechsel des Modus AUTO / SM ON
235 if (BUTTON_GetMode() == BUTTON_AUTO)
236 {
237 if (faultInput == 0)
238 {
239 RELAIS_SetPuls();
240 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM);
241 LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME);
242 LEDS_RT_Off(); //Fehler löschen
243 printf("NEW_STATE: OVP_ON\n");
244 smState = OVP_ON;
245 }
246 else
247 {
248 //Wechsel nicht möglich. Fehler Eingang weiterhin aktiv
249 BUZZER_Beep(BUZZER_ON_TIME_REJECT);
250 BUTTON_SetModeOff();
251 }
252 }
253
254 //Prüfe auf Wechsel in MANUAL ON Mode
255 //Keine Fehlerüberprüfungen. In diesem Modus werdem alle Alarme ignoriert.
256 if (BUTTON_GetMode() == BUTTON_MANUAL_ON)
257 {
258
259 RELAIS_SetPuls();
260 BUZZER_Alarm_Start(BUZZER_ON_TIME_ALARM_MANUAL_MODE, BUZZER_OFF_TIME);
261 LEDS_GN_On();
262 LEDS_RT_Off();
263 LEDS_RT_BlinkCode_Start(BLINK_CODE_WARN_MANUAL, LED_RT_ON_TIME_WARN_MANUAL_MODE, LED_RT_OFF_TIME, LED_RT_OFF_TIME *5); //Fehler Anzeigen
264 printf("NEW_STATE: OVP_MANUAL_ON\n");
265 smState = OVP_MANUAL_ON;
266 }
267
268
269
270}
271
272
273
274void MODE_OVP_Exec(void)
275{
276
277
278
279 switch (smState)
280 {
281 case OVP_OFF:
282 OVP_SM_Off();
283 break;
284
285 case OVP_ON:
286 OVP_SM_On();
287 break;
288
289 case OVP_MANUAL_ON:
290 OVP_SM_ManualOn();
291 break;
292
293 case OVP_ERROR:
294 OVP_SM_Error();
295 break;
296
297 default:
298 break;
299 }
300}
301
302
Note: See TracBrowser for help on using the repository browser.