Ignore:
Timestamp:
Aug 23, 2025, 3:27:52 PM (4 days ago)
Author:
f.jahn
Message:
LVP, OVP, LVP
OVP modes implementiert
  • Lüftersteuerung in eigenes Modul verlagert
File:
1 edited

Legend:

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

    r17 r24  
    11
    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
    214
    225
     
    2912#include "leds.h"
    3013#include "buzzer.h"
    31 
     14#include "chip_temperature.h"
    3215
    3316
     
    4730{
    4831  int faultInput;
    49   int ovpInput;
     32
    5033
    5134  if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)       
     
    5841  }
    5942
    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   }
    6643
    6744 
     
    7653      BUZZER_Beep(BUZZER_ON_TIME_CONFIRM);
    7754      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");
    7956      smState = OVP_ON;
    8057
     
    8764      //LEDS_RT_Blink_Start(LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_GN_OFF_TIME); //Fehler Anzeigen
    8865          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 = OVP_ERROR;
     66      printf("OVP_SM_Off: NEW_STATE: OVP_ERROR_FAULT_INPUT\n");
     67      smState =OVP_ERROR;
    9168    }
    9269  }
     
    10279      LEDS_GN_On();
    10380      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");
    10582      smState = OVP_MANUAL_ON;
    10683  }
     
    11390{
    11491  int faultInput = 0;
    115   int ovpInput = 0;
    116   static int ovpInputTimeCounter = 0;
     92  static int ovpInput = 0;
     93  static int ovpTimeCounter = 0;
    11794  static int oldtime;
    11895
     
    126103  }
    127104 
    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))
    129106  {
    130107    if (HAL_GetTick() != oldtime)
    131108    {
    132       ovpInputTimeCounter++;
    133       if (ovpInputTimeCounter > 30000)
     109      if (ovpTimeCounter < 5000) ovpTimeCounter++;
     110      if (ovpTimeCounter >= 5000)
    134111      {
    135         ovpInput = 0;
    136         ovpInputTimeCounter=0;
     112        ovpInput = 1;
     113        ovpTimeCounter=0;
    137114      }
    138115      oldtime = HAL_GetTick();
    139116    }
    140117  }
    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//    }
    145131  }
    146132
    147133 
    148134
    149   // Prüfe Wechsel in off mode
    150   if (BUTTON_GetMode() == BUTTON_OFF)
    151   {
    152     //Ausschalten muss immer möglich sein
    153     RELAIS_ResetPuls();
    154     BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Bestätigung
    155     LEDS_GN_Off();
    156     LEDS_RT_Off();
    157     printf("NEW_STATE: LVP_OFF\n");
    158     smState = OVP_OFF;
    159   }
    160135
    161136  //Prüfe auf Fehlermode
     
    172147  }
    173148
    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))
    175163  {
    176164    RELAIS_ResetPuls();
    177165    BUZZER_Beep(BUZZER_ON_TIME_REJECT); //Warnung
    178     LEDS_GN_Off();
    179     BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
    180     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))
    186174  {
    187175    RELAIS_SetPuls();
    188176    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;
    193197  }
    194198
     
    206210    LEDS_GN_Off();
    207211    LEDS_RT_Off();
    208     printf("NEW_STATE: SECONDARYPROTECTION_OFF\n");
     212    printf("NEW_STATE: OVP_OFF\n");
    209213    smState = OVP_OFF;
    210214  }
     
    215219{
    216220  int faultInput;
    217  
     221  int ovpAndOvpInput;
    218222
    219223  if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)       
     
    276280  {
    277281    case OVP_OFF:
    278       OVP_SM_Off();
     282     OVP_SM_Off();
    279283    break;
    280284
Note: See TracChangeset for help on using the changeset viewer.