Changeset 112 for ctrl/firmware/Main/CubeMX
- Timestamp:
- Mar 21, 2025, 3:58:22 PM (7 weeks ago)
- Location:
- ctrl/firmware/Main/CubeMX
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
ctrl/firmware/Main/CubeMX/Core/Inc/main.h
r108 r112 78 78 #define BAT_I_SENSE_MINUS_Pin GPIO_PIN_7 79 79 #define BAT_I_SENSE_MINUS_GPIO_Port GPIOA 80 #define U_BAT_SCALE_SWITCH_Pin GPIO_PIN_2 81 #define U_BAT_SCALE_SWITCH_GPIO_Port GPIOB 80 82 #define POWER_4V_EN_Pin GPIO_PIN_15 81 83 #define POWER_4V_EN_GPIO_Port GPIOF -
ctrl/firmware/Main/CubeMX/Core/Src/adc.c
r111 r112 81 81 sConfig.Channel = ADC_CHANNEL_3; 82 82 sConfig.Rank = ADC_REGULAR_RANK_1; 83 sConfig.SamplingTime = ADC_SAMPLETIME_32CYCLES_5; 83 sConfig.SamplingTime = ADC_SAMPLETIME_32CYCLES_5;//ADC_SAMPLETIME_32CYCLES_5; 84 84 sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED; 85 85 sConfig.OffsetNumber = ADC_OFFSET_NONE; 86 sConfig.Offset = 32767;86 sConfig.Offset = 0; 87 87 sConfig.OffsetSignedSaturation = DISABLE; 88 88 if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) … … 112 112 113 113 HAL_Delay(100U); 114 if (HAL_OK != HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET, ADC_DIFFERENTIAL_ENDED)) Error_Handler();115 114 if (HAL_OK != HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET_LINEARITY, ADC_DIFFERENTIAL_ENDED)) Error_Handler(); 116 115 HAL_Delay(100U); … … 122 121 // Disabling interrupts, because we don't need it during offset calculation 123 122 __HAL_DMA_DISABLE_IT(&hdma_adc2, DMA_IT_HT | DMA_IT_TC); 123 uint32_t TC_flag = __HAL_DMA_GET_TC_FLAG_INDEX(&hdma_adc2); 124 124 for (uint32_t i = 0U; i < max_samples; i++) 125 125 { // Waiting for conversion to finish 126 while(!__HAL_DMA_GET_FLAG(&hdma_adc2, DMA_FLAG_TCIF1_5));127 // Reading ADC2 value 126 while(!__HAL_DMA_GET_FLAG(&hdma_adc2, TC_flag)); // For correct flag see __HAL_DMA_GET_TC_FLAG_INDEX macro description 127 // Reading ADC2 values 128 128 for (unsigned j = 0; j < ADC2_CHANNELS_NUM; j++) offset[j] += ADC2Data.Raw[j]; 129 __HAL_DMA_CLEAR_FLAG(&hdma_adc2, DMA_FLAG_TCIF1_5);129 __HAL_DMA_CLEAR_FLAG(&hdma_adc2, TC_flag); 130 130 } 131 131 … … 138 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)); 139 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));140 LL_ADC_SetOffset(hadc2.Instance, LL_ADC_OFFSET_3, LL_ADC_CHANNEL_5, (32767U) * ((hadc2.Init.OversamplingMode == ENABLE)? hadc2.Init.Oversampling.Ratio: 1)); 141 141 } 142 142 … … 154 154 /* USER CODE BEGIN ADC3_Init 0 */ 155 155 156 // This ADC is used to sample raw voltage on the battery connector. 157 // It is not very precise dut to the voltagedrop on the wires. 158 156 159 /* USER CODE END ADC3_Init 0 */ 157 160 … … 165 168 */ 166 169 hadc3.Instance = ADC3; 167 hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV 256;170 hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; 168 171 hadc3.Init.Resolution = ADC_RESOLUTION_12B; 169 172 hadc3.Init.DataAlign = ADC3_DATAALIGN_RIGHT; … … 234 237 235 238 HAL_Delay(100U); 236 if (HAL_OK != HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED)) Error_Handler();237 239 if (HAL_OK != HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED)) Error_Handler(); 238 240 HAL_Delay(100U); 239 241 240 //if (HAL_OK != HAL_ADC_Start(&hadc3)) Error_Handler();241 242 if (HAL_OK != HAL_ADC_Start_DMA(&hadc3, (uint32_t*)&ADC3Data, ADC3_CHANNELS_NUM)) Error_Handler(); 242 243 __HAL_DMA_DISABLE_IT(&hdma_adc3, DMA_IT_HT); -
ctrl/firmware/Main/CubeMX/Core/Src/gpio.c
r111 r112 61 61 62 62 /*Configure GPIO pin Output Level */ 63 HAL_GPIO_WritePin(GPIOB, U_BAT_SCALE_SWITCH_Pin|ETH_SPI_RST_Pin, GPIO_PIN_RESET); 64 65 /*Configure GPIO pin Output Level */ 63 66 HAL_GPIO_WritePin(POWER_4V_EN_GPIO_Port, POWER_4V_EN_Pin, GPIO_PIN_RESET); 64 67 … … 78 81 /*Configure GPIO pin Output Level */ 79 82 HAL_GPIO_WritePin(ETH_SPI_NSS_GPIO_Port, ETH_SPI_NSS_Pin, GPIO_PIN_SET); 80 81 /*Configure GPIO pin Output Level */82 HAL_GPIO_WritePin(ETH_SPI_RST_GPIO_Port, ETH_SPI_RST_Pin, GPIO_PIN_RESET);83 83 84 84 /*Configure GPIO pins : PE4 PE5 PE10 PE0 … … 123 123 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 124 124 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 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; 130 GPIO_InitStruct.Pull = GPIO_NOPULL; 125 /*Configure GPIO pins : U_BAT_SCALE_SWITCH_Pin ETH_SPI_NSS_Pin ETH_SPI_RST_Pin */ 126 GPIO_InitStruct.Pin = U_BAT_SCALE_SWITCH_Pin|ETH_SPI_NSS_Pin|ETH_SPI_RST_Pin; 127 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 128 GPIO_InitStruct.Pull = GPIO_NOPULL; 129 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 131 130 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 132 131 … … 146 145 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 147 146 HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); 147 148 /*Configure GPIO pins : PB11 PB12 PB13 PB3 149 PB5 */ 150 GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_3 151 |GPIO_PIN_5; 152 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; 153 GPIO_InitStruct.Pull = GPIO_NOPULL; 154 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 148 155 149 156 /*Configure GPIO pins : GSM_PWR_Pin ETH_SPI_PWR_Pin OUTPUT_ON_LED_Pin */ … … 187 194 HAL_GPIO_Init(ONEWIRE_TEMP_BUS_GPIO_Port, &GPIO_InitStruct); 188 195 189 /*Configure GPIO pins : ETH_SPI_NSS_Pin ETH_SPI_RST_Pin */190 GPIO_InitStruct.Pin = ETH_SPI_NSS_Pin|ETH_SPI_RST_Pin;191 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;192 GPIO_InitStruct.Pull = GPIO_NOPULL;193 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;194 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);195 196 196 /*Configure GPIO pin : ETH_SPI_INT_Pin */ 197 197 GPIO_InitStruct.Pin = ETH_SPI_INT_Pin; -
ctrl/firmware/Main/CubeMX/Core/Src/main.c
r111 r112 133 133 MX_DMA_Init(); 134 134 MX_BDMA_Init(); 135 MX_ADC2_Init(); 136 MX_ADC3_Init(); 135 137 MX_RTC_Init(); 136 138 MX_SPI4_Init(); … … 143 145 MX_TIM6_Init(); 144 146 MX_I2C2_Init(); 145 MX_ADC3_Init();146 147 MX_TIM3_Init(); 147 148 MX_I2C1_Init(); … … 150 151 MX_DAC1_Init(); 151 152 MX_TIM1_Init(); 152 MX_ADC2_Init();153 153 /* USER CODE BEGIN 2 */ 154 154 -
ctrl/firmware/Main/CubeMX/Core/Src/stm32h7xx_it.c
r111 r112 473 473 static volatile int64_t charge_tmp; 474 474 static volatile int64_t load_tmp; 475 static volatile int64_t u_bat_tmp_uV; 475 476 static volatile float charge_i; 476 477 static volatile float load_i; 478 static volatile float u_bat; 477 479 478 480 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) … … 482 484 if (hadc->Instance == ADC2) 483 485 { 484 HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_SET);486 //HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_SET); 485 487 charge_tmp = (((int64_t)ADC2Data.Name.charge_strom * ((int64_t)VREF) * 1000LL) / ((int64_t)0xFFFF)) / 50LL; 486 488 load_tmp = (((int64_t)ADC2Data.Name.eload_strom * ((int64_t)VREF) * 1000LL) / ((int64_t)0xFFFF)) / 50LL; 489 u_bat_tmp_uV = (int64_t)ADC2Data.Name.u_bat * (int64_t)VREF * 1000LL * 2LL; 490 487 491 charge_i = (float)charge_tmp / 500LL; 488 492 load_i = (float)load_tmp / 500LL; 489 printf("\t\t\t%5.2fA, %5.2fA\n", charge_i, load_i); 493 u_bat = (float)u_bat_tmp_uV / (32767.0f * 1000000.0f); 494 //printf("\t\t\t%5.2fA, %5.2fA\n", charge_i, load_i); 490 495 //printf("%d, %d\n", ADC2Data.Name.charge_strom, ADC2Data.Name.eload_strom); 496 497 //printf("%5.4f\n", u_bat); 498 //HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_RESET); 499 } 500 else if (hadc->Instance == ADC3) 501 { 502 HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_SET); 503 504 uint32_t tmp = (((uint32_t)ADC3Data.Name.UBat) * VREF * 2U) / 4095U; 505 float UBat = (float)tmp / 1000.0; 506 printf("%6.4f\n", UBat); 507 //printf("%u\n", (((uint32_t)ADC3Data.Name.UBat) * VREF * 2U) / 4095); 508 491 509 HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_RESET); 492 510 } -
ctrl/firmware/Main/CubeMX/Core/Src/tim.c
r107 r112 78 78 } 79 79 sConfigOC.OCMode = TIM_OCMODE_PWM1; 80 sConfigOC.Pulse = 50;80 sConfigOC.Pulse = 0;//50; 81 81 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; 82 82 sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; -
ctrl/firmware/Main/CubeMX/FATFS/Target/sd_diskio.c
r75 r112 208 208 if (SDQueueID == NULL) 209 209 { 210 211 212 213 #else 214 210 #if (osCMSIS <= 0x20000U) 211 osMessageQDef(SD_Queue, QUEUE_SIZE, uint16_t); 212 SDQueueID = osMessageCreate (osMessageQ(SD_Queue), NULL); 213 #else 214 SDQueueID = osMessageQueueNew(QUEUE_SIZE, 2, NULL); 215 215 #endif 216 216 } -
ctrl/firmware/Main/CubeMX/charger.ioc
r111 r112 26 26 ADC2.Ratio=256 27 27 ADC2.RightBitShift=ADC_RIGHTBITSHIFT_8 28 ADC2.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_ 64CYCLES_529 ADC2.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_ 64CYCLES_530 ADC2.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_ 64CYCLES_528 ADC2.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_32CYCLES_5 29 ADC2.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_32CYCLES_5 30 ADC2.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_32CYCLES_5 31 31 ADC2.SingleDiff-0\#ChannelRegularConversion=ADC_DIFFERENTIAL_ENDED 32 32 ADC2.SingleDiff-2\#ChannelRegularConversion=ADC_DIFFERENTIAL_ENDED … … 509 509 PA8.Locked=true 510 510 PA8.Signal=GPIO_Input 511 PB0.GPIOParameters=GPIO_Label 512 PB0.GPIO_Label=BAT_U_SENSE_MINUS 511 513 PB0.Locked=true 512 514 PB0.Signal=ADCx_INN5 515 PB1.GPIOParameters=GPIO_Label 516 PB1.GPIO_Label=BAT_U_SENSE_PLUS 513 517 PB1.Signal=ADCx_INP5 514 518 PB10.GPIOParameters=GPIO_Speed,GPIO_Label … … 529 533 PB15.Mode=Full_Duplex_Master 530 534 PB15.Signal=SPI2_MOSI 531 PB2.GPIOParameters= GPIO_Label535 PB2.GPIOParameters=PinState,GPIO_Label 532 536 PB2.GPIO_Label=U_BAT_SCALE_SWITCH 533 537 PB2.Locked=true 538 PB2.PinState=GPIO_PIN_RESET 534 539 PB2.Signal=GPIO_Output 535 540 PB4(NJTRST).GPIOParameters=PinState,GPIO_Label … … 558 563 PB9.Signal=GPIO_Output 559 564 PC0.GPIOParameters=GPIO_Label 560 PC0.GPIO_Label= U_BAT565 PC0.GPIO_Label=BAT_U_RAW 561 566 PC0.Locked=true 562 567 PC0.Signal=ADCx_INP10 … … 571 576 PC15-OSC32_OUT.Mode=LSE-External-Oscillator 572 577 PC15-OSC32_OUT.Signal=RCC_OSC32_OUT 578 PC4.GPIOParameters=GPIO_Label 579 PC4.GPIO_Label=LOAD_I_SENSE_PLUS 573 580 PC4.Signal=ADCx_INP4 581 PC5.GPIOParameters=GPIO_Label 582 PC5.GPIO_Label=LOAD_I_SENSE_MINUS 574 583 PC5.Signal=ADCx_INN4 575 584 PC6.GPIOParameters=GPIO_PuPd,GPIO_Label
Note: See TracChangeset
for help on using the changeset viewer.