Changeset 24 for trunk/firmware_v2/SES/src/mode_ovp.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_ovp.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 OVP||OVP Modul 3 // Jedoch hier nur OVP 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 ovpInput; 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_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_SET)61 {62 ovpInput = 1;63 }else {64 ovpInput = 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: LVP_ON\n");55 printf("OVP_SM_Off: NEW_STATE: OVP_ON\n"); 79 56 smState = OVP_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: LVP_ERROR\n");90 smState = 66 printf("OVP_SM_Off: NEW_STATE: OVP_ERROR_FAULT_INPUT\n"); 67 smState =OVP_ERROR; 91 68 } 92 69 } … … 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: LVP_MANUAL_ON\n");81 printf("NEW_STATE: OVP_MANUAL_ON\n"); 105 82 smState = OVP_MANUAL_ON; 106 83 } … … 113 90 { 114 91 int faultInput = 0; 115 int ovpInput = 0;116 static int ovp InputTimeCounter = 0;92 static int ovpInput = 0; 93 static int ovpTimeCounter = 0; 117 94 static int oldtime; 118 95 … … 126 103 } 127 104 128 if ( HAL_GPIO_ReadPin(GPIO_INPUT_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_RESET)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)) 129 106 { 130 107 if (HAL_GetTick() != oldtime) 131 108 { 132 ovpInputTimeCounter++;133 if (ovp InputTimeCounter > 30000)109 if (ovpTimeCounter < 5000) ovpTimeCounter++; 110 if (ovpTimeCounter >= 5000) 134 111 { 135 ovpInput = 0;136 ovp InputTimeCounter=0;112 ovpInput = 1; 113 ovpTimeCounter=0; 137 114 } 138 115 oldtime = HAL_GetTick(); 139 116 } 140 117 } 141 else 142 { 143 ovpInputTimeCounter = 0; 144 ovpInput = 1; 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 // } 145 131 } 146 132 147 133 148 134 149 // Prüfe Wechsel in off mode150 if (BUTTON_GetMode() == BUTTON_OFF)151 {152 //Ausschalten muss immer möglich sein153 RELAIS_ResetPuls();154 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Bestätigung155 LEDS_GN_Off();156 LEDS_RT_Off();157 printf("NEW_STATE: LVP_OFF\n");158 smState = OVP_OFF;159 }160 135 161 136 //Prüfe auf Fehlermode … … 172 147 } 173 148 174 if ((ovpInput == 0) && ( RELAIS_GetState() == 1)) 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)) 175 163 { 176 164 RELAIS_ResetPuls(); 177 165 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung 178 LEDS_GN_Off(); 179 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird180 printf(" OVP Falling )!\n");181 printf("NEW_STATE: OVP AUTO, Relais off\n");182 } 183 184 185 if ((ovpInput == 1) && (RELAIS_GetState() == 0))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)) 186 174 { 187 175 RELAIS_SetPuls(); 188 176 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Warnung 189 LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME*5); 190 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 191 printf("OVP RISING!\n"); 192 printf("NEW_STATE: OVP AUTO, Relais off\n"); 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; 193 197 } 194 198 … … 206 210 LEDS_GN_Off(); 207 211 LEDS_RT_Off(); 208 printf("NEW_STATE: SECONDARYPROTECTION_OFF\n");212 printf("NEW_STATE: OVP_OFF\n"); 209 213 smState = OVP_OFF; 210 214 } … … 215 219 { 216 220 int faultInput; 217 221 int ovpAndOvpInput; 218 222 219 223 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET) … … 276 280 { 277 281 case OVP_OFF: 278 282 OVP_SM_Off(); 279 283 break; 280 284
Note: See TracChangeset
for help on using the changeset viewer.