Changeset 24 for trunk/firmware_v2/SES/src
- Timestamp:
- Aug 23, 2025, 3:27:52 PM (4 days ago)
- Location:
- trunk/firmware_v2/SES/src
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/firmware_v2/SES/src/chip_temperature.c
r23 r24 25 25 uint32_t calTemperatureSensor30Value; // Kalibrierungswert für den Temperatursensor auf dem STM32G0 (Werksmäßig im SCB Bereich gespeichert wird beim Programmstart ausgelesen) 26 26 // Daten Temperaturanzeige µProzessor 27 27 int32_t temp; 28 28 // --- LOKALE FUNKTIONS PROTOTYPEN ---------------------------------------------- 29 29 … … 56 56 } 57 57 58 int CHIP_TEMPERATURE_Exec(uint32_t chiptemperature)58 void CHIP_TEMPERATURE_Exec(uint32_t adcValue) 59 59 { 60 int32_t temp;60 61 61 //Aktuelle Spannung am Temp Sensor 62 temp = (3300 * (uint32_t) chiptemperature) / 65536;62 temp = (3300 * (uint32_t)adcValue) / 65536; 63 63 64 64 … … 67 67 temp = temp / 2.530; //2,53mV/°C 68 68 temp = temp + 25; //30000 da Erste Kalibrierpunkt bei 25°C --> 25 69 return temp; 70 //Durch 10 teilen, damit es in 16 Bit signed modbus register passt 69 71 70 } 71 72 int CHIP_TEMPERATURE_GetTemp(void) 73 { 74 return temp; 75 } 76 72 77 73 78 //------------------------------------------------------------------------------ -
trunk/firmware_v2/SES/src/main.c
r23 r24 32 32 #include "relais.h" 33 33 #include "leds.h" 34 #include "fan.h" 34 35 #include "chip_temperature.h" 35 36 #include "modeswitch.h" … … 141 142 142 143 144 145 extern uint32_t frequency, ic_overflows; 146 ic_overflows = 0U; 147 __HAL_TIM_SetCounter(&htim16, 0U); 148 149 HAL_TIM_Base_Start_IT(&htim16); 150 HAL_TIM_IC_Start_IT(&htim16, TIM_CHANNEL_1); 151 int oldcaptureValue=0; 152 153 143 154 /* USER CODE END 2 */ 144 155 … … 166 177 { 167 178 msCounter = 0; 168 temperature =CHIP_TEMPERATURE_Exec(adcData[4]);169 170 if ( temperature > 50)179 CHIP_TEMPERATURE_Exec(adcData[4]); 180 temperature=CHIP_TEMPERATURE_GetTemp(); 181 if ( temperature > 50) 171 182 { 172 183 pwm++; … … 178 189 if (pwm > 0) pwm--; 179 190 } 180 SetFANSpeed(pwm); 181 182 183 if (temperature > 80) 184 { 185 186 187 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 188 LEDS_GN_Off(); 189 LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_TEMP, LED_RT_ON_TIME_WARN_TEMP, LED_RT_OFF_TIME, LED_RT_OFF_TIME *5); //Fehler Anzeigen 190 printf("Temperature too high!\n"); 191 192 } 193 194 // Starting measuring frequency of the FAN tacho output 195 static unsigned stage; 196 extern uint32_t freq, ic_overflows; 197 198 switch (stage) 199 { 200 case 0: 201 ic_overflows = 0U; 202 __HAL_TIM_SetCounter(&htim16, 0U); 203 HAL_TIM_Base_Start_IT(&htim16); 204 HAL_TIM_IC_Start_IT(&htim16, TIM_CHANNEL_1); 205 //printf("IC started\n"); 206 stage++; 207 break; 208 209 case 1: stage++; break; 210 case 2: stage++; break; 211 case 3: stage++; break; 212 case 4: stage++; break; 213 case 5: stage++; break; 214 case 6: 215 //printf("F = %u\n", freq); 216 if (!freq) 217 { 218 static unsigned zeroFreqCnt; 219 220 zeroFreqCnt++; 221 // Checking if we set last time non-zero FAN-speed, but 222 // tacho-sensor signal is absent more than 15 sec. 223 if (zeroFreqCnt > 3U && GetLastSpeed()) 224 { 225 SetFANSpeed(0U); 226 // ACHTUNG! Der Lüfter ist kaputt! 227 } 228 } 229 stage = 0; 230 break; 231 } 191 192 FAN_SetSpeed(pwm); 232 193 233 194 uin = VOLTAGE_MEAS_GetUin(); 234 195 uout = VOLTAGE_MEAS_GetUout(); 235 printf("uin= %d, uout=%d, temp=%d, pwm=%d, fan=%d\r\n", uin, uout, temperature,pwm,freq); 196 uint32_t rpm; 197 rpm = frequency / 2; 198 rpm = rpm * 60; 199 printf("uin= %d, uout=%d, temp=%d, pwm=%d, fan=%d\r\n", uin, uout, temperature,pwm,rpm); 236 200 237 201 … … 242 206 switch (MODESWITCH_GetMode()) 243 207 { 244 case MODE_MAINSWITCH: 208 case MODE_MAINSWITCH: //0 245 209 MODE_MAINSWITCH_Exec(); 246 210 break; 247 211 248 case MODE_MAINSWITCH_SECONDARYPROTECTION: 212 case MODE_MAINSWITCH_SECONDARYPROTECTION://1 249 213 MODE_SECONDARYPROTECTION_Exec(); 250 214 break; 251 215 252 case MODE_MAINSWITCH_SECONDARYPROTECTION_PLUS: 216 case MODE_MAINSWITCH_SECONDARYPROTECTION_PLUS://2 253 217 MODE_SECONDARYPROTECTION_PLUS_Exec(); 254 218 break; 255 219 256 case MODE_MAINSWITCH_LVP_OVP: 257 //MODE_LVP_OVP_Exec();258 break; 259 260 //case MODE_MAINSWITCH_LVP:261 //MODE_LVP_Exec();262 //break;263 264 //case MODE_MAINSWITCH_OVP:265 //MODE_OVP_Exec();266 //break;220 case MODE_MAINSWITCH_LVP_OVP://3 221 MODE_LVP_OVP_Exec(); 222 break; 223 224 case MODE_MAINSWITCH_LVP://4 225 MODE_LVP_Exec(); 226 break; 227 228 case MODE_MAINSWITCH_OVP://5 229 MODE_OVP_Exec(); 230 break; 267 231 268 232 -
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 -
trunk/firmware_v2/SES/src/mode_lvp_ovp.c
r17 r24 29 29 #include "leds.h" 30 30 #include "buzzer.h" 31 #include "chip_temperature.h" 31 32 32 33 … … 46 47 { 47 48 int faultInput; 48 int lvpOROvpInput; 49 49 50 50 51 if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET) … … 57 58 } 58 59 59 if ((HAL_GPIO_ReadPin(GPIO_INPUT_LVP_GPIO_Port, GPIO_INPUT_LVP_Pin) == GPIO_PIN_RESET) || (HAL_GPIO_ReadPin(GPIO_INPUT_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_RESET)) 60 { 61 lvpOROvpInput = 1; 62 }else { 63 lvpOROvpInput = 0; 64 } 65 66 60 67 61 68 62 … … 75 69 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); 76 70 LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME); 77 printf(" NEW_STATE: LVP_OVP_ON\n");71 printf("LVP_OVP_SM_Off: NEW_STATE: LVP_OVP_ON\n"); 78 72 smState = LVP_OVP_ON; 79 73 … … 86 80 //LEDS_RT_Blink_Start(LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_GN_OFF_TIME); //Fehler Anzeigen 87 81 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 88 printf(" NEW_STATE: LVP_OVP_ERROR\n");82 printf("LVP_OVP_SM_Off: NEW_STATE: LVP_OVP_ERROR_FAULT_INPUT\n"); 89 83 smState =LVP_OVP_ERROR; 90 84 } … … 112 106 { 113 107 int faultInput = 0; 114 int lvpOROvpInput = 0;108 static int lvpOROvpInput = 0; 115 109 static int lvpAndOvpInputTimeCounter = 0; 116 110 static int oldtime; … … 125 119 } 126 120 127 if ((HAL_GPIO_ReadPin(GPIO_INPUT_LVP_GPIO_Port, GPIO_INPUT_LVP_Pin) == GPIO_PIN_ RESET) || (HAL_GPIO_ReadPin(GPIO_INPUT_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_RESET))121 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)) 128 122 { 129 123 if (HAL_GetTick() != oldtime) 130 124 { 131 lvpAndOvpInputTimeCounter++; 132 if (lvpAndOvpInputTimeCounter > 30000) 133 { 134 lvpOROvpInput = 0; 135 lvpAndOvpInputTimeCounter=0; 136 } 137 oldtime = HAL_GetTick(); 138 } 139 } 140 141 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)) 142 { 143 if (HAL_GetTick() != oldtime) 144 { 145 lvpAndOvpInputTimeCounter++; 146 if (lvpAndOvpInputTimeCounter > 30000) 125 if (lvpAndOvpInputTimeCounter < 5000)lvpAndOvpInputTimeCounter++; 126 if (lvpAndOvpInputTimeCounter >= 5000) 147 127 { 148 128 lvpOROvpInput = 1; … … 153 133 } 154 134 135 if ((HAL_GPIO_ReadPin(GPIO_INPUT_LVP_GPIO_Port, GPIO_INPUT_LVP_Pin) == GPIO_PIN_RESET) && (HAL_GPIO_ReadPin(GPIO_INPUT_OVP_GPIO_Port, GPIO_INPUT_OVP_Pin) == GPIO_PIN_RESET)) 136 { 137 // if (HAL_GetTick() != oldtime) 138 // { 139 // lvpAndOvpInputTimeCounter++; 140 // if (lvpAndOvpInputTimeCounter > 30000) 141 // { 142 lvpOROvpInput = 0; 143 lvpAndOvpInputTimeCounter=0; 144 // } 145 // oldtime = HAL_GetTick(); 146 // } 147 } 148 155 149 156 150 157 // Prüfe Wechsel in off mode158 if (BUTTON_GetMode() == BUTTON_OFF)159 {160 //Ausschalten muss immer möglich sein161 RELAIS_ResetPuls();162 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Bestätigung163 LEDS_GN_Off();164 LEDS_RT_Off();165 printf("NEW_STATE: LVP_OVP_OFF\n");166 smState = LVP_OVP_OFF;167 }168 151 169 152 //Prüfe auf Fehlermode … … 180 163 } 181 164 182 if (lvpOROvpInput == 0) 165 if (CHIP_TEMPERATURE_GetTemp() > 80) 166 { 167 RELAIS_ResetPuls(); 168 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung 169 LEDS_GN_Off(); 170 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 171 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 172 printf("NEW_STATE: MAINSWITCH_ERROR, Temp too high\n"); 173 smState = LVP_OVP_ERROR; 174 } 175 176 177 //LVP oder OVP hat stattgefunden, und Relais ist ein, dann aus 178 if ((lvpOROvpInput == 1) && (RELAIS_GetState() == 1)) 183 179 { 184 180 RELAIS_ResetPuls(); … … 186 182 LEDS_GN_Off(); 187 183 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 188 printf("LVP OR OVP FALLING!\n");184 printf("LVP OR OVP OFF!\n"); 189 185 printf("NEW_STATE: LVP_OVP_Auto On, Relais off\n"); 190 186 191 187 } 192 188 193 if (lvpOROvpInput == 1) 189 //KEIN LVP und keine OVP Abschaltung, Relais ist aber noch aus, dann einschalten 190 if ((lvpOROvpInput == 0) && (RELAIS_GetState() == 0)) 194 191 { 195 192 RELAIS_SetPuls(); … … 197 194 LEDS_GN_Off(); 198 195 LEDS_GN_Blink_Start(LED_GN_ON_TIME_ON_MODE, LED_GN_OFF_TIME); 199 printf("LVP AND OVP RISING!\n");196 printf("LVP AND OVP ON!\n"); 200 197 printf("NEW_STATE: LVP_OVP_Auto On, Relais on\n"); 201 198 202 199 } 200 201 // Prüfe Wechsel in off mode 202 if (BUTTON_GetMode() == BUTTON_OFF) 203 { 204 //Ausschalten muss immer möglich sein 205 RELAIS_ResetPuls(); 206 BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Bestätigung 207 LEDS_GN_Off(); 208 LEDS_RT_Off(); 209 printf("NEW_STATE: LVP_OVP_OFF\n"); 210 smState = LVP_OVP_OFF; 211 //Damit beim drücken auf on erstmal eingeschaltet wird 212 lvpAndOvpInputTimeCounter=0; 213 lvpOROvpInput = 0; 214 } 215 203 216 204 217 } -
trunk/firmware_v2/SES/src/mode_mainswitch.c
r17 r24 13 13 #include "leds.h" 14 14 #include "buzzer.h" 15 #include "chip_temperature.h" 15 16 16 17 … … 119 120 } 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 121 135 122 136 } -
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 -
trunk/firmware_v2/SES/src/mode_secondaryprotection.c
r17 r24 30 30 #include "buzzer.h" 31 31 #include "voltage_meas.h" 32 #include "chip_temperature.h" 32 33 33 34 … … 198 199 } 199 200 201 if (CHIP_TEMPERATURE_GetTemp() > 80) 202 { 203 RELAIS_ResetPuls(); 204 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung 205 LEDS_GN_Off(); 206 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 207 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 208 printf("NEW_STATE: MAINSWITCH_ERROR, Temp too high\n"); 209 smState = SECONDARYPROTECTION_ERROR; 210 } 211 212 200 213 201 214 } -
trunk/firmware_v2/SES/src/mode_secondaryprotection_plus.c
r17 r24 22 22 #include "leds.h" 23 23 #include "buzzer.h" 24 #include "chip_temperature.h" 24 25 #include "voltage_meas.h" 25 26 … … 190 191 smState = SECONDARYPROTECTION_ERROR; 191 192 } 193 194 if (CHIP_TEMPERATURE_GetTemp() > 80) 195 { 196 RELAIS_ResetPuls(); 197 BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung 198 LEDS_GN_Off(); 199 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 200 BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird 201 printf("NEW_STATE: MAINSWITCH_ERROR, Temp too high\n"); 202 smState = SECONDARYPROTECTION_ERROR; 203 } 204 192 205 193 206
Note: See TracChangeset
for help on using the changeset viewer.