Ignore:
Timestamp:
Sep 8, 2025, 6:57:30 PM (7 weeks ago)
Author:
f.jahn
Message:
  • Bug in ADC Kalibrierung (STM32 ADC Strom) behoben
  • DMA Buffer für ADC 1 und ADC wird vor Überschreibung während bearbeitung geschützt, indem Datenübertragung nur einmalig erfolgt und erst nach Auswertung wieder gestartet wird
  • RS485Modbus: Timeout Zeit wird für Baudraten >19200 korrekt berechnet
  • Hardware ID geändert
  • Separates Register für "Batterie Empty detection mode" auf Adresse 92 angelegt
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/fw_g473rct/Core/Src/main.c

    r25 r26  
    183183  }
    184184
     185  LoadBackupRegister();
     186
     187
    185188    // Modbus Initialisierung
    186189  mbInit(&modbusData, sys_data.s.parameter.baudrate, sys_data.s.parameter.parityMode, sys_data.s.parameter.stopBit, &huart2);
     
    241244  }
    242245
    243   LoadBackupRegister();
     246 
    244247  /* USER CODE END 2 */
    245248
     
    255258          //Mit ADC_DIV2,Sample time 12,5Cycklen, ADC Clock 50Mhz, Oversampling 256
    256259          //Tconv = 6400 Takte = 0,128ms Pro Konvertierung. Also für 100 messwerte 12,8mS
    257           BATTERY_VOLTAGE_Exec( adc12Data[0][1]);
    258           FAST_CURRENT_Exec(adc12Data[0][0]);
    259           sys_data.s.values.esrCalcStatus =  ESR_FAST_Exec();
     260          BATTERY_VOLTAGE_Exec( adc12Data[SAMPLE_ARRAY_SIZE-1][1]);
     261          FAST_CURRENT_Exec(adc12Data[SAMPLE_ARRAY_SIZE-1][0]);
     262          ESR_FAST_Exec();
     263          sys_data.s.values.batteryPower = ((int64_t) sys_data.s.values.batteryVoltage * (int64_t)sys_data.s.values.batteryCurrent) / 1000LL;
     264          sys_data.s.values.power_Fast = ((int64_t) sys_data.s.values.batteryVoltage * (int64_t)sys_data.s.values.fast_current) / 1000LL;
    260265          newADC12Data = 0;
     266         
     267
     268          if (HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t *)adc12Data,SAMPLE_ARRAY_SIZE))  //Start ADC interleaved mode
     269      {
     270         /* Start Error */
     271         Error_Handler();
     272      }
    261273
    262274        }
     
    287299    {
    288300      ADS1260_ConversionFinished();
    289       ESR_Exec();
     301      sys_data.s.values.esrCalcStatus = ESR_Exec();
    290302
    291303      newCurrentValue = 0;
     
    316328
    317329      sys_data.s.values.onTime++;
     330          sys_data.s.values.lastTimeVbatEmpty++;
     331          sys_data.s.values.lastTimeVbatFull++;
    318332      // Funktions Led blinken
    319333      if (silentmode == 0)
     
    358372          case COMMAND_STORE_WITH_SERIAL_NUMBER:              EEPROM_storeConfig(&sys_data,1);                                                                                    break;        // Seriennummer schreiben
    359373          case COMMAND_RESTART:                               NVIC_SystemReset();                                                                                                                 break;
    360           case COMMAND_BATTERY_CURRENT_OFFSET_CAL:            ADS_1260_BatteryCurrentOffsetCalibrationStart(&sys_data);                                   break;
     374          case COMMAND_BATTERY_CURRENT_OFFSET_CAL:           
     375                                ADS_1260_BatteryCurrentOffsetCalibrationStart(&sys_data);
     376                                CurrentOffsetCal(adc12Data[SAMPLE_ARRAY_SIZE - 1][0]); 
     377                                break;
    361378          case COMMAND_BATTERY_CURRENT_OFFSET_COMMONMODE_CAL: ADS_1260_BatteryCurrentOffsetCommonModeErrorComepensationStart(&sys_data);  break;
    362379          case COMMAND_BATTERY_CURRENT_OFFSET_TEMP_CAL:       ADS_1260_BatteryCurrentOffsetTemperatureErrorComepensationStart();                  break;
    363           case COMMAND_BATTERY_CURRENT_GAIN_CAL:              ADS_1260_BatteryCurrentGainCalibrationStart(&sys_data);                                     break;
     380          case COMMAND_BATTERY_CURRENT_GAIN_CAL:             
     381                                ADS_1260_BatteryCurrentGainCalibrationStart(&sys_data);
     382                                CurrentGainCal(adc12Data[SAMPLE_ARRAY_SIZE - 1][0]);     
     383                                break;
    364384          case COMMAND_BATTERY_CURRENT_GAIN_TEMP_SHUNT_CAL:   ADS_1260_BatteryCurrentGainTemperatureCalibrationShuntStart();                      break;
    365385//        case COMMAND_BATTERY_CURRENT_GAIN_TEMP_CHIP_CAL:    ADS_1260_BatteryCurrentGainTemperatureCalibrationChipStart(); break;
     
    450470  RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV2;
    451471  RCC_OscInitStruct.PLL.PLLN = 16;
    452   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
     472  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV8;
    453473  RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
    454474  RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
     
    480500          printf("BackupRegisterData available\r\n");
    481501          sys_data.s.values.dischargeTotalAh = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR2);
     502
     503          sys_data.s.values.chargeTotalAh = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR3);
     504          sys_data.s.values.dischargeTotalWh = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR4);
     505          sys_data.s.values.chargeTotalWh = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR5);
     506
     507          sys_data.s.values.onTime = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR6);
     508
     509
     510          sys_data.s.values.detectedCapacity = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR7);
     511          sys_data.s.values.detectedEnergy = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR8);
     512
     513
     514          sys_data.s.values.mAh_AutoMode = (int32_t) HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR9);
     515          sys_data.s.values.mWh_AutoMode = (int32_t) HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR10);
     516          sys_data.s.values.mAhCounter =  (int32_t) HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR11);
     517
     518
     519
     520          sys_data.s.values.mAs_AutoMode = sys_data.s.values.mAh_AutoMode * 3600LL;
     521          sys_data.s.values.mWs_AutoMode = sys_data.s.values.mWh_AutoMode * 3600LL;
     522          sys_data.s.values.mAsCounter = sys_data.s.values.mAhCounter  * 3600LL;
     523
     524
    482525        }
    483526
     
    514557
    515558
    516                 HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR8, sys_data.s.values.mAh_AutoMode);
    517                 HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR8, sys_data.s.values.mWh_AutoMode);
    518                 HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR8, sys_data.s.values.mAhCounter);
     559                HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR9, sys_data.s.values.mAh_AutoMode);
     560                HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR10, sys_data.s.values.mWh_AutoMode);
     561                HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR11, sys_data.s.values.mAhCounter);
    519562
    520563
Note: See TracChangeset for help on using the changeset viewer.