Ignore:
Timestamp:
Sep 11, 2025, 4:17:09 PM (7 weeks ago)
Author:
f.jahn
Message:
 
Location:
trunk/fw_g473rct/SES/src
Files:
5 edited

Legend:

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

    r27 r28  
    2727//      --- LOKALE VARIABLEN - bitte hier dokumentieren ------------------------------
    2828int startMeasurement = 0;
     29int startMeasurementCEF = 0;
    2930//      --- LOKALE FUNKTIONS PROTOTYPEN ----------------------------------------------
    3031int getSocAhRated(void);
     
    9798
    9899
     100  int32_t realStrom = (int32_t)  sys_data.s.values.batteryCurrent - sys_data.s.parameter.extraDischargeStrom_mA;
    99101
    100102  // bei Strom größer 0 -> Ladestrom CEF rechnen
    101   if(sys_data.s.values.batteryCurrent >= 0)
     103  if (realStrom >= 0)
    102104  {
    103105          //99 --> 99% --> 0.99
    104           cef =  sys_data.s.parameter.cef / 100.0;
    105           sys_data.s.values.batteryCurrentCorrected = sys_data.s.values.batteryCurrent * cef;
    106   }
    107   else
     106          if (sys_data.s.values.calculatedCEFAh <= 0)
     107          {
     108                cef =  sys_data.s.parameter.cef / 100.0;
     109          }
     110          else
     111          {
     112                cef =  sys_data.s.values.calculatedCEFAh / 1000.0;
     113          }
     114          sys_data.s.values.batteryCurrentCorrected = realStrom * cef;
     115  }
     116  else // if (realStrom < 0)
    108117  {       // bei Strom kleiner 0 peukert rechnen
    109118          //int32_t ratedCurrent = sys_data.s.parameter.cellRatedCurrent * 1000;
    110119          int32_t ratedCurrent = sys_data.s.parameter.cellCapacity / sys_data.s.parameter.cellRatedDischargeTime;
    111 
    112           if (sys_data.s.values.batteryCurrent < -ratedCurrent) //ACHTUNG mit Minus das vorzeichen gedreht!
     120         
     121
     122          if (realStrom < -ratedCurrent) //ACHTUNG mit Minus das vorzeichen gedreht!
    113123          {
    114                   current = sys_data.s.values.batteryCurrent;
     124                  current = realStrom;
    115125                  iBatDivIbatNenn = current / ratedCurrent;
    116126                  iBatDivIbatNenn = -iBatDivIbatNenn;
     
    119129                  sys_data.s.values.batteryCurrentCorrected = (current * calcPow);
    120130          }
    121           else sys_data.s.values.batteryCurrentCorrected = sys_data.s.values.batteryCurrent;
    122   }
    123 
    124   sys_data.s.values.batteryCurrentCorrected -= (int32_t)sys_data.s.parameter.extraDischargeStrom_mA;
    125 
     131          else sys_data.s.values.batteryCurrentCorrected = realStrom;
     132  }
     133
     134 
    126135  // Counting negative current
    127136  if (sys_data.s.values.batteryCurrent < 0)
    128137  {
    129           totalDischarge += -sys_data.s.values.batteryCurrent;
     138          totalDischarge += -realStrom;
    130139          sys_data.s.values.dischargeTotalAh = totalDischarge / 3600000; //Umrechnung von mAs auf Ah
    131140
    132 
    133141          sys_data.s.values.fullCyclesCnt = (uint16_t) ((sys_data.s.values.dischargeTotalAh * 1000) / sys_data.s.parameter.cellCapacity);
    134142  }
    135143  else
    136144  {
    137           totalCharge += sys_data.s.values.batteryCurrent;
     145          totalCharge += realStrom;
    138146          sys_data.s.values.chargeTotalAh = totalCharge / 3600000; //Umrechnung von mAs auf Ah
    139147  }
    140 
    141148
    142149
    143150  // Aufsummieren
    144151  sys_data.s.values.mAsCounter += sys_data.s.values.batteryCurrentCorrected;
    145   sys_data.s.values.mAs_AutoMode += (int64_t)sys_data.s.values.batteryCurrentCorrected;
     152  sys_data.s.values.mAs_AutoMode += sys_data.s.values.batteryCurrentCorrected;
    146153  sys_data.s.values.mAh_AutoMode = sys_data.s.values.mAs_AutoMode / 3600LL;
     154  sys_data.s.values.ahCounterCEF_AutoMode +=  sys_data.s.values.batteryCurrentCorrected;
     155  sys_data.s.values.whCounterCEF_AutoMode +=  sys_data.s.values.batteryCurrentCorrected * sys_data.s.values.batteryVoltage;
    147156
    148157  // Begrenzen, Batterie darf nicht über 100% gehen
     
    175184        //und wir starten eine neue Battery Kapazitäts und Energiemessung
    176185        startMeasurement = 1;
     186
     187        if (startMeasurementCEF == 1)
     188        {
     189          startMeasurementCEF=0;
     190          sys_data.s.values.calculatedCEFAh = 1000 * (sys_data.s.values.detectedCapacity * 3600) / sys_data.s.values.ahCounterCEF_AutoMode ;
     191          sys_data.s.values.calculatedCEFWh = 1000 * (sys_data.s.values.detectedEnergy * 3600) / sys_data.s.values.whCounterCEF_AutoMode;
     192        }
    177193  }
    178194
    179195  sys_data.s.values.mAhCounter = sys_data.s.values.mAsCounter / 3600LL;
    180196
     197  // --- BATTERY LEER ERKENNUNG
    181198  static uint16_t cnt;
    182199  if (sys_data.s.parameter.batteryEmptyDetectionMode == 0)
     
    191208                  if ((sys_data.s.values.lastTimeVbatFull >= 3600U) && (sys_data.s.values.lastTimeVbatFull <= 200U * 3600U))    // This line prevents from very high discharge-currents to be used to estimate battery capacity
    192209                  {
    193                           // This line is not so important anymore, because we do not allow mAh_AutoMode to be greater than zero
     210                         
    194211                          AH_COUNTER_SetDetectedAh();
    195212                          WH_COUNTER_SetDetectedEnergy();
     213                          sys_data.s.values.ahCounterCEF_AutoMode = 0;
     214                          sys_data.s.values.whCounterCEF_AutoMode = 0;
    196215                          startMeasurement = 0;                   
    197216                  }
     
    222241                          WH_COUNTER_SetDetectedEnergy();
    223242                          startMeasurement = 0;                   
     243                          startMeasurementCEF = 1;
    224244                  }
    225245                  sys_data.s.values.lastTimeVbatEmpty = 0U;
  • trunk/fw_g473rct/SES/src/eeprom.c

    r27 r28  
    1 //https://controllerstech.com/eeprom-and-stm32/
     1// https://controllerstech.com/eeprom-and-stm32/
     2#include <string.h>
    23
    34#include "eeprom.h"
     
    1112// Define the I2C
    1213extern I2C_HandleTypeDef hi2c3;
    13 #define EEPROM_I2C &hi2c3
     14#define EEPROM_I2C                      &hi2c3
    1415
    1516// EEPROM ADDRESS (8bits)
    16 #define EEPROM_ADDR 0xA0
     17#define EEPROM_ADDR                     0xA0
    1718
    1819// Define the Page Size and number of pages
    19 #define PAGE_SIZE 64     // in Bytes
    20 #define PAGE_NUM  4096    // number of pages
     20#define PAGE_SIZE                       64              // in Bytes
     21#define PAGE_NUM                        4096    // number of pages
    2122       
    2223       
     
    103104  uint16_t        cefW;
    104105  int16_t         batteryEmptyDetectionMode;           
     106  uint16_t        auxOutputMode;
     107  uint16_t        auxOutputSetpointOn;
     108  uint16_t        auxOutputSetpointOff;
     109  uint16_t        auxOutputInverted;   
    105110
    106111} eeprom_data_t;
     
    138143
    139144
    140 
    141 
    142 
    143145// Data to store reated defines
    144 //#define SIZEOF_DEFAULT_EEPROM_DATA              (sizeof(eeprom_new_data_t))
    145 #define SIZEOF_CHANGED_EEPROM_DATA                (sizeof(eeprom_data_t))
    146 #define SIZEOF_DEVICE_INFO                        (sizeof(device_info_t))
    147 #define SIZEOF_EEPROM_STATE                       (sizeof(eeprom_state_t))
    148 
    149 #define SIZE_OF_DATA_TO_STORE                     (SIZEOF_CHANGED_EEPROM_DATA + SIZEOF_DEVICE_INFO + SIZEOF_EEPROM_STATE)
     146//#define SIZEOF_DEFAULT_EEPROM_DATA                            (sizeof(eeprom_new_data_t))
     147//#define SIZEOF_CHANGED_EEPROM_DATA                (sizeof(eeprom_data_t))
     148//#define SIZEOF_DEVICE_INFO                        (sizeof(device_info_t))
     149//#define SIZEOF_EEPROM_STATE                       (sizeof(eeprom_state_t))
     150
     151//#define SIZE_OF_DATA_TO_STORE                     (SIZEOF_CHANGED_EEPROM_DATA + SIZEOF_DEVICE_INFO + SIZEOF_EEPROM_STATE)
    150152
    151153
    152154// Adress related defines
    153155#define EEPROM_ADRESS_FIRST_START_ID              (0)
    154 #define FIRST_START_ID                            (0xFF)
     156#define FIRST_START_ID                            (0xFF)  // See datasheet (Chapter "Initial delivery state")
    155157#define CONFIG_ID                                                                 (01)    // Increment by 1 to make compartible update, more than 1 - incompartible
    156158#if CONFIG_ID == FIRST_START_ID
     
    166168
    167169
    168 
    169 // muss modulo 8 noch hinzufügen wg 8 byte alignement
    170 static uint8_t eepromData[SIZE_OF_DATA_TO_STORE];
     170static eeprom_stored_data_t eepromData;
    171171
    172172
     
    261261        /* cefW         */                                                                                                                      90,                             // 90% cef for Wh calculations
    262262        /* Battery Empty Detection Mode*/                                                                               1,                              // Auto, from BMS
    263        
    264 
     263        /* AUX MODE */                                                                                                                  AUX_MODE_HEATER,// Heizung
     264        /* AUX SETPOINT ON */                                                                                                   13600,                  // Erkennung Ladegerät ab 13,6V
     265        /* AUX SETPOINT OFF */                                                                                                  100,                    // Batterie Entladung wird erkannt bei -100mA
     266        /* AUX Inverted */                                                                                                              0,                              // Nicht invertiert
    265267};
    266268
     
    281283  uint8_t firstStartCatcher;
    282284
    283   EEPROM_Read(0,EEPROM_ADRESS_FIRST_START_ID, &firstStartCatcher, 1);
    284 
     285  EEPROM_Read(0, EEPROM_ADRESS_FIRST_START_ID, &firstStartCatcher, 1);
    285286
    286287  if (firstStartCatcher == FIRST_START_ID)
     
    306307HAL_StatusTypeDef EEPROM_fullRestore(sys_data_t* data)
    307308{
    308   eeprom_stored_data_t* dataToStore;
    309309  printf("EEPROM FULL RESTORE!\n");
    310310
    311311  /**************** LESE_DEFAULT_WERTE ************************/
    312312
    313   dataToStore = (eeprom_stored_data_t*) eepromData;
    314 
    315   // Schnittstellenparameter
    316   dataToStore->changedData.baudrate                                                                                                     = defaultEepromData.baudrate;
    317   dataToStore->changedData.parityMode                                                                                           = defaultEepromData.parityMode;
    318   dataToStore->changedData.stopBits                                                                                                     = defaultEepromData.stopBits;
    319   dataToStore->changedData.slave_adress                                                                                         = defaultEepromData.slave_adress;
    320 
    321   // Offset und Gain
    322   dataToStore->changedData.batteryCurrentOffsetRefTemperatureShunt                                      = defaultEepromData.batteryCurrentOffsetRefTemperatureShunt;
    323   dataToStore->changedData.batteryCurrentOffsetRefTemperatureChip                                       = defaultEepromData.batteryCurrentOffsetRefTemperatureChip;
    324   dataToStore->changedData.batteryCurrentGainRefTempShunt                                                       = defaultEepromData.batteryCurrentGainRefTempShunt;
    325   dataToStore->changedData.batteryCurrentGainRefTempChip                                                        = defaultEepromData.batteryCurrentGainRefTempChip;
    326   dataToStore->changedData.batteryCurrentOffsetTemperatureCalibrationTemperature        = defaultEepromData.batteryCurrentOffsetTemperatureCalibrationTemperature;
    327   dataToStore->changedData.batteryCurrentGainTemperatureCalibrationShuntTemperature     = defaultEepromData.batteryCurrentGainTemperatureCalibrationShuntTemperature;
    328   dataToStore->changedData.batteryCurrentGainTemperatureCalibrationChipTemperature      = defaultEepromData.batteryCurrentGainTemperatureCalibrationChipTemperature;
    329   dataToStore->changedData.batteryCurrentOffsetRefshuntVoltage                                          = defaultEepromData.batteryCurrentOffsetRefshuntVoltage;
    330   dataToStore->changedData.batteryCurrentOffsetCommonModeCalibrationVoltage                     = defaultEepromData.batteryCurrentOffsetCommonModeCalibrationVoltage;
    331   dataToStore->changedData.batteryCurrentOffsetCommonModeCompensationFactor                     = defaultEepromData.batteryCurrentOffsetCommonModeCompensationFactor;
    332   dataToStore->changedData.batteryCurrentOffsetTemperatureCompensationFactor            = defaultEepromData.batteryCurrentOffsetTemperatureCompensationFactor;
    333   dataToStore->changedData.batteryCurrentGainRefCurrent                                                         = defaultEepromData.batteryCurrentGainRefCurrent;
    334   dataToStore->changedData.batteryCurrentGainTemperatureCompensationShuntFactor         = defaultEepromData.batteryCurrentGainTemperatureCompensationShuntFactor;
    335   dataToStore->changedData.batteryCurrentGainTemperatureCompensationChipFactor          = defaultEepromData.batteryCurrentGainTemperatureCompensationChipFactor;
    336 
    337   dataToStore->changedData.currentOffset                                                                                        = defaultEepromData.currentOffset;
    338   dataToStore->changedData.currentGain                                                                                          = defaultEepromData.currentGain;
    339 
    340   dataToStore->changedData.currentOffsetFast                                                                            = defaultEepromData.currentOffsetFast;
    341   dataToStore->changedData.currentGainFast                                                                                      = defaultEepromData.currentGainFast;
    342 
    343   // AH Counter Parameter
    344   dataToStore->changedData.cef                                                                                                          = defaultEepromData.cef;
    345   dataToStore->changedData.peukert                                                                                                      = defaultEepromData.peukert;
    346   dataToStore->changedData.cellCapacity                                                                                         = defaultEepromData.cellCapacity;
    347   dataToStore->changedData.cellEnergy                                                                                           = defaultEepromData.cellEnergy;
    348   dataToStore->changedData.iBatFull                                                                                                     = defaultEepromData.iBatFull;
    349   dataToStore->changedData.tBatFull                                                                                                     = defaultEepromData.tBatFull;
    350   dataToStore->changedData.uBatFull                                                                                                     = defaultEepromData.uBatFull;
    351   dataToStore->changedData.uBatEmpty                                                                                            = defaultEepromData.uBatEmpty;
    352   dataToStore->changedData.socCalcMode                                                                                          = defaultEepromData.socCalcMode;
    353   dataToStore->changedData.cellRatedDischargeTime                                                                       = defaultEepromData.cellRatedDischargeTime;
    354 
    355   // Schaltausgänge
    356   dataToStore->changedData.lvpStart                                                                                                     = defaultEepromData.lvpStart;
    357   dataToStore->changedData.lvpStop                                                                                                      = defaultEepromData.lvpStop;
    358   dataToStore->changedData.ovpStart                                                                                                     = defaultEepromData.ovpStart;
    359   dataToStore->changedData.ovpStop                                                                                                      = defaultEepromData.ovpStop;
    360   dataToStore->changedData.loadCurrentLimit                                                                                     = defaultEepromData.loadCurrentLimit;
    361   dataToStore->changedData.chargeCurrentLimit                                                                           = defaultEepromData.chargeCurrentLimit;
    362   dataToStore->changedData.chargeStopHighTemperatureStart                                                       = defaultEepromData.chargeStopHighTemperatureStart;
    363   dataToStore->changedData.chargeStopHighTemperatureStop                                                        = defaultEepromData.chargeStopHighTemperatureStop;
    364   dataToStore->changedData.chargeStopLowTemperatureStart                                                        = defaultEepromData.chargeStopLowTemperatureStart;
    365   dataToStore->changedData.chargeStopLowTemperatureStop                                                         = defaultEepromData.chargeStopLowTemperatureStop;
    366   dataToStore->changedData.dischargeStopHighTemperatureStart                                            = defaultEepromData.dischargeStopHighTemperatureStart;
    367   dataToStore->changedData.dischargeStopHighTemperatureStop                                                     = defaultEepromData.dischargeStopHighTemperatureStop;
    368   dataToStore->changedData.dischargeStopLowTemperatureStart                                                     = defaultEepromData.dischargeStopLowTemperatureStart;
    369   dataToStore->changedData.dischargeStopLowTemperatureStop                                                      = defaultEepromData.dischargeStopLowTemperatureStop;
    370 
    371   dataToStore->changedData.uBatEmptyCompStartTemp                                                                       = defaultEepromData.uBatEmptyCompStartTemp;
    372   dataToStore->changedData.uBatEmptyCompStopTemp                                                                        = defaultEepromData.uBatEmptyCompStopTemp;
    373   dataToStore->changedData.uBatEmptyCompStopVolt                                                                        = defaultEepromData.uBatEmptyCompStopVolt;
    374 
    375   dataToStore->changedData.extraDischargeStrom_mA                                                                       = defaultEepromData.extraDischargeStrom_mA;
    376   dataToStore->changedData.cefW                                                                                                         = defaultEepromData.cefW;
    377   dataToStore->changedData.batteryEmptyDetectionMode                                                            = defaultEepromData.batteryEmptyDetectionMode;
    378  
    379 
     313  memcpy(&eepromData.changedData, &defaultEepromData, sizeof(eeprom_data_t));
    380314 
    381315  // Eeprom Status Infos
    382   dataToStore->eepromState.writeCounter++;
    383   dataToStore->eepromState.structureSize = sizeof(eeprom_stored_data_t);
    384   dataToStore->eepromState.revisionInfo = 0;
    385   dataToStore->eepromState.firstStartId = CONFIG_ID;
    386 
    387 
    388   /****************EEPROM Speichern********************/
    389 
    390   EEPROM_Write(0, 0, (uint8_t*)eepromData, SIZE_OF_DATA_TO_STORE);
    391 
    392 
    393 
    394 
     316  eepromData.eepromState.writeCounter++;
     317  eepromData.eepromState.structureSize = sizeof(eeprom_stored_data_t);
     318  eepromData.eepromState.revisionInfo = 0;
     319  eepromData.eepromState.firstStartId = CONFIG_ID;
     320
     321  /**************** EEPROM Speichern ********************/
     322
     323  EEPROM_Write(0, 0, (uint8_t*)&eepromData, sizeof(eeprom_stored_data_t));
    395324
    396325  /**************** AUSLESEN_UND_PRÜFEN ********************/
    397326
    398327  return EEPROM_readConfig(data);
    399 
    400 
    401 
    402 }
    403 
     328}
     329
     330//------------------------------------------------------------------------------
    404331
    405332//Werkeinstellung ohne Kalibrierwert Überschreibung
     
    407334{
    408335  printf("EEPROM FACTORY RESTORE/UPDATE!\n");
    409 
    410336 
    411  
    412   eeprom_stored_data_t* dataToStore = (eeprom_stored_data_t*)eepromData;
    413 
    414   EEPROM_readConfig(data);                                                                                                              // Restoring calibration data
     337  //eeprom_stored_data_t* dataToStore = &eepromData;
     338
     339  EEPROM_readConfig(data);                                                                                                                      // Restoring calibration data
    415340
    416341  // Offset und Gain
    417342 
    418   dataToStore->changedData.batteryCurrentOffsetRefTemperatureShunt                                      = data->s.parameter.batteryCurrentOffsetRefTemperatureShunt;
    419   dataToStore->changedData.batteryCurrentOffsetRefTemperatureChip                                       = data->s.parameter.batteryCurrentOffsetRefTemperatureChip;
    420   dataToStore->changedData.batteryCurrentOffsetRefshuntVoltage                                          = data->s.parameter.batteryCurrentOffsetRefshuntVoltage;
    421   dataToStore->changedData.batteryCurrentOffsetCommonModeCalibrationVoltage                     = data->s.parameter.batteryCurrentOffsetCommonModeCalibrationVoltage;
    422   dataToStore->changedData.batteryCurrentOffsetCommonModeCompensationFactor                     = data->s.parameter.batteryCurrentOffsetCommonModeCompensationFactor;
    423   dataToStore->changedData.batteryCurrentOffsetTemperatureCalibrationTemperature        = data->s.parameter.batteryCurrentOffsetTemperatureCalibrationTemperature;
    424   dataToStore->changedData.batteryCurrentOffsetTemperatureCompensationFactor            = data->s.parameter.batteryCurrentOffsetTemperatureCompensationFactor;
    425   dataToStore->changedData.currentOffset                                                                                        = data->s.parameter.batteryCurrentOffset;
    426   dataToStore->changedData.currentGain                                                                                          = data->s.parameter.batteryCurrentGainCorrectionFaktor;
    427   dataToStore->changedData.currentOffsetFast                                                                            = data->s.parameter.batteryCurrentOffsetFast;
    428   dataToStore->changedData.currentGainFast                                                                                      = data->s.parameter.batteryCurrentGainCorrectionFaktorFast;
     343  eepromData.changedData.batteryCurrentOffsetRefTemperatureShunt                                        = data->s.parameter.batteryCurrentOffsetRefTemperatureShunt;
     344  eepromData.changedData.batteryCurrentOffsetRefTemperatureChip                                         = data->s.parameter.batteryCurrentOffsetRefTemperatureChip;
     345  eepromData.changedData.batteryCurrentOffsetRefshuntVoltage                                            = data->s.parameter.batteryCurrentOffsetRefshuntVoltage;
     346  eepromData.changedData.batteryCurrentOffsetCommonModeCalibrationVoltage                       = data->s.parameter.batteryCurrentOffsetCommonModeCalibrationVoltage;
     347  eepromData.changedData.batteryCurrentOffsetCommonModeCompensationFactor                       = data->s.parameter.batteryCurrentOffsetCommonModeCompensationFactor;
     348  eepromData.changedData.batteryCurrentOffsetTemperatureCalibrationTemperature          = data->s.parameter.batteryCurrentOffsetTemperatureCalibrationTemperature;
     349  eepromData.changedData.batteryCurrentOffsetTemperatureCompensationFactor                      = data->s.parameter.batteryCurrentOffsetTemperatureCompensationFactor;
     350  eepromData.changedData.currentOffset                                                                                          = data->s.parameter.batteryCurrentOffset;
     351  eepromData.changedData.currentGain                                                                                            = data->s.parameter.batteryCurrentGainCorrectionFaktor;
     352  eepromData.changedData.currentOffsetFast                                                                                      = data->s.parameter.batteryCurrentOffsetFast;
     353  eepromData.changedData.currentGainFast                                                                                        = data->s.parameter.batteryCurrentGainCorrectionFaktorFast;
    429354 
    430   dataToStore->changedData.batteryCurrentGainRefTempShunt                                                       = data->s.parameter.batteryCurrentGainRefTempShunt;
    431   dataToStore->changedData.batteryCurrentGainRefTempChip                                                        = data->s.parameter.batteryCurrentGainRefTempChip;
    432   dataToStore->changedData.batteryCurrentGainRefCurrent                                                         = data->s.parameter.batteryCurrentGainRefCurrent;
    433   dataToStore->changedData.batteryCurrentGainTemperatureCalibrationShuntTemperature     = data->s.parameter.batteryCurrentGainTemperatureCalibrationShuntTemperature;
    434   dataToStore->changedData.batteryCurrentGainTemperatureCompensationShuntFactor         = data->s.parameter.batteryCurrentGainTemperatureCompensationShuntFactor;
    435   dataToStore->changedData.batteryCurrentGainTemperatureCalibrationChipTemperature      = data->s.parameter.batteryCurrentGainTemperatureCalibrationChipTemperature;
    436   dataToStore->changedData.batteryCurrentGainTemperatureCompensationChipFactor          = data->s.parameter.batteryCurrentGainTemperatureCompensationChipFactor;
     355  eepromData.changedData.batteryCurrentGainRefTempShunt                                                         = data->s.parameter.batteryCurrentGainRefTempShunt;
     356  eepromData.changedData.batteryCurrentGainRefTempChip                                                          = data->s.parameter.batteryCurrentGainRefTempChip;
     357  eepromData.changedData.batteryCurrentGainRefCurrent                                                           = data->s.parameter.batteryCurrentGainRefCurrent;
     358  eepromData.changedData.batteryCurrentGainTemperatureCalibrationShuntTemperature       = data->s.parameter.batteryCurrentGainTemperatureCalibrationShuntTemperature;
     359  eepromData.changedData.batteryCurrentGainTemperatureCompensationShuntFactor           = data->s.parameter.batteryCurrentGainTemperatureCompensationShuntFactor;
     360  eepromData.changedData.batteryCurrentGainTemperatureCalibrationChipTemperature        = data->s.parameter.batteryCurrentGainTemperatureCalibrationChipTemperature;
     361  eepromData.changedData.batteryCurrentGainTemperatureCompensationChipFactor            = data->s.parameter.batteryCurrentGainTemperatureCompensationChipFactor;
    437362
    438363  // Schnittstellenparameter
    439   dataToStore->changedData.baudrate                                                                                                     = defaultEepromData.baudrate;
    440   dataToStore->changedData.parityMode                                                                                           = defaultEepromData.parityMode;
    441   dataToStore->changedData.stopBits                                                                                                     = defaultEepromData.stopBits;
    442   dataToStore->changedData.slave_adress                                                                                         = defaultEepromData.slave_adress;
    443   dataToStore->changedData.ibn_day                                                                                                      = defaultEepromData.ibn_day;
    444   dataToStore->changedData.ibn_month                                                                                            = defaultEepromData.ibn_month;
    445   dataToStore->changedData.ibn_year                                                                                                     = defaultEepromData.ibn_year;
    446   dataToStore->changedData.user_id                                                                                                      = defaultEepromData.user_id;
     364  eepromData.changedData.baudrate                                                                                                       = defaultEepromData.baudrate;
     365  eepromData.changedData.parityMode                                                                                                     = defaultEepromData.parityMode;
     366  eepromData.changedData.stopBits                                                                                                       = defaultEepromData.stopBits;
     367  eepromData.changedData.slave_adress                                                                                           = defaultEepromData.slave_adress;
     368  eepromData.changedData.ibn_day                                                                                                        = defaultEepromData.ibn_day;
     369  eepromData.changedData.ibn_month                                                                                                      = defaultEepromData.ibn_month;
     370  eepromData.changedData.ibn_year                                                                                                       = defaultEepromData.ibn_year;
     371  eepromData.changedData.user_id                                                                                                        = defaultEepromData.user_id;
    447372
    448373  //Ah counter
    449   dataToStore->changedData.cef                                                                                                          = defaultEepromData.cef;
    450   dataToStore->changedData.cellCapacity                                                                                         = defaultEepromData.cellCapacity;
    451   dataToStore->changedData.cellEnergy                                                                                           = defaultEepromData.cellEnergy;
    452   dataToStore->changedData.iBatFull                                                                                                     = defaultEepromData.iBatFull;
    453   dataToStore->changedData.peukert                                                                                                      = defaultEepromData.peukert;
    454   dataToStore->changedData.tBatFull                                                                                                     = defaultEepromData.tBatFull;
    455   dataToStore->changedData.uBatFull                                                                                                     = defaultEepromData.uBatFull;
    456   dataToStore->changedData.uBatEmpty                                                                                            = defaultEepromData.uBatEmpty;
    457   dataToStore->changedData.socCalcMode                                                                                          = defaultEepromData.socCalcMode;
    458   dataToStore->changedData.cellRatedDischargeTime                                                                       = defaultEepromData.cellRatedDischargeTime;
     374  eepromData.changedData.cef                                                                                                            = defaultEepromData.cef;
     375  eepromData.changedData.cellCapacity                                                                                           = defaultEepromData.cellCapacity;
     376  eepromData.changedData.cellEnergy                                                                                                     = defaultEepromData.cellEnergy;
     377  eepromData.changedData.iBatFull                                                                                                       = defaultEepromData.iBatFull;
     378  eepromData.changedData.peukert                                                                                                        = defaultEepromData.peukert;
     379  eepromData.changedData.tBatFull                                                                                                       = defaultEepromData.tBatFull;
     380  eepromData.changedData.uBatFull                                                                                                       = defaultEepromData.uBatFull;
     381  eepromData.changedData.uBatEmpty                                                                                                      = defaultEepromData.uBatEmpty;
     382  eepromData.changedData.socCalcMode                                                                                            = defaultEepromData.socCalcMode;
     383  eepromData.changedData.cellRatedDischargeTime                                                                         = defaultEepromData.cellRatedDischargeTime;
    459384
    460385  // Schaltausgänge
    461   dataToStore->changedData.lvpStart                                                                                                     = defaultEepromData.lvpStart;
    462   dataToStore->changedData.lvpStop                                                                                                      = defaultEepromData.lvpStop;
    463   dataToStore->changedData.ovpStart                                                                                                     = defaultEepromData.ovpStart;
    464   dataToStore->changedData.ovpStop                                                                                                      = defaultEepromData.ovpStop;
    465   dataToStore->changedData.loadCurrentLimit                                                                                     = defaultEepromData.loadCurrentLimit;
    466   dataToStore->changedData.chargeCurrentLimit                                                                           = defaultEepromData.chargeCurrentLimit;
    467   dataToStore->changedData.chargeStopHighTemperatureStart                                                       = defaultEepromData.chargeStopHighTemperatureStart;
    468   dataToStore->changedData.chargeStopHighTemperatureStop                                                        = defaultEepromData.chargeStopHighTemperatureStop;
    469   dataToStore->changedData.chargeStopLowTemperatureStart                                                        = defaultEepromData.chargeStopLowTemperatureStart;
    470   dataToStore->changedData.chargeStopLowTemperatureStop                                                         = defaultEepromData.chargeStopLowTemperatureStop;
    471   dataToStore->changedData.dischargeStopHighTemperatureStart                                            = defaultEepromData.dischargeStopHighTemperatureStart;
    472   dataToStore->changedData.dischargeStopHighTemperatureStop                                                     = defaultEepromData.dischargeStopHighTemperatureStop;
    473   dataToStore->changedData.dischargeStopLowTemperatureStart                                                     = defaultEepromData.dischargeStopLowTemperatureStart;
    474   dataToStore->changedData.dischargeStopLowTemperatureStop                                                      = defaultEepromData.dischargeStopLowTemperatureStop;
    475 
    476   dataToStore->changedData.uBatEmptyCompStartTemp                                                                       = defaultEepromData.uBatEmptyCompStartTemp;
    477   dataToStore->changedData.uBatEmptyCompStopTemp                                                                        = defaultEepromData.uBatEmptyCompStopTemp;
    478   dataToStore->changedData.uBatEmptyCompStopVolt                                                                        = defaultEepromData.uBatEmptyCompStopVolt;
    479 
    480   dataToStore->changedData.extraDischargeStrom_mA                                                                       = defaultEepromData.extraDischargeStrom_mA;
    481   dataToStore->changedData.cefW                                                                                                         = defaultEepromData.cefW;
    482   dataToStore->changedData.batteryEmptyDetectionMode                                                            = defaultEepromData.batteryEmptyDetectionMode;
     386  eepromData.changedData.lvpStart                                                                                                       = defaultEepromData.lvpStart;
     387  eepromData.changedData.lvpStop                                                                                                        = defaultEepromData.lvpStop;
     388  eepromData.changedData.ovpStart                                                                                                       = defaultEepromData.ovpStart;
     389  eepromData.changedData.ovpStop                                                                                                        = defaultEepromData.ovpStop;
     390  eepromData.changedData.loadCurrentLimit                                                                                       = defaultEepromData.loadCurrentLimit;
     391  eepromData.changedData.chargeCurrentLimit                                                                                     = defaultEepromData.chargeCurrentLimit;
     392  eepromData.changedData.chargeStopHighTemperatureStart                                                         = defaultEepromData.chargeStopHighTemperatureStart;
     393  eepromData.changedData.chargeStopHighTemperatureStop                                                          = defaultEepromData.chargeStopHighTemperatureStop;
     394  eepromData.changedData.chargeStopLowTemperatureStart                                                          = defaultEepromData.chargeStopLowTemperatureStart;
     395  eepromData.changedData.chargeStopLowTemperatureStop                                                           = defaultEepromData.chargeStopLowTemperatureStop;
     396  eepromData.changedData.dischargeStopHighTemperatureStart                                                      = defaultEepromData.dischargeStopHighTemperatureStart;
     397  eepromData.changedData.dischargeStopHighTemperatureStop                                                       = defaultEepromData.dischargeStopHighTemperatureStop;
     398  eepromData.changedData.dischargeStopLowTemperatureStart                                                       = defaultEepromData.dischargeStopLowTemperatureStart;
     399  eepromData.changedData.dischargeStopLowTemperatureStop                                                        = defaultEepromData.dischargeStopLowTemperatureStop;
     400
     401  eepromData.changedData.uBatEmptyCompStartTemp                                                                         = defaultEepromData.uBatEmptyCompStartTemp;
     402  eepromData.changedData.uBatEmptyCompStopTemp                                                                          = defaultEepromData.uBatEmptyCompStopTemp;
     403  eepromData.changedData.uBatEmptyCompStopVolt                                                                          = defaultEepromData.uBatEmptyCompStopVolt;
     404
     405  eepromData.changedData.extraDischargeStrom_mA                                                                         = defaultEepromData.extraDischargeStrom_mA;
     406  eepromData.changedData.cefW                                                                                                           = defaultEepromData.cefW;
     407  eepromData.changedData.batteryEmptyDetectionMode                                                                      = defaultEepromData.batteryEmptyDetectionMode;
     408  eepromData.changedData.auxOutputMode                                                                                          = defaultEepromData.auxOutputMode;
     409  eepromData.changedData.auxOutputSetpointOn                                                                            = defaultEepromData.auxOutputSetpointOn;
     410  eepromData.changedData.auxOutputSetpointOff                                                                           = defaultEepromData.auxOutputSetpointOff;
     411  eepromData.changedData.auxOutputInverted                                                                                      = defaultEepromData.auxOutputInverted;
    483412 
    484413
    485 
    486  
    487 
    488   dataToStore->eepromState.writeCounter   = dataToStore->eepromState.writeCounter++;
    489   dataToStore->eepromState.structureSize  = sizeof(eeprom_stored_data_t);
    490   dataToStore->eepromState.revisionInfo   = 0;
    491   dataToStore->eepromState.firstStartId = CONFIG_ID;
    492 
    493   dataToStore->deviceInfo.deviceInfoWritten     = 1;
    494   dataToStore->deviceInfo.SN                            = data->s.parameter.sn;
    495 
    496   EEPROM_Write(0,0, (uint8_t*)dataToStore, SIZE_OF_DATA_TO_STORE);
    497 
    498  
     414  eepromData.eepromState.writeCounter           = eepromData.eepromState.writeCounter++;
     415  eepromData.eepromState.structureSize          = sizeof(eeprom_stored_data_t);
     416  eepromData.eepromState.revisionInfo           = 0;
     417  eepromData.eepromState.firstStartId           = CONFIG_ID;
     418
     419  eepromData.deviceInfo.deviceInfoWritten       = 1;
     420  eepromData.deviceInfo.SN                                      = data->s.parameter.sn;
     421
     422  EEPROM_Write(0,0, (uint8_t*)&eepromData, sizeof(eeprom_stored_data_t));
     423
    499424  return EEPROM_readConfig(data);
    500425}
     
    505430  /****************LESE_WERTE_AUS_SYSDATA*********************/
    506431  printf("EEPROM STORE CONFIG!\n");
    507   dataToStore = (eeprom_stored_data_t*) eepromData;
     432  dataToStore = (eeprom_stored_data_t*)&eepromData;
    508433
    509434  // Schnittstellenparameter
     
    578503  dataToStore->changedData.batteryEmptyDetectionMode = data->s.parameter.batteryEmptyDetectionMode;
    579504
     505  dataToStore->changedData.auxOutputMode        = data->s.parameter.auxOutputMode;
     506  dataToStore->changedData.auxOutputSetpointOn = data->s.parameter.auxOutputSetpointOn;
     507  dataToStore->changedData.auxOutputSetpointOff = data->s.parameter.auxOutputSetpointOff;
     508  dataToStore->changedData.auxOutputInverted    = data->s.parameter.auxOutputInverted;
     509
    580510  // Eeprom Status Infos
    581511  dataToStore->eepromState.writeCounter++;
     
    591521
    592522
    593   EEPROM_Write(0,0, (uint8_t*)dataToStore, SIZE_OF_DATA_TO_STORE);
     523  EEPROM_Write(0,0, (uint8_t*)dataToStore, sizeof(eeprom_stored_data_t));
    594524
    595525  return EEPROM_readConfig(data);
     
    605535
    606536
    607   EEPROM_Read(0, 0, (uint8_t*)eepromData,  sizeof(eepromData));
    608 
    609 
    610   dataToStore = (eeprom_stored_data_t*)eepromData;
     537  EEPROM_Read(0, 0, (uint8_t*)&eepromData,  sizeof(eepromData));
     538
     539
     540  dataToStore = (eeprom_stored_data_t*)&eepromData;
    611541
    612542  // Schnittstellenparameter
     
    680610  data->s.parameter.cefW                                                                                                                = dataToStore->changedData.cefW;
    681611  data->s.parameter.batteryEmptyDetectionMode                                                                   = dataToStore->changedData.batteryEmptyDetectionMode;
     612
     613  data->s.parameter.auxOutputMode                                                                                               = dataToStore->changedData.auxOutputMode;
     614  data->s.parameter.auxOutputSetpointOn                                                                                 = dataToStore->changedData.auxOutputSetpointOn;
     615  data->s.parameter.auxOutputSetpointOff                                                                                = dataToStore->changedData.auxOutputSetpointOff;
     616  data->s.parameter.auxOutputInverted                                                                                   = dataToStore->changedData.auxOutputInverted;
     617
    682618       
    683 
    684619
    685620  //  Geräteinformation
     
    719654}
    720655
     656//-----------------------------------------------------------------------------
    721657
    722658void EEPROM_Read (uint16_t page, uint16_t offset, uint8_t *data, uint16_t size)
     
    735671                uint16_t MemAddress = startPage<<paddrposition | offset;
    736672                uint16_t bytesremaining = bytestowrite(size, offset);
    737                 HAL_I2C_Mem_Read(EEPROM_I2C, EEPROM_ADDR, MemAddress, 2, &data[pos], bytesremaining, 1000);
     673                HAL_StatusTypeDef res = HAL_I2C_Mem_Read(EEPROM_I2C, EEPROM_ADDR, MemAddress, 2, &data[pos], bytesremaining, 1000);
     674#ifdef DEBUG
     675                //printf("MemAddress = 0x%04X, data ptr = 0x%08X, bytes_remaining = %u, res = %u\n", MemAddress, (uint32_t)&data[pos], bytesremaining, res);
     676#endif
    738677                startPage += 1;
    739678                offset=0;
     
    741680                pos += bytesremaining;
    742681        }
    743 
    744 }
    745 
     682}
     683
     684//-----------------------------------------------------------------------------
    746685
    747686void EEPROM_Write (uint16_t page, uint16_t offset, uint8_t *data, uint16_t size)
    748687{
    749 
    750688        // Find out the number of bit, where the page addressing starts
    751689        int paddrposition = PADDRPOSITION;
     
    768706                uint16_t bytesremaining = bytestowrite(size, offset);  // calculate the remaining bytes to be written
    769707
    770                 HAL_I2C_Mem_Write(EEPROM_I2C, EEPROM_ADDR, MemAddress, 2, &data[pos], bytesremaining, 1000);  // write the data to the EEPROM
     708                HAL_StatusTypeDef res = HAL_I2C_Mem_Write(EEPROM_I2C, EEPROM_ADDR, MemAddress, 2, &data[pos], bytesremaining, 1000);  // write the data to the EEPROM
     709#ifdef DEBUG
     710                //printf("MemAddress = 0x%04X, data ptr = 0x%08X, bytes_remaining = %u, res = %u\n", MemAddress, (uint32_t)&data[pos], bytesremaining, res);
     711#endif
    771712                startPage += 1;  // increment the page, so that a new page address can be selected for further write
    772713                offset=0;   // since we will be writing to a new page, so offset will be 0
  • 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 ****************************/
  • trunk/fw_g473rct/SES/src/sysdata.c

    r26 r28  
    5555        sys_data.s.values.message[0] =  'a';
    5656        sys_data.s.values.message[1] =  'b';
    57         sys_data.s.values.message[18] = 'y';
    58         sys_data.s.values.message[19] = 'z';
     57        sys_data.s.values.message[22] = 'y';
     58        sys_data.s.values.message[23] = 'z';
    5959
    6060}
  • trunk/fw_g473rct/SES/src/wh_counter.c

    r26 r28  
    4141  if (totalCharge == 0) totalCharge = sys_data.s.values.chargeTotalWh * 3600000;
    4242
     43  double cefwh;
     44  if (sys_data.s.values.calculatedCEFWh < 0)
     45  {
     46        cefwh =  sys_data.s.parameter.cef / 100.0;
     47  }
     48  else
     49  {
     50        cefwh =  sys_data.s.values.calculatedCEFWh / 1000.0;
     51  }
     52 
     53  double realStrom;
     54  realStrom = (int32_t) sys_data.s.values.batteryCurrent - sys_data.s.parameter.extraDischargeStrom_mA;
     55
    4356  //------------ separater CEF -----------
    4457  // bei Strom größer 0 -> Ladestrom CEF rechnen
    45   if (sys_data.s.values.batteryCurrent >= 0) {
    46     // 99 --> 99% --> 0.99
    47     int32_t cefW = sys_data.s.parameter.cefW;
    48     sys_data.s.values.correctedStromForChargeWhCnt = (sys_data.s.values.batteryCurrent * cefW) / 100;
    49     sys_data.s.values.correctedStromForChargeWhCnt -= sys_data.s.parameter.extraDischargeStrom_mA;
    50   } else {
     58  if (realStrom >= 0) {// 99 --> 99% --> 0.99
     59    sys_data.s.values.correctedStromForChargeWhCnt = (realStrom * cefwh) ;   
     60  }
     61  else
     62  {
    5163    sys_data.s.values.correctedStromForChargeWhCnt = sys_data.s.values.batteryCurrentCorrected;
    5264  }
     
    150162  return (int32_t)SoC;
    151163}
     164
    152165
    153166int32_t WH_COUNTER_GetSoCAutoTemp(void) {
     
    171184  // dazu zunächst den Mittelwert der noch verbleibenden Spannung vom aktuellen Zeitpunkt bis zur Abschaltung ermittelndazu
    172185  int64_t avgVoltage = (sys_data.s.values.batteryVoltage + sys_data.s.values.uBatEmptyTempComp) / 2;
     186
    173187
    174188  //Jetzt mit der verbleibene Kapazität die verbleibene Energie unter den aktuellen Bedingungen ermitteln (Spannung bei akt. Temp)
Note: See TracChangeset for help on using the changeset viewer.