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

Last change on this file was 24, checked in by f.jahn, 4 days ago
LVP, OVP, LVP
OVP modes implementiert
  • Lüftersteuerung in eigenes Modul verlagert
File size: 7.0 KB
RevLine 
[17]1
[24]2// Wie OVP||OVP Modul
3// Jedoch hier nur OVP
[17]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"
[24]14#include "chip_temperature.h"
[17]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
[24]33
[17]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);
[24]55      printf("OVP_SM_Off: NEW_STATE: OVP_ON\n");
[17]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
[24]66      printf("OVP_SM_Off: NEW_STATE: OVP_ERROR_FAULT_INPUT\n");
67      smState =OVP_ERROR;
[17]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
[24]81      printf("NEW_STATE: OVP_MANUAL_ON\n");
[17]82      smState = OVP_MANUAL_ON;
83  }
84
85
86
87}
88
89static void OVP_SM_On(void)
90{
91  int faultInput = 0;
[24]92  static int ovpInput = 0;
93  static int ovpTimeCounter = 0;
[17]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 
[24]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))
[17]106  {
107    if (HAL_GetTick() != oldtime)
108    {
[24]109      if (ovpTimeCounter < 5000) ovpTimeCounter++;
110      if (ovpTimeCounter >= 5000)
[17]111      {
[24]112        ovpInput = 1;
113        ovpTimeCounter=0;
[17]114      }
115      oldtime = HAL_GetTick();
116    }
117  }
[24]118
119  if (HAL_GPIO_ReadPin(GPIO_INPUT_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_RESET) 
[17]120  {
[24]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//    }
[17]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
[24]149    if (CHIP_TEMPERATURE_GetTemp() > 80)
[17]150  {
[24]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  {
[17]164    RELAIS_ResetPuls();
165    BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
[24]166    LEDS_GN_Off();   
167    printf("OVP OFF!\n");
168    printf("NEW_STATE: OVP_Auto On, Relais off\n");
169   
[17]170  }
171
[24]172  //KEIN OVP und keine OVP Abschaltung, Relais ist aber noch aus, dann einschalten
173  if ((ovpInput == 0) && (RELAIS_GetState() == 0))
[17]174  {
175    RELAIS_SetPuls();
176    BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Warnung
[24]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   
[17]182  }
183
[24]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  }
[17]198
[24]199
[17]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();
[24]212    printf("NEW_STATE: OVP_OFF\n");
[17]213    smState = OVP_OFF;
214  }
215
216}
217
218static void OVP_SM_Error(void)
219{
220  int faultInput;
[24]221  int ovpAndOvpInput;
[17]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:
[24]282     OVP_SM_Off();
[17]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.