source: trunk/firmware_v2/SES/src/mode_mainswitch.c @ 24

Last change on this file since 24 was 24, checked in by f.jahn, 4 days ago
LVP, OVP, LVP
OVP modes implementiert
  • Lüftersteuerung in eigenes Modul verlagert
File size: 5.6 KB
Line 
1// Keine LVP und OVP Überwachung aber Fault wird geprüft!
2// Falls nicht benötigt, nicht anschließen ?! Ist Low active mit PullUp
3// Dieser Modus ist als Hauptschaltermodus ohne BMS gedacht. Z.B. für Bleibatterien
4// Oder als Hauptschalter mit Fremd BMS
5
6
7
8#include "stdio.h"
9#include "mode_mainswitch.h"
10#include "button.h"
11#include "relais.h"
12#include "main.h"
13#include "leds.h"
14#include "buzzer.h"
15#include "chip_temperature.h"
16
17
18typedef enum MAINSWITCH_State_enum
19{
20  MAINSWITCH_OFF, 
21  MAINSWITCH_ON,
22  MAINSWITCH_MANUAL_ON, 
23  MAINSWITCH_ERROR
24} MAINSWITCH_state_t;
25
26
27static MAINSWITCH_state_t smState;
28
29
30void MAINSWITCH_SM_Off(void)
31{
32  int faultInput;
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  //Prüfe auf Wechsel des Modus AUTO / SM ON
46  if (BUTTON_GetMode() == BUTTON_AUTO)
47  {
48    if (faultInput == 0)
49    {
50      RELAIS_SetPuls();
51      BUZZER_Beep(BUZZER_ON_TIME_CONFIRM);
52      LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME);
53      printf("NEW_STATE: MAINSWITCH_ON\n");
54      smState = MAINSWITCH_ON;
55
56    }
57    else
58    {
59      //Wechsel nicht möglich. Fehler Eingang aktiv
60      BUZZER_Beep(BUZZER_ON_TIME_REJECT);
61      BUTTON_SetModeOff();
62      LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_FAULT_INPUT, LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_GN_OFF_TIME, LED_GN_OFF_TIME *5); //Fehler Anzeigen
63      printf("NEW_STATE: MAINSWITCH_ERROR\n");
64      smState = MAINSWITCH_ERROR;
65    }
66  }
67
68  //Prüfe auf Wechsel in MANUAL ON Mode
69  //Keine Fehlerüberprüfungen. In diesem Modus werdem alle Alarme ignoriert.
70  if (BUTTON_GetMode() == BUTTON_MANUAL_ON)
71  {
72     
73      RELAIS_SetPuls();
74      BUZZER_Alarm_Start(BUZZER_ON_TIME_ALARM_MANUAL_MODE, BUZZER_OFF_TIME);
75      LEDS_GN_On();
76      LEDS_RT_BlinkCode_Start(BLINK_CODE_WARN_MANUAL, LED_RT_ON_TIME_WARN_MANUAL_MODE, LED_GN_OFF_TIME, LED_GN_OFF_TIME *5); //Fehler Anzeigen
77      printf("NEW_STATE: MAINSWITCH_MANUAL_ON\n");
78      smState = MAINSWITCH_MANUAL_ON;
79  }
80
81
82
83}
84
85void MAINSWITCH_SM_On(void)
86{
87  int faultInput;
88  if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)       
89  {
90    faultInput = 1;
91  }
92  else
93  {
94    faultInput = 0;
95  }
96 
97
98  // Prüfe Wechsel in off mode
99  if (BUTTON_GetMode() == BUTTON_OFF)
100  {
101    //Ausschalten muss immer möglich sein
102    RELAIS_ResetPuls();
103    BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Bestätigung
104    LEDS_GN_Off();
105    LEDS_RT_Off();
106    printf("NEW_STATE: MAINSWITCH_OFF\n");
107    smState = MAINSWITCH_OFF;
108  }
109
110  //Prüfe auf Fehlermode
111  if (faultInput == 1)
112  {
113    RELAIS_ResetPuls();
114    BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
115    LEDS_GN_Off();
116    LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_FAULT_INPUT, LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_GN_OFF_TIME, LED_GN_OFF_TIME *5); //Fehler Anzeigen
117    BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
118    printf("NEW_STATE: MAINSWITCH_ERROR\n");
119    smState = MAINSWITCH_ERROR;
120  }
121
122          if (CHIP_TEMPERATURE_GetTemp() > 80)
123          {
124        RELAIS_ResetPuls();
125        BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
126        LEDS_GN_Off();
127        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
128        BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
129        printf("NEW_STATE: MAINSWITCH_ERROR, Temp too high\n");
130        smState = MAINSWITCH_ERROR;         
131          }
132
133
134
135
136}
137
138void MAINSWITCH_SM_ManualOn(void)
139{
140  // Prüfe Wechsel in off mode
141  if (BUTTON_GetMode() == BUTTON_OFF)
142  {
143    //Ausschalten muss immer möglich sein
144    RELAIS_ResetPuls();
145    BUZZER_Alarm_Stop();
146    LEDS_GN_Off();
147    LEDS_RT_Off();
148    printf("NEW_STATE: MAINSWITCH_OFF\n");
149    smState = MAINSWITCH_OFF;
150  }
151
152}
153
154void MAINSWITCH_SM_Error(void)
155{
156  int faultInput;
157
158  if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)       
159  {
160    faultInput = 1;
161  }
162  else
163  {
164    faultInput = 0;
165  }
166 
167
168  //Prüfe auf Wechsel des Modus AUTO / SM ON
169  if (BUTTON_GetMode() == BUTTON_AUTO)
170  {
171    if (faultInput == 0)
172    {
173      RELAIS_SetPuls();
174      BUZZER_Beep(BUZZER_ON_TIME_CONFIRM);
175      LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME);
176      LEDS_RT_Off(); //Fehler löschen
177      printf("NEW_STATE: MAINSWITCH_ON\n");
178      smState = MAINSWITCH_ON;
179    }
180    else
181    {
182      //Wechsel nicht möglich. Fehler Eingang aktiv
183      BUZZER_Beep(BUZZER_ON_TIME_REJECT);
184      BUTTON_SetModeOff();
185    }
186  }
187
188  //Prüfe auf Wechsel in MANUAL ON Mode
189  //Keine Fehlerüberprüfungen. In diesem Modus werdem alle Alarme ignoriert.
190  if (BUTTON_GetMode() == BUTTON_MANUAL_ON)
191  {
192     
193      RELAIS_SetPuls();
194      BUZZER_Alarm_Start(BUZZER_ON_TIME_ALARM_MANUAL_MODE, BUZZER_OFF_TIME);
195      LEDS_GN_On();
196      LEDS_RT_Off();
197      LEDS_RT_BlinkCode_Start(BLINK_CODE_WARN_MANUAL, LED_RT_ON_TIME_WARN_MANUAL_MODE, LED_GN_OFF_TIME, LED_GN_OFF_TIME *5); //Fehler Anzeigen
198      printf("NEW_STATE: MAINSWITCH_MANUAL_ON\n");
199      smState = MAINSWITCH_MANUAL_ON;
200  }
201
202
203
204}
205
206
207
208void MODE_MAINSWITCH_Exec(void)
209{
210
211 
212
213  switch (smState)
214  {
215    case MAINSWITCH_OFF:
216      MAINSWITCH_SM_Off();
217    break;
218
219    case MAINSWITCH_ON:
220      MAINSWITCH_SM_On();
221    break;
222
223    case MAINSWITCH_MANUAL_ON:
224      MAINSWITCH_SM_ManualOn();
225    break;
226
227    case MAINSWITCH_ERROR:
228      MAINSWITCH_SM_Error();
229    break;
230
231    default:
232    break;
233  }
234}
235
236
Note: See TracBrowser for help on using the repository browser.