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

RTC implementiert

Location:
trunk/fw_g473rct/SES/src
Files:
1 added
7 edited

Legend:

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

    r20 r25  
    6161
    6262#define DEFAULT_ADS1260_TRANSMIT_TIMEOUT            (10)
    63 #define DEFAULT_ADS1260_TRANSMIT_RECEIVE_TIMEOUT    (10)
     63#define DEFAULT_ADS1260_TRANSMIT_RECEIVE_TIMEOUT    (1000)
    6464#define ADS1260_SELF_OFFSET_CALIBRATION_TIMEOUT     (2000)    // > 16 * sampletime muss eingestellt werden
    6565#define ADS1260_SYSTEM_OFFSET_CALIBRATION_TIMEOUT   (2000)
     
    776776
    777777  /* 4*/ //while(HAL_GPIO_ReadPin(ADC_DATA_READY_GPIO_Port, ADC_DATA_READY_Pin) == GPIO_PIN_RESET);
    778          HAL_NVIC_SetPriority(EXTI2_IRQn, 2, 0);
    779          HAL_NVIC_EnableIRQ(EXTI2_IRQn);
     778         //HAL_NVIC_SetPriority(EXTI2_IRQn, 2, 0);
     779         //HAL_NVIC_EnableIRQ(EXTI2_IRQn);
    780780
    781781  /* 5*/ ADS_1260_SetExternalReference(&hspi3);
     
    10051005        //HAL_GPIO_WritePin(ADC_SPI1_NSS_GPIO_Port, ADC_SPI1_NSS_Pin, GPIO_PIN_SET);
    10061006
    1007         if (Dout[0] == replyHeader && Dout[1] == Din[0] && Dout[2] == Din[1] && Dout[3] == Din[2] && Dout[5] == HAL_CRC_Calculate(&hcrc, (uint32_t*)&Dout[4], 1))
     1007        if (Dout[0] == replyHeader && Dout[1] == Din[0] && Dout[2] == Din[1] && Dout[3] == Din[2] && Dout[5] == HAL_CRC_Calculate(&hcrc, (uint32_t*)&Dout[4], 1))               
    10081008        {
    10091009            if ((Dout[4] & (1U << MODE3_STATENB)) && (Dout[4] & (1U << MODE3_CRCENB)))
  • trunk/fw_g473rct/SES/src/battery_voltage.c

    r24 r25  
    2020
    2121
    22 #define BATTERY_VOLTAGE_VOLTAGE_DIVIDER       6.0
    23 #define ADC_RESOLUTION                                            32768.0 //65536/2 da im differential mode
    24 #define ADC_OFFSET                                                        32768.0
    2522
    2623//      --- LOKALE TYPE DEFS - bitte hier dokumentieren-------------------------------
     
    5451
    5552  //Umrechung auf Eingangsspannung am Gerät mit Teiler
    56   sys_data.s.values.batteryVoltage = ((avgVal-ADC_OFFSET) * VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER ) / ADC_RESOLUTION;
     53  sys_data.s.values.batteryVoltage = ((avgVal-BATTERY_VOLTAGE_ADC_OFFSET) * VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER ) / BATTERY_VOLTAGE_ADC_RESOLUTION;
    5754
    5855 
     
    7673  //Berechnung schnelle Wert ohne Glättung:
    7774  //Umrechung auf Eingangsspannung am Gerät mit Teiler
    78   sys_data.s.values.fast_voltage = ((newVal-ADC_OFFSET) * VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER ) / ADC_RESOLUTION;
     75  sys_data.s.values.fast_voltage = ((newVal-BATTERY_VOLTAGE_ADC_OFFSET) * VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER ) / BATTERY_VOLTAGE_ADC_RESOLUTION;
    7976
    8077
  • 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
  • trunk/fw_g473rct/SES/src/esr.c

    r20 r25  
    44#include "esr.h"
    55#include <stdlib.h>
    6 #include <stdio.h>
     6#include "main.h"
     7#include "battery_voltage.h"
     8#include "fast_current.h"
     9
    710
    811
    912int32_t current_buffer[SAMPLE_ARRAY_SIZE]; 
    1013int32_t voltage_buffer[SAMPLE_ARRAY_SIZE];
    11 int32_t current_buffer_fast[SAMPLE_ARRAY_SIZE]; 
    12 int32_t voltage_buffer_fast[SAMPLE_ARRAY_SIZE];
     14//int32_t current_buffer_fast[SAMPLE_ARRAY_SIZE]; 
     15//int32_t voltage_buffer_fast[SAMPLE_ARRAY_SIZE];
     16
     17extern uint16_t adc12Data[SAMPLE_ARRAY_SIZE][2];
    1318
    1419
     
    105110    for (x=0; x < SAMPLE_ARRAY_SIZE; x++)
    106111    {
    107       sys_data.s.values.current_buffer[(SAMPLE_ARRAY_SIZE-1)-x] = current_buffer[x];
    108       sys_data.s.values.voltage_buffer[(SAMPLE_ARRAY_SIZE-1)-x] = voltage_buffer[x];
     112      sys_data.s.values.current_buffer[(SAMPLE_ARRAY_SIZE-1)-x] = adc12Data[x][0];
     113      sys_data.s.values.voltage_buffer[(SAMPLE_ARRAY_SIZE-1)-x] = adc12Data[x][1];
    109114    }
    110115
     
    126131  sys_data.s.values.esrCalcTime = sys_data.s.values.onTime - last_refresh;
    127132
    128   for (x=SAMPLE_ARRAY_SIZE-1; x>0; x--)
    129   {
    130     current_buffer_fast[x] = current_buffer_fast[x-1];
    131     voltage_buffer_fast[x] = voltage_buffer_fast[x-1];
    132   }
    133 
    134   // Neue Werte ins array aufnehmen
    135   current_buffer_fast[0] = sys_data.s.values.fast_current;
    136   voltage_buffer_fast[0] = sys_data.s.values.shuntVoltage;
    137133
    138134
     
    150146  for (x=0; x < SAMPLE_ARRAY_SIZE; x++)
    151147  {
    152      if (abs(current_buffer_fast[x]) < minI)  { minI = abs(current_buffer_fast[x]); minIPos  = x; }
    153      if (abs(current_buffer_fast[x]) >= maxI) { maxI = abs(current_buffer_fast[x]); maxdIPos = x; } 
    154      if (abs(voltage_buffer_fast[x]) < minU)  { minU = abs(voltage_buffer_fast[x]); minUPos = x; }
    155      if (abs(voltage_buffer_fast[x]) > maxU)  { maxU = abs(voltage_buffer_fast[x]); maxUPos = x; }
     148     if (adc12Data[x][0] < minI)  { minI = adc12Data[x][0]; minIPos  = x; }
     149     if (adc12Data[x][0] >= maxI) { maxI = adc12Data[x][0]; maxdIPos = x; } 
     150     if (adc12Data[x][1] < minU)  { minU = adc12Data[x][1]; minUPos = x; }
     151     if (adc12Data[x][1] > maxU)  { maxU = adc12Data[x][1]; maxUPos = x; }
    156152  }
    157153
     
    160156
    161157  //Delta berechnen
    162   int32_t dI = abs (maxI - minI);
    163   int32_t dU = abs (maxU - minU);
     158  int32_t dI = maxI - minI;
     159  int32_t dU = maxU - minU;
     160
     161  //Umrechnung in mV / mA
     162  dI = dI * ((int64_t) VREF / FAST_CURRENT_SHUNT_RESISTOR /  FAST_CURRENT_I_SENSE_GAIN /  FAST_CURRENT_ADC_RESOLUTION);
     163  dI = dI * (sys_data.s.parameter.batteryCurrentGainCorrectionFaktor / 1000000.0);
     164
     165  dU = dU  * VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER / BATTERY_VOLTAGE_ADC_RESOLUTION ;
     166 
    164167
    165168  //Minimale Belastung Prüfen ob es genügent Änderungen gab
     
    168171  int32_t min_dI;
    169172  min_dI = sys_data.s.parameter.cellCapacity /  sys_data.s.parameter.cellRatedDischargeTime; //Nennlaststrom  in mA
    170   min_dI = min_dI / 4 ;
    171 
    172   int32_t min_dU = 100;
    173  
    174   if( dI < min_dI)
     173  min_dI = min_dI / 10 ;
     174 
     175
     176  int32_t min_dU = 10;
     177 
     178  if( abs(dI) < min_dI)
    175179  {
    176180 
     
    180184  //printf("dI change!\r\n");
    181185
    182   if (dU < min_dU) {
     186  if (abs(dU) < min_dU) {
    183187    return -2;
    184188  }
     
    191195  int32_t dIMaxPos=-1;
    192196 
     197
     198
     199  //Finde Position der flanke
    193200  for (x=0; x < (SAMPLE_ARRAY_SIZE-1); x++)
    194201  {
    195     dIx = abs(current_buffer_fast[x+1] - current_buffer_fast[x]);
     202    dIx = adc12Data[x+1][0] - adc12Data[x][0];
    196203    if (dIx > dIMax) { dIMax = dIx; dIMaxPos = x; }
    197204  }
    198205
    199 
    200 
    201   if (dIMaxPos == SAMPLE_ARRAY_SIZE / 2)
    202   {
    203     //ESR berechnen!
    204     sys_data.s.values.esr_fast = ( (double)dU / (double) dI) * 1000;
    205     last_refresh = sys_data.s.values.onTime;
    206      
    207 
    208     for (x=0; x < SAMPLE_ARRAY_SIZE; x++)
    209     {
    210       sys_data.s.values.current_buffer_fast[(SAMPLE_ARRAY_SIZE-1)-x] = current_buffer_fast[x];
    211       sys_data.s.values.voltage_buffer_fast[(SAMPLE_ARRAY_SIZE-1)-x] = voltage_buffer_fast[x];
    212     }
    213 
    214 
    215 
    216 
    217   }
     206  if ((dIMaxPos < 5 ) || (dIMaxPos > (SAMPLE_ARRAY_SIZE-5) ))
     207  {
     208        return -3;
     209  }
     210
     211
     212  //ESR berechnen!
     213  sys_data.s.values.esr_fast = ( (double)dU / (double) dI) * 1000;
     214  last_refresh = sys_data.s.values.onTime;
     215       
     216
     217  for (x=0; x < SAMPLE_ARRAY_SIZE; x++)
     218  {
     219        sys_data.s.values.current_buffer_fast[x] = (int32_t) adc12Data[x][0] - FAST_CURRENT_ADC_OFFSET  ;
     220        sys_data.s.values.voltage_buffer_fast[x] = (int32_t) adc12Data[x][1] - BATTERY_VOLTAGE_ADC_OFFSET ;
     221  }
     222
     223
     224
     225
     226 
    218227  return 0;   
    219228}
  • trunk/fw_g473rct/SES/src/fast_current.c

    r24 r25  
    1717
    1818//      --- LOKALE DEFINES - bitte hier dokumentieren --------------------------------
    19 
    20 #define I_SENSE_GAIN    40.0
    21 #define ADC_OFFSET                                                        32768
    22 #define ADC_RESOLUTION                                            32768 //65536/2 da im differential mode
    23 
    24 
    25   #if (DEVICETYPE == 500)
    26     #define SHUNT_RESISTOR      0.000125       
    27   #elif (DEVICETYPE == 250)
    28     #define SHUNT_RESISTOR      0.000250       
    29   #elif (DEVICETYPE == 125)
    30     #define SHUNT_RESISTOR      0.000500       
    31   #else
    32   #error No valid device type
    33   #endif
    34                
    3519
    3620
     
    5539  //Umrechung auf Strom
    5640  double temp_current;
    57   temp_current = ((int32_t) newVal - ADC_OFFSET) * VREF ;
    58   temp_current = temp_current / ADC_RESOLUTION;
    59   temp_current = temp_current / I_SENSE_GAIN ;
    60   temp_current = temp_current / SHUNT_RESISTOR ;
     41  temp_current = ((int32_t) newVal - FAST_CURRENT_ADC_OFFSET) * VREF ;
     42  temp_current = temp_current / FAST_CURRENT_ADC_RESOLUTION;
     43  temp_current = temp_current / FAST_CURRENT_I_SENSE_GAIN ;
     44  temp_current = temp_current / FAST_CURRENT_SHUNT_RESISTOR ;
    6145  sys_data.s.values.fast_current = temp_current * (sys_data.s.parameter.batteryCurrentGainCorrectionFaktor / 1000000.0);
    6246 
  • trunk/fw_g473rct/SES/src/main.c

    r24 r25  
    4444#include "chip_temperature.h"
    4545#include "shunt_temperature.h"
     46#include "esr.h"
     47#include "ads1260.h"
     48#include "outputs.h"
     49#include "crc.h"
    4650/* USER CODE END Includes */
    4751
     
    139143  MX_USB_PCD_Init();
    140144  /* USER CODE BEGIN 2 */
     145  MX_CRC_Init(); //Cube is not generating this call ?!
    141146  printf("Test debug io\r\n");
    142147  SYS_DATA_Init();
     
    207212     Error_Handler();
    208213  }
     214
     215
     216  // ADS1260 Initialierung
     217  ADS1260_init();
     218  printf("ADS1260 Init\n");
     219  OUTPUTS_Init();
    209220
    210221  /* USER CODE END 2 */
     
    249260      sys_data.s.values.lvp_sense =  (adc5Data[3] * VREF * 21 ) / 65536.0;
    250261        }
     262
     263
     264        if (newCurrentValue == 1)
     265    {
     266      ADS1260_ConversionFinished();
     267      ESR_Exec();
     268
     269      newCurrentValue = 0;
     270
     271    }
    251272
    252273        if(sys_data.s.parameter.command != 0)
  • trunk/fw_g473rct/SES/src/sysdata.c

    r23 r25  
    3737
    3838
    39         sys_data.s.parameter.fw_revision_major     = 2;
    40         sys_data.s.parameter.fw_revision_minor     = 1;
    41         sys_data.s.parameter.fw_revision_revision  = 5;
     39        sys_data.s.parameter.fw_revision_major     = 1;
     40        sys_data.s.parameter.fw_revision_minor     = 0;
     41        sys_data.s.parameter.fw_revision_revision  = 0;
    4242
    4343        sys_data.s.values.batteryCurrentMax = INT32_MIN;
     
    5353        sys_data.s.parameter.test[3] = 5;
    5454
     55        sys_data.s.values.message[0] =  'a';
     56        sys_data.s.values.message[1] =  'b';
     57        sys_data.s.values.message[18] = 'y';
     58        sys_data.s.values.message[19] = 'z';
     59
    5560}
Note: See TracChangeset for help on using the changeset viewer.