Ignore:
Timestamp:
Sep 11, 2025, 4:17:09 PM (7 weeks ago)
Author:
f.jahn
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/fw_g473rct/SES/src/outputs.c

    r20 r28  
    2626//--- LOKALE FUNKTIONS PROTOTYPEN ----------------------------------------------
    2727/*
    28 * @brief
     28* @brief Heizungssteuerung
    2929* @param        kein
    3030* @retval       kein
    3131*/
     32void AuxModeHeaterExec(void);
     33
     34
    3235//--- LOKALE FUNKTIONEN - bitte hier dokumentieren -----------------------------
    3336
     
    226229        lastMode = sys_data.s.parameter.ovpMode;
    227230}
     231
     232
     233
     234#define   LVP_DETECTION_LEVEL           6000  //< 6 V
     235#define   CHARGE_DETECT_HYSTERESE       10
     236
     237void AuxModeHeaterExec(void)
     238{
     239 static int outputState=0;
     240
     241 int offv = sys_data.s.parameter.auxOutputSetpointOn - CHARGE_DETECT_HYSTERESE;
     242 int onv = sys_data.s.parameter.auxOutputSetpointOn + CHARGE_DETECT_HYSTERESE;
     243
     244        if ((sys_data.s.values.shuntVoltage > onv) && (sys_data.s.values.ovp_sense < LVP_DETECTION_LEVEL) && (outputState == 0))
     245        {
     246          printf("Heater on\r\n");
     247          outputState = 1;
     248          if (sys_data.s.parameter.auxOutputInverted == 0)
     249          {
     250                HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_SET);
     251          }
     252          else
     253          {
     254                HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET);
     255          }
     256
     257        }
     258
     259        //Ausschalten
     260        //Wenn Spannung am Shunt < setpoint (ladegeräteerkennung 14,8V?) und Entladung
     261        //Oder wenn OVP wieder da ist
     262        //sys_data.s.values.batteryCurrent < sys_data.s.parameter.auxOutputSetpointOff
     263
     264        if ((sys_data.s.values.shuntVoltage < offv  ) || (sys_data.s.values.ovp_sense > LVP_DETECTION_LEVEL))
     265        {
     266          if (outputState == 1)
     267          {
     268          printf("Heater off\r\n");
     269          outputState = 0;
     270          if (sys_data.s.parameter.auxOutputInverted == 0)
     271          {
     272                HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET);
     273          }
     274          else
     275          {
     276                HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_SET);
     277          }
     278          }
     279        }
     280}
     281
     282void AuxModeSOCExec(void)
     283{
     284 static int outputState=0;
     285
     286
     287        if ((sys_data.s.values.soc > (sys_data.s.parameter.auxOutputSetpointOn*1000)) &&  (outputState == 0))
     288        {
     289          printf("AUX on (SOC Mode)\r\n");
     290          outputState = 1;
     291          if (sys_data.s.parameter.auxOutputInverted == 0)
     292          {
     293                HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_SET);
     294          }
     295          else
     296          {
     297                HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET);
     298          }
     299
     300        }
     301
     302
     303        if ((sys_data.s.values.soc < (sys_data.s.parameter.auxOutputSetpointOff*1000)) &&  (outputState == 1))
     304        {
     305          printf("AUX off (SOC Mode)\r\n");
     306          outputState = 0;
     307          if (sys_data.s.parameter.auxOutputInverted == 0)
     308          {
     309                HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET);
     310          }
     311          else
     312          {
     313                HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_SET);
     314          }
     315        }
     316
     317       
     318}
     319
     320
     321        int16_t loadCurrentLimit;                                                                                                       // 30   maximaler Laststrom in A wenn der Strom grer ist als der eingestelle Wert dann wird die Laststrom Protection aktiv, darf nicht unsigned sein, da Entladestrom mit Minus angegeben [A] Default -500 A
     322        int16_t chargeCurrentLimit;                                                                                                     // 31   maximaler Ladestrom in A wenn der Strom grer ist als der eingestelle Wert dann wird die Ladestrom Protection aktiv [A] Default:500A
     323
     324
     325        int16_t chargeStopHighTemperatureStart;                                                                         // 32   Abschalttemperatur Ladung wegen zu hoher Temperatur [C * 100]
     326        int16_t chargeStopHighTemperatureStop;                                                                          // 33   Wiedereinschalttemperatur [C * 100]
     327
     328        int16_t chargeStopLowTemperatureStart;                                                                          // 34   Abschalttemperatur Ladung wegen zu niedriger Temperatur [C * 100]
     329        int16_t chargeStopLowTemperatureStop;                                                                           // 35   Wiedereinschalttemperatur [C * 100]
     330
     331        int16_t dischargeStopHighTemperatureStart;                                                                      // 36   Abschalttemperatur Entladung wegen zu hoher Temperatur [C * 100]
     332        int16_t dischargeStopHighTemperatureStop;                                                                       // 37   Wiedereinschalttemperatur[C * 100]
     333
     334        int16_t dischargeStopLowTemperatureStart;                                                                       // 38   Abschalttemperatur EntLadung wegen zu niedriger Temperatur
     335        int16_t dischargeStopLowTemperatureStop;                                                                        // 39   Wiedereinschalttemperatur
     336
     337
     338
     339void AuxModeAlarmExec(void)
     340{
     341  static int outputState=0;
     342 
     343
     344  if (
     345          (sys_data.s.values.shuntTemperature > (chargeStopHighTemperatureStart         - 500))         ||
     346          (sys_data.s.values.chipTemperature > (chargeStopHighTemperatureStart          - 500))         ||
     347          (sys_data.s.values.shuntTemperature < (chargeStopLowTemperatureStart          + 500))         ||
     348          (sys_data.s.values.chipTemperature < (chargeStopLowTemperatureStart                   + 500))         ||
     349          (sys_data.s.values.shuntTemperature > (dischargeStopHighTemperatureStart      - 500))         ||
     350          (sys_data.s.values.chipTemperature > (dischargeStopHighTemperatureStart               - 500))         ||
     351          (sys_data.s.values.shuntTemperature < (dischargeStopLowTemperatureStart               + 500))         ||
     352          (sys_data.s.values.chipTemperature < (dischargeStopLowTemperatureStart                + 500))         ||
     353          (sys_data.s.values.batteryCurrent > ((chargeCurrentLimit*1000LL)                      - 10000))       ||
     354          (sys_data.s.values.batteryCurrent < ((loadCurrentLimit*1000LL)                                + 10000))
     355 
     356         )
     357  {
     358        if ( outputState == 0)
     359        {
     360          printf("AUX on (Alarm Mode)\r\n");
     361          outputState = 1;
     362          if (sys_data.s.parameter.auxOutputInverted == 0)
     363          {
     364                HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_SET);
     365          }
     366          else
     367          {
     368                HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET);
     369          }
     370        }
     371  }
     372  else // Alles OK
     373  { 
     374        if ( outputState == 0)
     375        {
     376          printf("AUX off (Alarm Mode)\r\n");
     377          outputState = 0;
     378          if (sys_data.s.parameter.auxOutputInverted == 0)
     379          {
     380                HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET);
     381          }
     382          else
     383          {
     384                HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_SET);
     385          }
     386        }
     387  }
     388}
     389
     390
     391void OUTPUTS_CheckAUX(void)
     392{
     393 
     394  switch (sys_data.s.parameter.auxOutputMode)
     395  {
     396        case AUX_MODE_OFF:
     397          HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET);
     398        break;
     399
     400        case AUX_MODE_HEATER:
     401          AuxModeHeaterExec();
     402        break;
     403
     404        case AUX_MODE_SOC:
     405          AuxModeSOCExec();
     406        break;
     407
     408        case AUX_MODE_ALARM:
     409          AuxModeAlarmExec();
     410        break;
     411
     412
     413        default:
     414          HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET);
     415        break;
     416       
     417
     418  }
     419
     420
     421}
     422
    228423/*************************** End of file ****************************/
Note: See TracChangeset for help on using the changeset viewer.