Changeset 73 for trunk/fw_g473rct/Core/Src
- Timestamp:
- Aug 4, 2026, 1:53:58 PM (30 hours ago)
- Location:
- trunk/fw_g473rct/Core/Src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/fw_g473rct/Core/Src/adc.c
r71 r73 23 23 /* USER CODE BEGIN 0 */ 24 24 25 /* --------------- ACHTUNG --------- 26 - ADC1&2 und ADC3,4, 5 teilen sich den gleichen Prescaaler, deshalb muss 3 und 5 auch schnell takten 27 - SYNC nicht ASYNC als quelle nehmen, dadurch weniger Jitter 28 29 */ 25 30 /* USER CODE END 0 */ 26 31 … … 54 59 */ 55 60 hadc1.Instance = ADC1; 56 hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV 1;61 hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; 57 62 hadc1.Init.Resolution = ADC_RESOLUTION_12B; 58 63 hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 61 66 hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; 62 67 hadc1.Init.LowPowerAutoWait = DISABLE; 63 hadc1.Init.ContinuousConvMode = DISABLE;68 hadc1.Init.ContinuousConvMode = ENABLE; 64 69 hadc1.Init.NbrOfConversion = 1; 65 70 hadc1.Init.DiscontinuousConvMode = DISABLE; … … 120 125 */ 121 126 hadc2.Instance = ADC2; 122 hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV 1;127 hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; 123 128 hadc2.Init.Resolution = ADC_RESOLUTION_12B; 124 129 hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 127 132 hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV; 128 133 hadc2.Init.LowPowerAutoWait = DISABLE; 129 hadc2.Init.ContinuousConvMode = DISABLE;134 hadc2.Init.ContinuousConvMode = ENABLE; 130 135 hadc2.Init.NbrOfConversion = 1; 131 136 hadc2.Init.DiscontinuousConvMode = DISABLE; … … 151 156 sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED; 152 157 sConfig.OffsetNumber = ADC_OFFSET_NONE; 153 sConfig.Offset = 0; 158 sConfig.Offset = 0; //Spannung etwa 100mV erhöhen 159 154 160 if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) 155 161 { … … 179 185 */ 180 186 hadc3.Instance = ADC3; 181 hadc3.Init.ClockPrescaler = ADC_CLOCK_ ASYNC_DIV256;187 hadc3.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; 182 188 hadc3.Init.Resolution = ADC_RESOLUTION_12B; 183 189 hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 263 269 */ 264 270 hadc4.Instance = ADC4; 265 hadc4.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV 1;271 hadc4.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; 266 272 hadc4.Init.Resolution = ADC_RESOLUTION_12B; 267 273 hadc4.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 270 276 hadc4.Init.EOCSelection = ADC_EOC_SINGLE_CONV; 271 277 hadc4.Init.LowPowerAutoWait = DISABLE; 272 hadc4.Init.ContinuousConvMode = DISABLE;278 hadc4.Init.ContinuousConvMode = ENABLE; 273 279 hadc4.Init.NbrOfConversion = 1; 274 280 hadc4.Init.DiscontinuousConvMode = DISABLE; … … 295 301 sConfig.OffsetNumber = ADC_OFFSET_NONE; 296 302 sConfig.Offset = 0; 303 304 297 305 if (HAL_ADC_ConfigChannel(&hadc4, &sConfig) != HAL_OK) 298 306 { … … 321 329 */ 322 330 hadc5.Instance = ADC5; 323 hadc5.Init.ClockPrescaler = ADC_CLOCK_ ASYNC_DIV256;331 hadc5.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; 324 332 hadc5.Init.Resolution = ADC_RESOLUTION_12B; 325 333 hadc5.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 407 415 */ 408 416 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12; 409 PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_ PLL;417 PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_SYSCLK; 410 418 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 411 419 { … … 436 444 hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; 437 445 hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; 438 hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_ WORD;446 hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; 439 447 hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; 440 448 hdma_adc1.Init.Mode = DMA_NORMAL; … … 460 468 */ 461 469 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12; 462 PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_ PLL;470 PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_SYSCLK; 463 471 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 464 472 { … … 489 497 hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE; 490 498 hdma_adc2.Init.MemInc = DMA_MINC_ENABLE; 491 hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_ WORD;499 hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; 492 500 hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; 493 501 hdma_adc2.Init.Mode = DMA_NORMAL; … … 513 521 */ 514 522 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC345; 515 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_ PLL;523 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_SYSCLK; 516 524 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 517 525 { … … 567 575 */ 568 576 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC345; 569 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_ PLL;577 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_SYSCLK; 570 578 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 571 579 { … … 596 604 hdma_adc4.Init.PeriphInc = DMA_PINC_DISABLE; 597 605 hdma_adc4.Init.MemInc = DMA_MINC_ENABLE; 598 hdma_adc4.Init.PeriphDataAlignment = DMA_PDATAALIGN_ WORD;606 hdma_adc4.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; 599 607 hdma_adc4.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; 600 608 hdma_adc4.Init.Mode = DMA_NORMAL; … … 620 628 */ 621 629 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC345; 622 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_ PLL;630 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_SYSCLK; 623 631 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 624 632 { … … 820 828 return 0.0f; 821 829 822 float sample_cycles = 6 .5f;830 float sample_cycles = 640.5f; 823 831 float conversion_cycles = 12.5f; 824 825 return adc_clk / (sample_cycles + conversion_cycles); 832 float oversampling = 256; 833 834 return adc_clk / (sample_cycles + conversion_cycles) / oversampling; 826 835 } 827 836 /* USER CODE END 1 */ -
trunk/fw_g473rct/Core/Src/main.c
r71 r73 42 42 #include "modbus.h" 43 43 #include "chip_temperature.h" 44 #include "battery_voltage .h"44 #include "battery_voltage_fast.h" 45 45 #include "ads1260.h" 46 #include "shunt_voltage .h"46 #include "shunt_voltage_fast.h" 47 47 #include "fast_current.h" 48 48 #include "int_bat_voltage.h" … … 92 92 93 93 94 __IO uint32_t adc1Data[SAMPLE_ARRAY_SIZE] __attribute__((section(".RAM1_CRC")));95 __IO uint32_t adc2Data[SAMPLE_ARRAY_SIZE] __attribute__((section(".RAM1_CRC")));96 __IO uint32_t adc3Data[3];97 __IO uint32_t adc4Data[SAMPLE_ARRAY_SIZE] __attribute__((section(".RAM1_CRC")));98 __IO uint32_t adc5Data[4];94 __IO int32_t adc1Data[SAMPLE_ARRAY_SIZE] __attribute__((section(".RAM1_CRC"))); 95 __IO int32_t adc2Data[SAMPLE_ARRAY_SIZE] __attribute__((section(".RAM1_CRC"))); 96 __IO int32_t adc3Data[3]; 97 __IO int32_t adc4Data[SAMPLE_ARRAY_SIZE] __attribute__((section(".RAM1_CRC"))); 98 __IO int32_t adc5Data[4]; 99 99 int silentmode = 0; 100 100 static volatile uint32_t newADC124Data = 0; … … 162 162 163 163 /* USER CODE BEGIN Init */ 164 164 /* ------------------------------------------ INFO ----------------- 165 - Einige Module sind zum Stromsparen ausgeschaltet 166 167 */ 165 168 /* USER CODE END Init */ 166 169 … … 187 190 MX_CRC_Init(); 188 191 MX_RTC_Init(); 189 //MX_IWDG_Init();192 MX_IWDG_Init(); 190 193 MX_TIM3_Init(); 194 #ifndef NO_USB_SUPPORT 191 195 MX_USB_Device_Init(); 192 196 MX_UCPD1_Init(); 197 #endif 193 198 /* USER CODE BEGIN 2 */ 199 194 200 printf("Test debug io\r\n"); 195 printf("adc samplerate core clock: %d kHz\r\n", (uint32_t) GetADCSampleRate() / 1000U); 201 196 202 SYS_DATA_Init(); 197 203 WH_COUNTER_Init(); … … 225 231 mbInit(&modbusData, sys_data.s.parameter.baudrate, sys_data.s.parameter.parityMode, sys_data.s.parameter.stopBit, &huart2); 226 232 HAL_IWDG_Refresh(&hiwdg); 233 HAL_Delay(500); 234 HAL_IWDG_Refresh(&hiwdg); 235 227 236 // STM32G0 Chiptemperatur Kalibrierung 228 237 CHIP_TEMPERATURE_Calibration(); 229 238 230 HAL_ADCEx_Calibration_Start(&hadc1, ADC_DIFFERENTIAL_ENDED); 231 HAL_ADCEx_Calibration_Start(&hadc2, ADC_DIFFERENTIAL_ENDED); 232 HAL_ADCEx_Calibration_Start(&hadc3, ADC_SINGLE_ENDED); 233 HAL_ADCEx_Calibration_Start(&hadc4, ADC_DIFFERENTIAL_ENDED); 234 HAL_ADCEx_Calibration_Start(&hadc5, ADC_SINGLE_ENDED); 239 if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_DIFFERENTIAL_ENDED) != HAL_OK) Error_Handler(); 240 if (HAL_ADCEx_Calibration_Start(&hadc2, ADC_DIFFERENTIAL_ENDED) != HAL_OK) Error_Handler(); 241 if (HAL_ADCEx_Calibration_Start(&hadc3, ADC_SINGLE_ENDED) != HAL_OK) Error_Handler(); 242 if (HAL_ADCEx_Calibration_Start(&hadc4, ADC_DIFFERENTIAL_ENDED) != HAL_OK) Error_Handler(); 243 if (HAL_ADCEx_Calibration_Start(&hadc5, ADC_SINGLE_ENDED) != HAL_OK) Error_Handler(); 244 245 246 247 printf("%u, %u, %u\n", LL_ADC_GetCalibrationFactor(ADC1, LL_ADC_DIFFERENTIAL_ENDED), LL_ADC_GetCalibrationFactor(ADC2, LL_ADC_DIFFERENTIAL_ENDED), LL_ADC_GetCalibrationFactor(ADC4, LL_ADC_DIFFERENTIAL_ENDED)); 235 248 HAL_IWDG_Refresh(&hiwdg); 249 236 250 237 251 //SET_BIT(hadc2.Instance->CFGR, ADC_CFGR_DMAEN); //Enable DMA transfer for ADC slave (ADC12_CCR.MDMA = 0b00 -> MDMA mode disabled) … … 267 281 268 282 /* USBPD initialisation ---------------------------------*/ 283 #ifndef NO_USB_SUPPORT 269 284 MX_USBPD_Init(); 270 285 #endif 271 286 /* Infinite loop */ 272 287 /* USER CODE BEGIN WHILE */ … … 274 289 { 275 290 /* USER CODE END WHILE */ 291 #ifndef NO_USB_SUPPORT 276 292 USBPD_DPM_Run(); 277 293 #endif 278 294 /* USER CODE BEGIN 3 */ 279 295 HAL_IWDG_Refresh(&hiwdg); 280 296 if (newADC124Data == 7) 281 297 { 282 SHUNT_VOLTAGE_Exec( adc4Data[0]); 298 299 SHUNT_VOLTAGE_FAST_Exec( adc4Data[SAMPLE_ARRAY_SIZE-1]); 283 300 //Mit ADC_DIV2,Sample time 12,5Cycklen, ADC Clock 50Mhz, Oversampling 256 284 301 //Tconv = 6400 Takte = 0,128ms Pro Konvertierung. Also für 100 messwerte 12,8mS 285 BATTERY_VOLTAGE_ Exec( adc2Data[SAMPLE_ARRAY_SIZE-1]);302 BATTERY_VOLTAGE_FAST_Exec( adc2Data[SAMPLE_ARRAY_SIZE-1]); 286 303 FAST_CURRENT_Exec(adc1Data[SAMPLE_ARRAY_SIZE-1]); 287 304 ESR_FAST_Exec(); … … 290 307 newADC124Data = 0; 291 308 292 //Auskommentiert, bringt komiscxherweise Spannungsschwankungen, beim loggen,... Spannung springt bis zu 50mv293 // HAL_ADCEx_Calibration_Start(&hadc1, ADC_DIFFERENTIAL_ENDED);294 // HAL_ADCEx_Calibration_Start(&hadc2, ADC_DIFFERENTIAL_ENDED);295 // HAL_ADCEx_Calibration_Start(&hadc4, ADC_DIFFERENTIAL_ENDED);296 297 298 309 299 310 … … 301 312 if (HAL_ADC_Start_DMA(&hadc2,(uint32_t*)adc2Data,SAMPLE_ARRAY_SIZE)) Error_Handler(); //Start ADC interleaved mode 302 313 if (HAL_ADC_Start_DMA(&hadc4,(uint32_t*)adc4Data,SAMPLE_ARRAY_SIZE)) Error_Handler(); //Start ADC interleaved mode 314 315 303 316 } 304 317 … … 368 381 if (silentmode == 0) 369 382 { 370 //HAL_GPIO_TogglePin(LED_FUNCTION_GPIO_Port, LED_FUNCTION_Pin);383 HAL_GPIO_TogglePin(LED_FUNCTION_GPIO_Port, LED_FUNCTION_Pin); 371 384 //HAL_GPIO_TogglePin(AUX_EN_GPIO_Port, AUX_EN_Pin); 372 385 } … … 425 438 case COMMAND_GOTO_SYS_BOOTLOADER: bootLoaderMark = GOTO_SYSTEM_BOOTLOADER_MARK; 426 439 HAL_NVIC_SystemReset(); break; 427 case COMMAND_SET_VOLTAGE_MEAS_TO_ZERO: BATTERY_VOLTAGE_ZeroCal(); break; 440 case COMMAND_SET_VOLTAGE_MEAS_TO_ZERO: BATTERY_VOLTAGE_FAST_ZeroCal(); 441 ADS1260_BatteryVoltageZeroCal(); 442 ADS1260_ShuntVoltageZeroCal(); 443 SHUNT_VOLTAGE_FAST_ZeroCal(); 444 break; 428 445 429 446 default: printf("UNKNOWN COMMAND\n"); … … 475 492 } 476 493 494 //HAL_SuspendTick(); 495 //HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); 496 //HAL_ResumeTick(); 497 498 499 #ifndef NO_USB_SUPPORT 477 500 if (rb_available(&usb_in_buff) > 8) // 8 minimum packet size in Modbus RTU RHR/WHR 478 501 { // Theres something in our USB buffer. We need to process it 479 502 processUSB(&usb_in_buff, &usb_out_buff); 480 503 } 504 481 505 482 506 if (rb_available(&usb_out_buff) > 0) … … 499 523 lastTime_ms = HAL_GetTick(); 500 524 } 501 525 #endif 502 526 } 503 527 /* USER CODE END 3 */ … … 563 587 /* USER CODE BEGIN 4 */ 564 588 589 #ifndef NO_USB_SUPPORT 565 590 void processUSB(ring_buffer_t* const ring_in_buff, ring_buffer_t* const ring_out_buff) 566 591 { … … 719 744 } 720 745 } 721 746 #endif 722 747 //------------------------------------------------------------------------------ 723 748 … … 804 829 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) 805 830 { 806 if (hadc->Instance ==ADC1)831 if (hadc->Instance == ADC1) 807 832 { 808 833 newADC124Data |= 1; … … 814 839 else if (hadc->Instance==ADC3) 815 840 { 816 newADC3Data =1;841 newADC3Data = 1; 817 842 } 818 843 else if (hadc->Instance==ADC4) 819 844 { 820 newADC124Data |= 4;845 newADC124Data |= 4; 821 846 } 822 847 else if (hadc->Instance==ADC5) 823 848 { 824 newADC5Data =1;849 newADC5Data = 1; 825 850 } 826 851 } -
trunk/fw_g473rct/Core/Src/stm32g4xx_it.c
r71 r73 59 59 60 60 /* External variables --------------------------------------------------------*/ 61 #ifndef NO_USB_SUPPORT 61 62 extern PCD_HandleTypeDef hpcd_USB_FS; 63 #endif 62 64 extern DMA_HandleTypeDef hdma_adc1; 63 65 extern DMA_HandleTypeDef hdma_adc2; … … 206 208 /* USER CODE END SysTick_IRQn 0 */ 207 209 HAL_IncTick(); 210 #ifndef NO_USB_SUPPORT 208 211 USBPD_DPM_TimerCounter(); 212 #endif 209 213 /* USER CODE BEGIN SysTick_IRQn 1 */ 210 214 … … 337 341 { 338 342 /* USER CODE BEGIN USB_LP_IRQn 0 */ 339 343 #ifndef NO_USB_SUPPORT 340 344 /* USER CODE END USB_LP_IRQn 0 */ 341 345 HAL_PCD_IRQHandler(&hpcd_USB_FS); 342 346 /* USER CODE BEGIN USB_LP_IRQn 1 */ 343 347 #endif 344 348 /* USER CODE END USB_LP_IRQn 1 */ 345 349 } … … 400 404 } 401 405 406 407 402 408 /** 403 409 * @brief This function handles UCPD1 interrupt / UCPD1 wake-up interrupt through EXTI line 43. … … 406 412 { 407 413 /* USER CODE BEGIN UCPD1_IRQn 0 */ 408 414 #ifndef NO_USB_SUPPORT 409 415 /* USER CODE END UCPD1_IRQn 0 */ 410 416 USBPD_PORT0_IRQHandler(); 411 417 412 418 /* USER CODE BEGIN UCPD1_IRQn 1 */ 413 419 #endif 414 420 /* USER CODE END UCPD1_IRQn 1 */ 415 421 } -
trunk/fw_g473rct/Core/Src/tim.c
r71 r73 42 42 /* USER CODE END TIM3_Init 1 */ 43 43 htim3.Instance = TIM3; 44 htim3.Init.Prescaler = 99;44 htim3.Init.Prescaler = 100 - 1; 45 45 htim3.Init.CounterMode = TIM_COUNTERMODE_UP; 46 htim3.Init.Period = 1000;46 htim3.Init.Period = 500 - 1; 47 47 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; 48 48 htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; … … 63 63 } 64 64 /* USER CODE BEGIN TIM3_Init 2 */ 65 HAL_TIM_Base_Start _IT(&htim3);65 HAL_TIM_Base_Start(&htim3); 66 66 67 67 /* USER CODE END TIM3_Init 2 */
Note:
See TracChangeset
for help on using the changeset viewer.
