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

Last change on this file since 27 was 24, checked in by f.jahn, 4 months 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.