Ignore:
Timestamp:
Nov 1, 2025, 5:04:26 PM (30 hours ago)
Author:
f.jahn
Message:
  • Auto Restart mode implementiert
  • IWDG implementiert
  • 24V Kompiler Version implementiert
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/firmware_v2/SES/src/mode_secondaryprotection.c

    r28 r29  
    4141} SECONDARYPROTECTION_state_t;
    4242
     43typedef enum SECONDARYPROTECTION_ErrorState_enum
     44{
     45  ERROR_NONE,
     46  ERROR_EXTERNAL_FAULT, //z.B Kurzschluss
     47  ERROR_TEMPERATURE,
     48  ERROR_VOLTAGE_DROP,
     49  ERROR_LVP_AND_OVP,      //z.B. kritische Überspannung, tiefeEntladung
     50} SECONDARYPROTECTION_ErrorState_t;
     51
    4352
    4453static SECONDARYPROTECTION_state_t smState;
     54static SECONDARYPROTECTION_ErrorState_t smError;
     55static int autoRetryMode;
    4556
    4657
     
    7990      printf("NEW_STATE: SECONDARYPROTECTION_ON\n");
    8091      smState = SECONDARYPROTECTION_ON;
     92          smError = ERROR_NONE;
    8193
    8294    }
     
    90102      printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n");
    91103      smState =SECONDARYPROTECTION_ERROR;
     104          smError = ERROR_EXTERNAL_FAULT;
    92105    }
    93106  }
     
    105118      printf("NEW_STATE: SECONDARYPROTECTION_MANUAL_ON\n");
    106119      smState = SECONDARYPROTECTION_MANUAL_ON;
     120          smError = ERROR_NONE;
    107121  }
    108122
     
    120134  if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)       
    121135  {   
    122         HAL_Delay(1); // Verzögerung 1ms damit eventuell noch zuerst durch smartPro der Strom gestoppt werden kann
    123         if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)       
    124         {
    125136          faultInput = 1;
    126         }
    127 
     137          RELAIS_ResetPuls();
     138      BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
     139      LEDS_GN_Off();
     140      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
     141      BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
     142      printf("FAULT INPUT EVENT DETECTED!\n");
     143      printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n");
     144      smState = SECONDARYPROTECTION_ERROR;
     145          smError = ERROR_EXTERNAL_FAULT;
    128146  }
    129147  else
     
    176194          printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n");
    177195          smState = SECONDARYPROTECTION_ERROR; 
     196          smError = ERROR_VOLTAGE_DROP;
    178197          VOLTAGE_MEAS_ResetCounter(); // Damit Fehlerzähler bei Neustart auf 0
    179198  }
    180199
     200
     201
     202  if (lvpAndOvpInput == 1)
     203  {
     204    RELAIS_ResetPuls();
     205    BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
     206    LEDS_GN_Off();
     207    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
     208    BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
     209    printf("BMS SECONDARY PROTECTION FAULT EVENT DETECTED (LVP & OVP )!\n");
     210    printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n");
     211    smState = SECONDARYPROTECTION_ERROR;
     212        smError = ERROR_LVP_AND_OVP;
     213  }
     214
     215  if (CHIP_TEMPERATURE_GetTemp() > 80)
     216  {
     217        RELAIS_ResetPuls();
     218        BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
     219        LEDS_GN_Off();
     220        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
     221        BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
     222        printf("NEW_STATE: MAINSWITCH_ERROR, Temp too high\n");
     223        smState = SECONDARYPROTECTION_ERROR;         
     224        smError = ERROR_TEMPERATURE;
     225  }
     226
     227
     228
     229}
     230
     231static void SECONDARYPROTECTION_SM_ManualOn(void)
     232{
     233
     234  int faultInput = 0;
     235
     236
     237  if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)       
     238  {   
     239          faultInput = 1;
     240  }
     241  else
     242  {
     243    faultInput = 0;
     244  }
    181245
    182246  if (faultInput == 1)
     
    190254    printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n");
    191255    smState = SECONDARYPROTECTION_ERROR;
    192   }
    193 
    194   if (lvpAndOvpInput == 1)
    195   {
    196     RELAIS_ResetPuls();
    197     BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
    198     LEDS_GN_Off();
    199     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
    200     BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
    201     printf("BMS SECONDARY PROTECTION FAULT EVENT DETECTED (LVP & OVP )!\n");
    202     printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n");
    203     smState = SECONDARYPROTECTION_ERROR;
    204   }
    205 
    206   if (CHIP_TEMPERATURE_GetTemp() > 80)
    207   {
    208         RELAIS_ResetPuls();
    209         BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
    210         LEDS_GN_Off();
    211         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
    212         BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
    213         printf("NEW_STATE: MAINSWITCH_ERROR, Temp too high\n");
    214         smState = SECONDARYPROTECTION_ERROR;         
    215   }
    216 
    217 
    218 
    219 }
    220 
    221 static void SECONDARYPROTECTION_SM_ManualOn(void)
    222 {
    223 
    224   int faultInput = 0;
    225 
    226 
    227   if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)       
    228   {   
    229         HAL_Delay(500); // Verzögerung 500ms damit eventuell noch zuerst durch smartPro der Strom gestoppt werden kann
    230         if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)       
    231         {
    232           faultInput = 1;
    233         }
    234 
    235   }
    236   else
    237   {
    238     faultInput = 0;
    239   }
    240 
    241   if (faultInput == 1)
    242   {
    243     RELAIS_ResetPuls();
    244     BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
    245     LEDS_GN_Off();
    246     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
    247     BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
    248     printf("FAULT INPUT EVENT DETECTED!\n");
    249     printf("NEW_STATE: SECONDARYPROTECTION_ERROR\n");
    250     smState = SECONDARYPROTECTION_ERROR;
     256        smError = ERROR_EXTERNAL_FAULT;
    251257  }
    252258
     
    262268    printf("NEW_STATE: SECONDARYPROTECTION_OFF\n");
    263269    smState = SECONDARYPROTECTION_OFF;
     270        smError = ERROR_NONE;
    264271  }
    265272
     
    270277  int faultInput;
    271278  int lvpAndOvpInput;
     279  static uint32_t retry_counter = 0;
     280  static uint32_t oldTimeMSTick;
    272281
    273282  if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)       
     
    293302      printf("NEW_STATE: SECONDARYPROTECTION_ON\n");
    294303      smState = SECONDARYPROTECTION_ON;
     304          smError = ERROR_NONE;
    295305    }
    296306    else
     
    314324      printf("NEW_STATE: SECONDARYPROTECTION_MANUAL_ON\n");
    315325      smState = SECONDARYPROTECTION_MANUAL_ON;
    316   }
    317 
    318 
    319 
    320 }
    321 
    322 
    323 
    324 void MODE_SECONDARYPROTECTION_Exec(void)
    325 {
    326 
    327  
     326          smError = ERROR_NONE;
     327  }
     328
     329
     330  if (autoRetryMode == 1) {
     331
     332    if (oldTimeMSTick != HAL_GetTick())
     333    {
     334        oldTimeMSTick = HAL_GetTick();
     335        retry_counter++;
     336    }
     337
     338    if  (retry_counter > 3600000)  // 10 Minuten * 60 * 1000 = 600000 || 60 * 60 * 1000 =3600000
     339    {
     340        BUTTON_SetModeAuto();
     341        retry_counter=0;
     342    }
     343  }
     344}
     345
     346
     347
     348void MODE_SECONDARYPROTECTION_Exec(int am)
     349{
     350
     351        autoRetryMode = am;
    328352
    329353  switch (smState)
Note: See TracChangeset for help on using the changeset viewer.