Changeset 24 for trunk/firmware_v2/SES/src/mode_lvp.c
- Timestamp:
- Aug 23, 2025, 3:27:52 PM (4 days ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/firmware_v2/SES/src/mode_lvp.c
r17 r24 1 1 2 // Dieser Modus ist ein Hauptschaltermodus mit Secondary Protection 3 // Secondary Protection löst aus, wenn OVP und LVP wegfällt. 4 // OVP und LVP fällt wegbei: 5 // - Sehr tiefe Entladung 6 // - Sehr hohe Spannung 7 // - Übertemperatur 8 // - je nach Liproeinstellung möglicherweise auch wenn sowohl Untertemperaturschutz für Ladung und für Last erreicht ist 9 // - je nach Liproeinstellung möglicherweise auch wenn sowohl Überttemperaturschutz für Ladung und für Last erreicht ist 10 // - Die letzten beiden Positionen können vielleicht ungewollt sein. 11 12 // OVP UND LVP Signal gleichzeitig: 13 // Es wurde eine Verzögerung von ca. 30 Sekunden implementiert. So kann noch problemlos ein Testjumper auf die Lipro gesteckt werden und die 14 // einzelnennen Funktionen zu prüfen. Außerdem ist es eventuell für die Prametrierung hilfreich, wenn nicht sofort ausgeht 15 // Auch wäre es hilfreich um zum Beispiel die Ursache über Modbus abfragen heruas zu bekommen 16 17 // 18 // Fault Input: 19 // Hier ohne Verzögerung um schnell auf kurzschluss reagieren zu können 20 // Ansonsten wie Modus 0 2 // Wie LVP||OVP Modul 3 // Jedoch hier nur LVP 21 4 22 5 … … 29 12 #include "leds.h" 30 13 #include "buzzer.h" 31 14 #include "chip_temperature.h" 32 15 33 16 … … 47 30 { 48 31 int faultInput; 49 int lvpInput; 32 50 33 51 34 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET) … … 58 41 } 59 42 60 if (HAL_GPIO_ReadPin(GPIO_INPUT_LVP_GPIO_Port, GPIO_INPUT_LVP_Pin) == GPIO_PIN_SET)61 {62 lvpInput = 1;63 }else {64 lvpInput = 0;65 }66 43 67 44 … … 76 53 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); 77 54 LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME); 78 printf(" NEW_STATE: SECONDARYPROTECTION_ON\n");55 printf("LVP_SM_Off: NEW_STATE: LVP_ON\n"); 79 56 smState = LVP_ON; 80 57 … … 87 64 //LEDS_RT_Blink_Start(LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_GN_OFF_TIME); //Fehler Anzeigen 88 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 89 printf(" NEW_STATE: SECONDARYPROTECTION_ERROR\n");66 printf("LVP_SM_Off: NEW_STATE: LVP_ERROR_FAULT_INPUT\n"); 90 67 smState =LVP_ERROR; 91 68 } … … 102 79 LEDS_GN_On(); 103 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 104 printf("NEW_STATE: SECONDARYPROTECTION_MANUAL_ON\n");81 printf("NEW_STATE: LVP_MANUAL_ON\n"); 105 82 smState = LVP_MANUAL_ON; 106 83 } … … 113 90 { 114 91 int faultInput = 0; 115 int lvpInput = 0;116 static int lvp InputTimeCounter = 0;92 static int lvpInput = 0; 93 static int lvpTimeCounter = 0; 117 94 static int oldtime; 118 95 … … 126 103 } 127 104 128 if ( HAL_GPIO_ReadPin(GPIO_INPUT_LVP_GPIO_Port, GPIO_INPUT_LVP_Pin) == GPIO_PIN_RESET)105 if ((HAL_GPIO_ReadPin(GPIO_INPUT_LVP_GPIO_Port, GPIO_INPUT_LVP_Pin) == GPIO_PIN_SET) || (HAL_GPIO_ReadPin(GPIO_INPUT_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_SET)) 129 106 { 130 107 if (HAL_GetTick() != oldtime) 131 108 { 132 lvpInputTimeCounter++;133 if (lvp InputTimeCounter > 30000)109 if (lvpTimeCounter < 5000) lvpTimeCounter++; 110 if (lvpTimeCounter >= 5000) 134 111 { 135 lvpInput = 0;136 lvp InputTimeCounter=0;112 lvpInput = 1; 113 lvpTimeCounter=0; 137 114 } 138 115 oldtime = HAL_GetTick(); 139 116 } 140 117 } 141 else 142 { 143 lvpInputTimeCounter = 0; 144 lvpInput = 1; 118 119 if (HAL_GPIO_ReadPin(GPIO_INPUT_LVP_GPIO_Port, GPIO_INPUT_LVP_Pin) == GPIO_PIN_RESET) 120 { 121 // if (HAL_GetTick() != oldtime) 122 // { 123 // lvpAndOvpInputTimeCounter++; 124 // if (lvpAndOvpInputTimeCounter > 30000) 125 // { 126 lvpInput = 0; 127 lvpTimeCounter=0; 128 // } 129 // oldtime = HAL_GetTick(); 130 // } 145 131 } 146 132 147 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: LVP_ERROR\n"); 146 smState = LVP_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 = LVP_ERROR; 158 } 159 160 161 //LVP oder OVP hat stattgefunden, und Relais ist ein, dann aus 162 if ((lvpInput == 1) && (RELAIS_GetState() == 1)) 163 { 164 RELAIS_ResetPuls(); 165 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung 166 LEDS_GN_Off(); 167 LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_OVP_LVP, LED_RT_ON_TIME_WARN_OVP_AND_LVP_INPUT, LED_RT_OFF_TIME, LED_RT_OFF_TIME *5); //Fehler Anzeigen 168 printf("LVP OFF!\n"); 169 printf("NEW_STATE: LVP_Auto On, Relais off\n"); 170 171 } 172 173 //KEIN LVP und keine OVP Abschaltung, Relais ist aber noch aus, dann einschalten 174 if ((lvpInput == 0) && (RELAIS_GetState() == 0)) 175 { 176 RELAIS_SetPuls(); 177 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Warnung 178 LEDS_GN_Off(); 179 LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME); 180 printf("LVP ON!\n"); 181 printf("NEW_STATE: LVP_OVP_Auto On, Relais on\n"); 182 183 } 148 184 149 185 // Prüfe Wechsel in off mode … … 155 191 LEDS_GN_Off(); 156 192 LEDS_RT_Off(); 157 printf("NEW_STATE: SECONDARYPROTECTION_OFF\n");193 printf("NEW_STATE: LVP_OFF\n"); 158 194 smState = LVP_OFF; 159 } 160 161 //Prüfe auf Fehlermode 162 if (faultInput == 1) 163 { 164 RELAIS_ResetPuls(); 165 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung 166 LEDS_GN_Off(); 167 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 168 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 169 printf("FAULT INPUT EVENT DETECTED!\n"); 170 printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n"); 171 smState = LVP_ERROR; 172 } 173 174 if ((lvpInput == 0) && ( RELAIS_GetState() == 1)) 175 { 176 RELAIS_ResetPuls(); 177 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung 178 LEDS_GN_Off(); 179 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 180 printf("LVP FALLING EVENT DETECTED!\n"); 181 printf("NEW_STATE: LVP OFF\n"); 182 } 183 184 185 //Einkommentieren für auto Reconnect 186 //if ((lvpInput == 1) && ( RELAIS_GetState() == 0)) 187 //{ 188 // RELAIS_SetPuls(); 189 // BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Warnung 190 // LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME); 191 // BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 192 // printf("BMS SECONDARY PROTECTION FAULT EVENT DETECTED (LVP & OVP )!\n"); 193 // printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n"); 194 //} 195 //Damit beim drücken auf on erstmal eingeschaltet wird 196 lvpTimeCounter=0; 197 lvpInput = 0; 198 } 195 199 196 200 … … 259 263 LEDS_RT_Off(); 260 264 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 261 printf("NEW_STATE: SECONDARYPROTECTION_MANUAL_ON\n");265 printf("NEW_STATE: LVP_MANUAL_ON\n"); 262 266 smState = LVP_MANUAL_ON; 263 267 } … … 277 281 { 278 282 case LVP_OFF: 279 283 LVP_SM_Off(); 280 284 break; 281 285
Note: See TracChangeset
for help on using the changeset viewer.