Changeset 111 for ctrl/firmware/Main/CubeMX/Core
- Timestamp:
- Mar 14, 2025, 3:22:01 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
r109 r111 41 41 /* USER CODE BEGIN Private defines */ 42 42 43 #define ADC2_CHANNELS_NUM ( 2U)43 #define ADC2_CHANNELS_NUM (3U) 44 44 #define ADC3_CHANNELS_NUM (4U) 45 45 #define VREF (3000U) … … 52 52 int16_t charge_strom; 53 53 int16_t eload_strom; 54 int16_t u_bat; 54 55 } Name; 55 56 } __attribute__((packed, aligned(32))) ADC2_data_t; -
ctrl/firmware/Main/CubeMX/Core/Src/adc.c
r110 r111 60 60 hadc2.Init.LowPowerAutoWait = DISABLE; 61 61 hadc2.Init.ContinuousConvMode = ENABLE; 62 hadc2.Init.NbrOfConversion = 2;62 hadc2.Init.NbrOfConversion = 3; 63 63 hadc2.Init.DiscontinuousConvMode = DISABLE; 64 64 hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START; … … 81 81 sConfig.Channel = ADC_CHANNEL_3; 82 82 sConfig.Rank = ADC_REGULAR_RANK_1; 83 sConfig.SamplingTime = ADC_SAMPLETIME_ 16CYCLES_5;83 sConfig.SamplingTime = ADC_SAMPLETIME_32CYCLES_5; 84 84 sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED; 85 85 sConfig.OffsetNumber = ADC_OFFSET_NONE; 86 sConfig.Offset = 0;86 sConfig.Offset = 32767; 87 87 sConfig.OffsetSignedSaturation = DISABLE; 88 88 if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) … … 100 100 Error_Handler(); 101 101 } 102 103 /** Configure Regular Channel 104 */ 105 sConfig.Channel = ADC_CHANNEL_5; 106 sConfig.Rank = ADC_REGULAR_RANK_3; 107 if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) 108 { 109 Error_Handler(); 110 } 102 111 /* USER CODE BEGIN ADC2_Init 2 */ 103 112 … … 107 116 HAL_Delay(100U); 108 117 109 uint32_t offset[ 2] = { 0U };118 uint32_t offset[ADC2_CHANNELS_NUM] = { 0U }; 110 119 const uint32_t max_samples = 8192U / ((hadc2.Init.OversamplingMode == ENABLE)? hadc2.Init.Oversampling.Ratio: 1); 111 120 // Starting DMA converstion … … 117 126 while(!__HAL_DMA_GET_FLAG(&hdma_adc2, DMA_FLAG_TCIF1_5)); 118 127 // Reading ADC2 value 119 offset[0] += ADC2Data.Raw[0]; 120 offset[1] += ADC2Data.Raw[1]; 128 for (unsigned j = 0; j < ADC2_CHANNELS_NUM; j++) offset[j] += ADC2Data.Raw[j]; 121 129 __HAL_DMA_CLEAR_FLAG(&hdma_adc2, DMA_FLAG_TCIF1_5); 122 130 } 123 131 124 printf("ADC2 offset[0] = %u, offset[1] = %u\n", offset[0] / max_samples, offset[1] / max_samples); 132 printf("ADC2 "); 133 for (unsigned j = 0U; j < ADC2_CHANNELS_NUM; j++) 134 printf("offset[%u] = %u%s", j, offset[j] / max_samples, (j < ADC2_CHANNELS_NUM - 1)?", ":"\n"); 125 135 126 136 if (HAL_OK == HAL_ADC_Stop_DMA(&hadc2)) … … 128 138 LL_ADC_SetOffset(hadc2.Instance, LL_ADC_OFFSET_1, LL_ADC_CHANNEL_3, (offset[0]/max_samples) * ((hadc2.Init.OversamplingMode == ENABLE)? hadc2.Init.Oversampling.Ratio: 1)); 129 139 LL_ADC_SetOffset(hadc2.Instance, LL_ADC_OFFSET_2, LL_ADC_CHANNEL_4, (offset[1]/max_samples) * ((hadc2.Init.OversamplingMode == ENABLE)? hadc2.Init.Oversampling.Ratio: 1)); 140 LL_ADC_SetOffset(hadc2.Instance, LL_ADC_OFFSET_3, LL_ADC_CHANNEL_5, (offset[2]/max_samples) * ((hadc2.Init.OversamplingMode == ENABLE)? hadc2.Init.Oversampling.Ratio: 1)); 130 141 } 131 142 … … 184 195 sConfig.Channel = ADC_CHANNEL_10; 185 196 sConfig.Rank = ADC_REGULAR_RANK_1; 186 sConfig.SamplingTime = ADC _SAMPLETIME_810CYCLES_5;197 sConfig.SamplingTime = ADC3_SAMPLETIME_640CYCLES_5; 187 198 sConfig.SingleDiff = ADC_SINGLE_ENDED; 188 199 sConfig.OffsetNumber = ADC_OFFSET_NONE; … … 250 261 __HAL_RCC_GPIOA_CLK_ENABLE(); 251 262 __HAL_RCC_GPIOC_CLK_ENABLE(); 263 __HAL_RCC_GPIOB_CLK_ENABLE(); 252 264 /**ADC2 GPIO Configuration 253 265 PA6 ------> ADC2_INP3 … … 255 267 PC4 ------> ADC2_INP4 256 268 PC5 ------> ADC2_INN4 269 PB0 ------> ADC2_INN5 270 PB1 ------> ADC2_INP5 257 271 */ 258 272 GPIO_InitStruct.Pin = BAT_I_SENSE_PLUS_Pin|BAT_I_SENSE_MINUS_Pin; … … 265 279 GPIO_InitStruct.Pull = GPIO_NOPULL; 266 280 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); 281 282 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; 283 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; 284 GPIO_InitStruct.Pull = GPIO_NOPULL; 285 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 267 286 268 287 /* ADC2 DMA Init */ … … 346 365 PC4 ------> ADC2_INP4 347 366 PC5 ------> ADC2_INN4 367 PB0 ------> ADC2_INN5 368 PB1 ------> ADC2_INP5 348 369 */ 349 370 HAL_GPIO_DeInit(GPIOA, BAT_I_SENSE_PLUS_Pin|BAT_I_SENSE_MINUS_Pin); 350 371 351 372 HAL_GPIO_DeInit(GPIOC, GPIO_PIN_4|GPIO_PIN_5); 373 374 HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0|GPIO_PIN_1); 352 375 353 376 /* ADC2 DMA DeInit */ -
ctrl/firmware/Main/CubeMX/Core/Src/gpio.c
r108 r111 123 123 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 124 124 125 /*Configure GPIO pins : PB 0 PB1 PB2 PB11126 PB 12 PB13 PB3 PB5 */127 GPIO_InitStruct.Pin = GPIO_PIN_ 0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_11128 |GPIO_PIN_ 12|GPIO_PIN_13|GPIO_PIN_3|GPIO_PIN_5;125 /*Configure GPIO pins : PB2 PB11 PB12 PB13 126 PB3 PB5 */ 127 GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13 128 |GPIO_PIN_3|GPIO_PIN_5; 129 129 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; 130 130 GPIO_InitStruct.Pull = GPIO_NOPULL; -
ctrl/firmware/Main/CubeMX/Core/Src/main.c
r110 r111 266 266 PeriphClkInitStruct.PLL2.PLL2FRACN = 0; 267 267 PeriphClkInitStruct.PLL3.PLL3M = 25; 268 PeriphClkInitStruct.PLL3.PLL3N = 150;268 PeriphClkInitStruct.PLL3.PLL3N = 200; 269 269 PeriphClkInitStruct.PLL3.PLL3P = 2; 270 PeriphClkInitStruct.PLL3.PLL3Q = 6;271 PeriphClkInitStruct.PLL3.PLL3R = 3;270 PeriphClkInitStruct.PLL3.PLL3Q = 8; 271 PeriphClkInitStruct.PLL3.PLL3R = 2; 272 272 PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_0; 273 273 PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3VCOMEDIUM; -
ctrl/firmware/Main/CubeMX/Core/Src/stm32h7xx_it.c
r110 r111 483 483 { 484 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 printf("%d, %d\n", ADC2Data.Name.charge_strom, ADC2Data.Name.eload_strom);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 //printf("%d, %d\n", ADC2Data.Name.charge_strom, ADC2Data.Name.eload_strom); 491 491 HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_RESET); 492 492 }
Note: See TracChangeset
for help on using the changeset viewer.