Changeset 26 for trunk/fw_g473rct/Core


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
Location:
trunk/fw_g473rct/Core/Src
Files:
3 edited

Legend:

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

    r25 r26  
    6666  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
    6767  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
    68   hadc1.Init.DMAContinuousRequests = ENABLE;
     68  hadc1.Init.DMAContinuousRequests = DISABLE;
    6969  hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
    7070  hadc1.Init.OversamplingMode = ENABLE;
     
    9292  sConfig.Channel = ADC_CHANNEL_1;
    9393  sConfig.Rank = ADC_REGULAR_RANK_1;
    94   sConfig.SamplingTime = ADC_SAMPLETIME_92CYCLES_5;
     94  sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5;
    9595  sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED;
    9696  sConfig.OffsetNumber = ADC_OFFSET_NONE;
     
    132132  hadc2.Init.NbrOfConversion = 1;
    133133  hadc2.Init.DiscontinuousConvMode = DISABLE;
    134   hadc2.Init.DMAContinuousRequests = ENABLE;
     134  hadc2.Init.DMAContinuousRequests = DISABLE;
    135135  hadc2.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
    136136  hadc2.Init.OversamplingMode = ENABLE;
     
    148148  sConfig.Channel = ADC_CHANNEL_3;
    149149  sConfig.Rank = ADC_REGULAR_RANK_1;
    150   sConfig.SamplingTime = ADC_SAMPLETIME_92CYCLES_5;
     150  sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5;
    151151  sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED;
    152152  sConfig.OffsetNumber = ADC_OFFSET_NONE;
     
    438438    hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
    439439    hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
    440     hdma_adc1.Init.Mode = DMA_CIRCULAR;
     440    hdma_adc1.Init.Mode = DMA_NORMAL;
    441441    hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
    442442    if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
     
    491491    hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
    492492    hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
    493     hdma_adc2.Init.Mode = DMA_CIRCULAR;
     493    hdma_adc2.Init.Mode = DMA_NORMAL;
    494494    hdma_adc2.Init.Priority = DMA_PRIORITY_LOW;
    495495    if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
  • trunk/fw_g473rct/Core/Src/gpio.c

    r25 r26  
    9494  HAL_GPIO_Init(ADC_DATA_READY_GPIO_Port, &GPIO_InitStruct);
    9595
    96   /*Configure GPIO pins : FAULT_Pin COM_POWERPRO_RES_Pin */
    97   GPIO_InitStruct.Pin = FAULT_Pin|COM_POWERPRO_RES_Pin;
     96  /*Configure GPIO pin : FAULT_Pin */
     97  GPIO_InitStruct.Pin = FAULT_Pin;
     98  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
     99  GPIO_InitStruct.Pull = GPIO_PULLUP;
     100  HAL_GPIO_Init(FAULT_GPIO_Port, &GPIO_InitStruct);
     101
     102  /*Configure GPIO pin : COM_POWERPRO_RES_Pin */
     103  GPIO_InitStruct.Pin = COM_POWERPRO_RES_Pin;
    98104  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    99105  GPIO_InitStruct.Pull = GPIO_NOPULL;
    100   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
     106  HAL_GPIO_Init(COM_POWERPRO_RES_GPIO_Port, &GPIO_InitStruct);
    101107
    102108  /* EXTI interrupt init*/
  • 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.