Changeset 109 for ctrl/firmware/Main/CubeMX/Core
- Timestamp:
- Mar 12, 2025, 4:18:34 PM (2 months ago)
- Location:
- ctrl/firmware/Main/CubeMX/Core
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
ctrl/firmware/Main/CubeMX/Core/Inc/adc.h
r108 r109 41 41 /* USER CODE BEGIN Private defines */ 42 42 43 #define ADC2_CHANNELS (2U)44 #define ADC3_CHANNELS (4U)45 #define VREF (3000U)43 #define ADC2_CHANNELS_NUM (2U) 44 #define ADC3_CHANNELS_NUM (4U) 45 #define VREF (3000U) 46 46 47 47 typedef union ADC2_data_t 48 48 { 49 uint16_t Raw[ADC2_CHANNELS ];49 uint16_t Raw[ADC2_CHANNELS_NUM]; 50 50 struct 51 51 { … … 57 57 typedef union ADC3_data_t 58 58 { 59 uint16_t Raw[ADC3_CHANNELS ];59 uint16_t Raw[ADC3_CHANNELS_NUM]; 60 60 struct 61 61 { -
ctrl/firmware/Main/CubeMX/Core/Src/adc.c
r108 r109 23 23 /* USER CODE BEGIN 0 */ 24 24 25 #include <string.h> 26 25 27 volatile ADC2_data_t ADC2Data __attribute__((section(".AXI_RAM_4_DMA"))); 26 28 volatile ADC3_data_t ADC3Data __attribute__((section(".BKP_RAM_4_DMA"))); … … 52 54 */ 53 55 hadc2.Instance = ADC2; 54 hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2 56;56 hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2; 55 57 hadc2.Init.Resolution = ADC_RESOLUTION_16B; 56 58 hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE; … … 66 68 hadc2.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE; 67 69 hadc2.Init.OversamplingMode = ENABLE; 68 hadc2.Init.Oversampling.Ratio = 1024;69 hadc2.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_ 10;70 hadc2.Init.Oversampling.Ratio = 64; 71 hadc2.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_6; 70 72 hadc2.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER; 71 73 hadc2.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE; … … 93 95 sConfig.Channel = ADC_CHANNEL_4; 94 96 sConfig.Rank = ADC_REGULAR_RANK_2; 97 sConfig.Offset = 0; 95 98 if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) 96 99 { … … 104 107 HAL_Delay(100U); 105 108 106 //if (HAL_OK != HAL_ADC_Start(&hadc3)) Error_Handler(); 107 if (HAL_OK != HAL_ADC_Start_DMA(&hadc2, (uint32_t*)&ADC2Data, ADC2_CHANNELS)) Error_Handler(); 108 __HAL_DMA_DISABLE_IT(&hdma_adc2, DMA_IT_HT); 109 110 uint16_t offset = 0; 111 for (int i = 0; i < 100; i++) 112 { 113 114 } 109 uint32_t offset[2] = { 0U }; 110 const uint32_t max_samples = 16U; 111 // Starting DMA converstion 112 if (HAL_OK != HAL_ADC_Start_DMA(&hadc2, (uint32_t*)&ADC2Data, ADC2_CHANNELS_NUM)) Error_Handler(); 113 // Disabling interrupts, because we don't need it during offset calculation 114 __HAL_DMA_DISABLE_IT(&hdma_adc2, DMA_IT_HT | DMA_IT_TC); 115 for (uint32_t i = 0U; i < max_samples; i++) 116 { // Waiting for conversion to finish 117 while(!__HAL_DMA_GET_FLAG(&hdma_adc2, DMA_FLAG_TCIF1_5)); 118 // Reading ADC2 value 119 offset[0] += ADC2Data.Raw[0]; 120 offset[1] += ADC2Data.Raw[1]; 121 __HAL_DMA_CLEAR_FLAG(&hdma_adc2, DMA_FLAG_TCIF1_5); 122 } 123 124 printf("ADC2 offset[0] = %u, offset[1] = %u\n", offset[0] / max_samples, offset[1] / max_samples); 125 126 if (HAL_OK == HAL_ADC_Stop_DMA(&hadc2)) 127 { 128 LL_ADC_SetOffset(hadc2.Instance, LL_ADC_OFFSET_1, LL_ADC_CHANNEL_3, (offset[0]/max_samples) << 6U); 129 LL_ADC_SetOffset(hadc2.Instance, LL_ADC_OFFSET_2, LL_ADC_CHANNEL_4, (offset[1]/max_samples) << 6U); 130 } 131 132 if (HAL_OK != HAL_ADC_Start_DMA(&hadc2, (uint32_t*)&ADC2Data, ADC2_CHANNELS_NUM)) Error_Handler(); 133 __HAL_DMA_DISABLE_IT(&hdma_adc2, DMA_IT_HT /*| DMA_IT_TC*/); // Disabling interrupts, because we don't need it 115 134 116 135 … … 209 228 210 229 //if (HAL_OK != HAL_ADC_Start(&hadc3)) Error_Handler(); 211 if (HAL_OK != HAL_ADC_Start_DMA(&hadc3, (uint32_t*)&ADC3Data, ADC3_CHANNELS )) Error_Handler();230 if (HAL_OK != HAL_ADC_Start_DMA(&hadc3, (uint32_t*)&ADC3Data, ADC3_CHANNELS_NUM)) Error_Handler(); 212 231 __HAL_DMA_DISABLE_IT(&hdma_adc3, DMA_IT_HT); 213 232 -
ctrl/firmware/Main/CubeMX/Core/Src/freertos.c
r106 r109 58 58 #define BME_TASK_STACK_DEPTH_WORDS (256U) 59 59 #define GUI_TASK_STACK_DEPTH_WORDS (2048U) 60 #define FAN_TASK_STACK_DEPTH_WORDS ( 128U)60 #define FAN_TASK_STACK_DEPTH_WORDS (256U) 61 61 62 62 /* USER CODE END PD */ -
ctrl/firmware/Main/CubeMX/Core/Src/main.c
r108 r109 374 374 { 375 375 /* USER CODE BEGIN Error_Handler_Debug */ 376 printf("ERROR!!!\n"); 376 377 /* User can add his own implementation to report the HAL error return state */ 377 378 __disable_irq(); -
ctrl/firmware/Main/CubeMX/Core/Src/stm32h7xx_it.c
r108 r109 24 24 /* USER CODE BEGIN Includes */ 25 25 26 #include <stdio.h> 27 26 28 #include "FreeRTOS.h" 27 29 #include "modbus.h" 28 //#include "semphr.h"30 #include "adc.h" 29 31 30 32 /* USER CODE END Includes */ … … 468 470 469 471 //------------------------------------------------------------------------------ 472 473 static volatile int64_t charge_tmp; 474 static volatile int64_t load_tmp; 475 static volatile float charge_i; 476 static volatile float load_i; 477 478 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) 479 { 480 //extern ADC2_data_t ADC2Data; 481 482 if (hadc->Instance == ADC2) 483 { 484 HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_SET); 485 charge_tmp = (((int64_t)ADC2Data.Name.charge_strom * ((int64_t)VREF) * 1000LL) / ((int64_t)0xFFFF)) / 50LL; 486 load_tmp = (((int64_t)ADC2Data.Name.eload_strom * ((int64_t)VREF) * 1000LL) / ((int64_t)0xFFFF)) / 50LL; 487 charge_i = (float)charge_tmp / 500LL; 488 load_i = (float)load_tmp / 500LL; 489 //printf("\t\t\t%5.2fA, %5.2fA\n", charge_i, load_i); 490 HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_RESET); 491 } 492 } 493 470 494 //------------------------------------------------------------------------------ 471 495 //------------------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.