Ignore:
Timestamp:
Sep 7, 2025, 3:51:43 PM (7 weeks ago)
Author:
f.jahn
Message:

RTC implementiert

File:
1 edited

Legend:

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

    r20 r25  
    9494  int16_t         uBatEmptyCompStopTemp;                                        // We stop calculating uBatEmpty compensations when cell temperature is lower than this value
    9595  uint16_t        uBatEmptyCompStopVolt;                                        // uBatEmpty Voltage at temperatures lower than lvpCompStopTemp
    96 
    9796  int16_t         extraDischargeStrom_mA;                                       // For example, current that consumes LiPro itself
    98   uint32_t        dischargeTotalAh;
    99   uint32_t        chargeTotalAh;
    100   uint32_t        dischargeTotalWh;                                                     // 154-155      [mAs]
    101   uint32_t        chargeTotalWh;                                                        // 156-157      [mAs]
    102 
    10397  uint16_t        cefW;
    104   uint32_t        onTime;
     98
    10599
    106100} eeprom_data_t;
    107101
    108 typedef struct
    109 {
    110   // Schnittstellenparameter
    111   uint32_t        baudrate;
    112   uint16_t        parityMode;
    113   uint16_t        stopBits;
    114   uint16_t        slave_adress;
    115   uint16_t        ibn_day;
    116   uint16_t        ibn_month;
    117   uint16_t        ibn_year;
    118   uint16_t        user_id;
    119 
    120   // Offset und Gain
    121   int16_t         batteryCurrentOffsetRefTemperatureShunt;
    122   int16_t         batteryCurrentOffsetRefTemperatureChip;
    123   int16_t         batteryCurrentGainRefTempShunt;
    124   int16_t         batteryCurrentGainRefTempChip;
    125   int16_t         batteryCurrentOffsetTemperatureCalibrationTemperature;
    126   int16_t         batteryCurrentGainTemperatureCalibrationShuntTemperature;
    127   int16_t         batteryCurrentGainTemperatureCalibrationChipTemperature;
    128   int32_t         batteryCurrentOffsetRefshuntVoltage;
    129   int32_t         batteryCurrentOffsetCommonModeCalibrationVoltage;
    130   int32_t         batteryCurrentOffsetCommonModeCompensationFactor;
    131   int32_t         batteryCurrentOffsetTemperatureCompensationFactor;
    132   int32_t         batteryCurrentGainRefCurrent;
    133   int32_t         batteryCurrentGainTemperatureCompensationShuntFactor;
    134   int32_t         batteryCurrentGainTemperatureCompensationChipFactor;
    135 
    136   int32_t         currentOffset;
    137   uint32_t        currentGain;
    138 
    139   int64_t         mAsCounter;
    140   int32_t         detectedCapacity;
    141   int32_t         detectedEnergy;
    142   int32_t         mAh_AutoMode;
    143   int32_t         mWh_AutoMode;
    144 
    145   // battery parameter
    146   uint16_t        cef;
    147   uint16_t        peukert;
    148   uint32_t        cellCapacity;
    149   uint32_t        cellEnergy;
    150   uint16_t        iBatFull;
    151   uint16_t        tBatFull;
    152   uint16_t        uBatFull;
    153   uint16_t        uBatEmpty;
    154   uint8_t         socCalcMode;
    155   uint16_t        cellRatedDischargeTime;
    156 
    157   // Schaltausgänge
    158   uint16_t        lvpStart;                                                                     // Spannung ab der die LOW Voltage Protection aktiv wird in mV
    159   uint16_t        lvpStop;                                                                      // Spannung ab der die LOW Voltage Protection wieder inaktiv wird
    160   uint16_t        ovpStart;                                                                     // Spannung ab der die OVER Voltage Protection aktiv wird in mV
    161   uint16_t        ovpStop;                                                                      // Spannung ab der die OVER Voltage Protection wieder inaktiv wird
    162   int16_t         loadCurrentLimit;                                                     // maximaler Laststrom in A wenn der Strom größer ist als der eingestelle Wert dann wird die Laststrom Protection aktiv
    163   int16_t         chargeCurrentLimit;                                           // maximaler Ladestrom in A wenn der Strom größer ist als der eingestelle Wert dann wird die Ladestrom Protection aktiv
    164   int16_t         chargeStopHighTemperatureStart;                       // Abschalttemperatur Ladung wegen zu hoher Temperatur
    165   int16_t         chargeStopHighTemperatureStop;                        // Wiedereinschalttemperatur
    166   int16_t         chargeStopLowTemperatureStart;                        // Abschalttemperatur Ladung wegen zu niedriger Temperatur
    167   int16_t         chargeStopLowTemperatureStop;                         // Wiedereinschalttemperatur
    168   int16_t         dischargeStopHighTemperatureStart;            // Abschalttemperatur Entladung wegen zu hoher Temperatur
    169   int16_t         dischargeStopHighTemperatureStop;                     // Wiedereinschalttemperatur
    170   int16_t         dischargeStopLowTemperatureStart;                     // Abschalttemperatur EntLadung wegen zu niedriger Temperatur
    171   int16_t         dischargeStopLowTemperatureStop;                      // Wiedereinschalttemperatur
    172 
    173   int16_t         uBatEmptyCompStartTemp;                                       // We start calculating uBatEmpty compensations only when cell temperature is lower than this value
    174   int16_t         uBatEmptyCompStopTemp;                                        // We stop calculating uBatEmpty compensations when cell temperature is lower than this value
    175   uint16_t        uBatEmptyCompStopVolt;                                        // uBatEmpty Voltage at temperatures lower than lvpCompStopTemp
    176 
    177   int16_t         extraDischargeStrom_mA;                                       // For example, current that consumes LiPro itself
    178   uint32_t        dischargeTotalAh;
    179   uint32_t        chargeTotalAh;
    180   uint32_t        dischargeTotalWh;                                                     // 154-155      [mAs]
    181   uint32_t        chargeTotalWh;                                                        // 156-157      [mAs]
    182 
    183   uint16_t        cefW;
    184   uint32_t        onTime;
    185 
    186 }eeprom_old_data_t;
     102
    187103
    188104// Substitute for #if sizeof(some_type) == sizeof(another_type) functionality
     
    248164
    249165// muss modulo 8 noch hinzufügen wg 8 byte alignement
    250 static uint64_t eepromData[(SIZE_OF_DATA_TO_STORE / 8) + 1];
     166static uint8_t eepromData[SIZE_OF_DATA_TO_STORE];
    251167
    252168
     
    336252
    337253        /* extraDischargeStrom_mA       */                                                                                      7,                              // mA, current that LiPro consumes itself
    338         /* dischargeTotalAh                     */                                                                                      0,                              // Ah for negative current counter
    339         /* chargeTotalAh                        */                                                                                      0,                              // Ah for total charge counter
    340         /* dischargeTotalWh                     */                                                                                      0,
    341         /* chargeTotalWh                        */                                                                                      0,
    342 
    343254        /* cefW         */                                                                                                                      90,                             // 90% cef for Wh calculations
    344         /* onTime       */                                                                                                                      0
     255       
    345256
    346257};
     
    359270startType_t EEPROM_isFirstStart(void)
    360271{
    361   // sizeof eeprom_new_data_t must not be equal to size of eeprom_old_data_t
    362   BUILD_BUG_ON(sizeof(eeprom_data_t) == sizeof(eeprom_old_data_t));
    363272
    364273  uint8_t firstStartCatcher;
     
    390299{
    391300  eeprom_stored_data_t* dataToStore;
    392   uint32_t PageError;
    393   uint32_t Address;
    394   uint32_t x;
    395 
    396301  printf("EEPROM FULL RESTORE!\n");
    397302
     
    458363
    459364  dataToStore->changedData.extraDischargeStrom_mA                                                                       = defaultEepromData.extraDischargeStrom_mA;
    460   dataToStore->changedData.dischargeTotalAh                                                                                     = defaultEepromData.dischargeTotalAh;
    461   dataToStore->changedData.chargeTotalAh                                                                                        = defaultEepromData.chargeTotalAh;
    462   dataToStore->changedData.dischargeTotalWh                                                                                     = defaultEepromData.dischargeTotalWh;
    463   dataToStore->changedData.chargeTotalWh                                                                                        = defaultEepromData.chargeTotalWh;
    464365  dataToStore->changedData.cefW                                                                                                         = defaultEepromData.cefW;
    465   dataToStore->changedData.onTime                                                                                                       = defaultEepromData.onTime;
    466 
    467   dataToStore->changedData.mAsCounter                                                                                           = defaultEepromData.mAsCounter;
    468   dataToStore->changedData.detectedCapacity                                                                                     = defaultEepromData.detectedCapacity;
    469   dataToStore->changedData.detectedEnergy                                                                                       = defaultEepromData.detectedEnergy;
    470   dataToStore->changedData.mAs_AutoMode                                                                                         = defaultEepromData.mAs_AutoMode;
    471   dataToStore->changedData.mWs_AutoMode                                                                                         = defaultEepromData.mWs_AutoMode;
    472 
     366 
     367
     368 
    473369  // Eeprom Status Infos
    474370  dataToStore->eepromState.writeCounter++;
     
    567463
    568464  dataToStore->changedData.extraDischargeStrom_mA                                                                       = defaultEepromData.extraDischargeStrom_mA;
    569   dataToStore->changedData.dischargeTotalAh                                                                                     = defaultEepromData.dischargeTotalAh;
    570   dataToStore->changedData.chargeTotalAh                                                                                        = defaultEepromData.chargeTotalAh;
    571465  dataToStore->changedData.cefW                                                                                                         = defaultEepromData.cefW;
    572   dataToStore->changedData.onTime                                                                                                       = defaultEepromData.onTime;
    573 
    574   // These fields are new
    575   dataToStore->changedData.mAsCounter                                                                                           = defaultEepromData.mAsCounter;
    576   dataToStore->changedData.detectedCapacity                                                                                     = defaultEepromData.detectedCapacity;
    577   dataToStore->changedData.detectedEnergy                                                                                       = defaultEepromData.detectedEnergy;
    578   dataToStore->changedData.mAs_AutoMode                                                                                         = defaultEepromData.mAs_AutoMode;
    579   dataToStore->changedData.mWs_AutoMode                                                                                         = defaultEepromData.mWs_AutoMode;
    580   dataToStore->changedData.dischargeTotalWh                                                                                     = defaultEepromData.dischargeTotalWh;
    581   dataToStore->changedData.chargeTotalWh                                                                                        = defaultEepromData.chargeTotalWh;
    582 
     466 
     467
     468
     469 
    583470
    584471  dataToStore->eepromState.writeCounter   = dataToStore->eepromState.writeCounter++;
     
    599486{
    600487  eeprom_stored_data_t* dataToStore;
    601   uint32_t PageError;
    602   uint32_t Address;
    603   uint32_t x;
    604488  /****************LESE_WERTE_AUS_SYSDATA*********************/
    605489  printf("EEPROM STORE CONFIG!\n");
     
    669553  dataToStore->changedData.uBatEmptyCompStopTemp = data->s.parameter.uBatEmptyCompStopTemp;
    670554  dataToStore->changedData.uBatEmptyCompStopVolt = data->s.parameter.uBatEmptyCompStopVolt;
    671 
    672555  dataToStore->changedData.extraDischargeStrom_mA = data->s.parameter.extraDischargeStrom_mA;
    673   dataToStore->changedData.dischargeTotalAh = data->s.values.dischargeTotalAh;
    674   dataToStore->changedData.chargeTotalAh = data->s.values.chargeTotalAh;
    675   dataToStore->changedData.dischargeTotalWh = data->s.values.dischargeTotalWh;
    676   dataToStore->changedData.chargeTotalWh = data->s.values.chargeTotalWh;
    677556  dataToStore->changedData.cefW = data->s.parameter.cefW;
    678   dataToStore->changedData.onTime = data->s.values.onTime;
    679 
    680   dataToStore->changedData.mAsCounter = data->s.values.mAsCounter;
    681   dataToStore->changedData.detectedCapacity = data->s.values.detectedCapacity;
    682   dataToStore->changedData.detectedEnergy = data->s.values.detectedEnergy;
    683   dataToStore->changedData.mAs_AutoMode = data->s.values.mAs_AutoMode;
    684   dataToStore->changedData.mWs_AutoMode = data->s.values.mWs_AutoMode;
    685 
     557 
    686558  // Eeprom Status Infos
    687559  dataToStore->eepromState.writeCounter++;
     
    781653
    782654  data->s.parameter.extraDischargeStrom_mA                                                                              = dataToStore->changedData.extraDischargeStrom_mA;
     655  data->s.parameter.cefW                                                                                                                = dataToStore->changedData.cefW;
     656
     657
     658  //  Geräteinformation
     659  data->s.parameter.sn                                                                                                                  = dataToStore->deviceInfo.SN;
     660
     661  // prüfe Eeprom Status Infos
     662  //dataToStore->eepromState.writeCounter ++ ;
     663  if (dataToStore->eepromState.structureSize != sizeof(eeprom_stored_data_t)) return HAL_ERROR;
     664  if (dataToStore->eepromState.revisionInfo != 0) return HAL_ERROR;
     665  if (dataToStore->eepromState.firstStartId != CONFIG_ID) return HAL_ERROR;
     666
     667
     668  return HAL_OK;
     669}
     670
     671/*Entfernte EEPROM Werte
     672
    783673  data->s.values.dischargeTotalAh                                                                                               = dataToStore->changedData.dischargeTotalAh;
    784674  data->s.values.chargeTotalAh                                                                                                  = dataToStore->changedData.chargeTotalAh;
    785675  data->s.values.dischargeTotalWh                                                                                               = dataToStore->changedData.dischargeTotalWh;
    786676  data->s.values.chargeTotalWh                                                                                                  = dataToStore->changedData.chargeTotalWh;
    787   data->s.parameter.cefW                                                                                                                = dataToStore ->changedData.cefW;
    788677  data->s.values.onTime                                                                                                                 = dataToStore->changedData.onTime;
    789 
    790678  data->s.values.mAsCounter                                                                                                             = dataToStore->changedData.mAsCounter;
    791679  data->s.values.detectedCapacity                                                                                               = dataToStore->changedData.detectedCapacity;
     
    793681  data->s.values.mAs_AutoMode                                                                                                   = dataToStore->changedData.mAs_AutoMode;
    794682  data->s.values.mWs_AutoMode                                                                                                   = dataToStore->changedData.mWs_AutoMode;
    795 
    796   //  Geräteinformation
    797   data->s.parameter.sn                                                                                                                  = dataToStore->deviceInfo.SN;
    798 
    799   // prüfe Eeprom Status Infos
    800   //dataToStore->eepromState.writeCounter ++ ;
    801   if (dataToStore->eepromState.structureSize != sizeof(eeprom_stored_data_t)) return HAL_ERROR;
    802   if (dataToStore->eepromState.revisionInfo != 0) return HAL_ERROR;
    803   if (dataToStore->eepromState.firstStartId != CONFIG_ID) return HAL_ERROR;
    804 
    805   return HAL_OK;
    806 }
     683*/
     684
    807685
    808686//--- NEW Functions
Note: See TracChangeset for help on using the changeset viewer.