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
Location:
trunk/firmware_v2/SES/src
Files:
8 edited

Legend:

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

    r23 r24  
    2525uint32_t calTemperatureSensor30Value;  // Kalibrierungswert für den Temperatursensor auf dem STM32G0 (Werksmäßig im SCB Bereich gespeichert wird beim Programmstart ausgelesen)
    2626                                                 // Daten Temperaturanzeige µProzessor
    27 
     27int32_t temp;
    2828//      --- LOKALE FUNKTIONS PROTOTYPEN ----------------------------------------------
    2929
     
    5656}
    5757
    58 int CHIP_TEMPERATURE_Exec(uint32_t chiptemperature)
     58void CHIP_TEMPERATURE_Exec(uint32_t adcValue)
    5959{
    60     int32_t temp;
     60   
    6161    //Aktuelle Spannung am Temp Sensor
    62     temp = (3300 * (uint32_t)chiptemperature) / 65536;
     62    temp = (3300 * (uint32_t)adcValue) / 65536;
    6363
    6464
     
    6767    temp = temp / 2.530; //2,53mV/°C
    6868    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
    7170}
     71
     72int CHIP_TEMPERATURE_GetTemp(void)
     73{
     74  return temp;
     75}
     76
    7277
    7378//------------------------------------------------------------------------------
  • trunk/firmware_v2/SES/src/main.c

    r23 r24  
    3232#include "relais.h"
    3333#include "leds.h"
     34#include "fan.h"
    3435#include "chip_temperature.h"
    3536#include "modeswitch.h"
     
    141142
    142143
     144       
     145extern 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
    143154  /* USER CODE END 2 */
    144155
     
    166177        {
    167178          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)
    171182          { 
    172183                  pwm++;
     
    178189                if (pwm > 0) pwm--;
    179190          }
    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);
    232193
    233194          uin = VOLTAGE_MEAS_GetUin();
    234195          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);
    236200         
    237201         
     
    242206    switch (MODESWITCH_GetMode())
    243207    {
    244       case MODE_MAINSWITCH:
     208      case MODE_MAINSWITCH: //0
    245209        MODE_MAINSWITCH_Exec();
    246210      break;
    247211
    248       case MODE_MAINSWITCH_SECONDARYPROTECTION:
     212      case MODE_MAINSWITCH_SECONDARYPROTECTION://1
    249213        MODE_SECONDARYPROTECTION_Exec();
    250214      break;
    251215
    252       case MODE_MAINSWITCH_SECONDARYPROTECTION_PLUS:
     216      case MODE_MAINSWITCH_SECONDARYPROTECTION_PLUS://2
    253217        MODE_SECONDARYPROTECTION_PLUS_Exec();
    254218      break;
    255219
    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;
    267231
    268232
  • trunk/firmware_v2/SES/src/mode_lvp.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 LVP||OVP Modul
     3// Jedoch hier nur LVP
    214
    225
     
    2912#include "leds.h"
    3013#include "buzzer.h"
    31 
     14#include "chip_temperature.h"
    3215
    3316
     
    4730{
    4831  int faultInput;
    49   int lvpInput;
     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_LVP_GPIO_Port, GPIO_INPUT_LVP_Pin) == GPIO_PIN_SET)
    61   {
    62     lvpInput = 1;
    63   }else {
    64     lvpInput = 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: SECONDARYPROTECTION_ON\n");
     55      printf("LVP_SM_Off: NEW_STATE: LVP_ON\n");
    7956      smState = LVP_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: SECONDARYPROTECTION_ERROR\n");
     66      printf("LVP_SM_Off: NEW_STATE: LVP_ERROR_FAULT_INPUT\n");
    9067      smState =LVP_ERROR;
    9168    }
     
    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: SECONDARYPROTECTION_MANUAL_ON\n");
     81      printf("NEW_STATE: LVP_MANUAL_ON\n");
    10582      smState = LVP_MANUAL_ON;
    10683  }
     
    11390{
    11491  int faultInput = 0;
    115   int lvpInput = 0;
    116   static int lvpInputTimeCounter = 0;
     92  static int lvpInput = 0;
     93  static int lvpTimeCounter = 0;
    11794  static int oldtime;
    11895
     
    126103  }
    127104 
    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))
    129106  {
    130107    if (HAL_GetTick() != oldtime)
    131108    {
    132       lvpInputTimeCounter++;
    133       if (lvpInputTimeCounter > 30000)
     109      if (lvpTimeCounter < 5000) lvpTimeCounter++;
     110      if (lvpTimeCounter >= 5000)
    134111      {
    135         lvpInput = 0;
    136         lvpInputTimeCounter=0;
     112        lvpInput = 1;
     113        lvpTimeCounter=0;
    137114      }
    138115      oldtime = HAL_GetTick();
    139116    }
    140117  }
    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//    }
    145131  }
    146132
    147133 
     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  }
    148184
    149185  // Prüfe Wechsel in off mode
     
    155191    LEDS_GN_Off();
    156192    LEDS_RT_Off();
    157     printf("NEW_STATE: SECONDARYPROTECTION_OFF\n");
     193    printf("NEW_STATE: LVP_OFF\n");
    158194    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  }
    195199
    196200
     
    259263      LEDS_RT_Off();
    260264      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");
    262266      smState = LVP_MANUAL_ON;
    263267  }
     
    277281  {
    278282    case LVP_OFF:
    279       LVP_SM_Off();
     283     LVP_SM_Off();
    280284    break;
    281285
  • trunk/firmware_v2/SES/src/mode_lvp_ovp.c

    r17 r24  
    2929#include "leds.h"
    3030#include "buzzer.h"
     31#include "chip_temperature.h"
    3132
    3233
     
    4647{
    4748  int faultInput;
    48   int lvpOROvpInput;
     49
    4950
    5051  if (HAL_GPIO_ReadPin(GPIO_INPUT_FAULT_GPIO_Port, GPIO_INPUT_FAULT_Pin) == GPIO_PIN_RESET)       
     
    5758  }
    5859
    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
    6761
    6862
     
    7569      BUZZER_Beep(BUZZER_ON_TIME_CONFIRM);
    7670      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");
    7872      smState = LVP_OVP_ON;
    7973
     
    8680      //LEDS_RT_Blink_Start(LED_RT_ON_TIME_WARN_FAULT_INPUT, LED_GN_OFF_TIME); //Fehler Anzeigen
    8781          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");
    8983      smState =LVP_OVP_ERROR;
    9084    }
     
    112106{
    113107  int faultInput = 0;
    114   int lvpOROvpInput = 0;
     108  static int lvpOROvpInput = 0;
    115109  static int lvpAndOvpInputTimeCounter = 0;
    116110  static int oldtime;
     
    125119  }
    126120 
    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))
    128122  {
    129123    if (HAL_GetTick() != oldtime)
    130124    {
    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)
    147127      {
    148128        lvpOROvpInput = 1;
     
    153133  }
    154134
     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
    155149 
    156150
    157   // Prüfe Wechsel in off mode
    158   if (BUTTON_GetMode() == BUTTON_OFF)
    159   {
    160     //Ausschalten muss immer möglich sein
    161     RELAIS_ResetPuls();
    162     BUZZER_Beep(BUZZER_ON_TIME_CONFIRM); //Bestätigung
    163     LEDS_GN_Off();
    164     LEDS_RT_Off();
    165     printf("NEW_STATE: LVP_OVP_OFF\n");
    166     smState = LVP_OVP_OFF;
    167   }
    168151
    169152  //Prüfe auf Fehlermode
     
    180163  }
    181164
    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))
    183179  {
    184180    RELAIS_ResetPuls();
     
    186182    LEDS_GN_Off();
    187183    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");
    189185    printf("NEW_STATE: LVP_OVP_Auto On, Relais off\n");
    190186   
    191187  }
    192188
    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))
    194191  {
    195192    RELAIS_SetPuls();
     
    197194    LEDS_GN_Off();
    198195    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");
    200197    printf("NEW_STATE: LVP_OVP_Auto On, Relais on\n");
    201198   
    202199  }
     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
    203216
    204217}
  • trunk/firmware_v2/SES/src/mode_mainswitch.c

    r17 r24  
    1313#include "leds.h"
    1414#include "buzzer.h"
     15#include "chip_temperature.h"
    1516
    1617
     
    119120  }
    120121
     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
    121135
    122136}
  • 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
  • trunk/firmware_v2/SES/src/mode_secondaryprotection.c

    r17 r24  
    3030#include "buzzer.h"
    3131#include "voltage_meas.h"
     32#include "chip_temperature.h"
    3233
    3334
     
    198199  }
    199200
     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
    200213
    201214}
  • trunk/firmware_v2/SES/src/mode_secondaryprotection_plus.c

    r17 r24  
    2222#include "leds.h"
    2323#include "buzzer.h"
     24#include "chip_temperature.h"
    2425#include "voltage_meas.h"
    2526
     
    190191    smState = SECONDARYPROTECTION_ERROR;
    191192  }
     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
    192205
    193206
Note: See TracChangeset for help on using the changeset viewer.