Ignore:
Timestamp:
Mar 14, 2025, 3:22:01 PM (2 months ago)
Author:
Zed
Message:

Fixing project.

Location:
ctrl/firmware/Main/CubeMX/Core
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • ctrl/firmware/Main/CubeMX/Core/Inc/adc.h

    r109 r111  
    4141/* USER CODE BEGIN Private defines */
    4242
    43 #define ADC2_CHANNELS_NUM       (2U)
     43#define ADC2_CHANNELS_NUM       (3U)
    4444#define ADC3_CHANNELS_NUM       (4U)
    4545#define VREF                            (3000U)
     
    5252                int16_t charge_strom;
    5353                int16_t eload_strom;
     54                int16_t u_bat;
    5455        } Name;
    5556} __attribute__((packed, aligned(32))) ADC2_data_t;
  • ctrl/firmware/Main/CubeMX/Core/Src/adc.c

    r110 r111  
    6060  hadc2.Init.LowPowerAutoWait = DISABLE;
    6161  hadc2.Init.ContinuousConvMode = ENABLE;
    62   hadc2.Init.NbrOfConversion = 2;
     62  hadc2.Init.NbrOfConversion = 3;
    6363  hadc2.Init.DiscontinuousConvMode = DISABLE;
    6464  hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
     
    8181  sConfig.Channel = ADC_CHANNEL_3;
    8282  sConfig.Rank = ADC_REGULAR_RANK_1;
    83   sConfig.SamplingTime = ADC_SAMPLETIME_16CYCLES_5;
     83  sConfig.SamplingTime = ADC_SAMPLETIME_32CYCLES_5;
    8484  sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED;
    8585  sConfig.OffsetNumber = ADC_OFFSET_NONE;
    86   sConfig.Offset = 0;
     86  sConfig.Offset = 32767;
    8787  sConfig.OffsetSignedSaturation = DISABLE;
    8888  if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
     
    100100    Error_Handler();
    101101  }
     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  }
    102111  /* USER CODE BEGIN ADC2_Init 2 */
    103112
     
    107116  HAL_Delay(100U);
    108117
    109   uint32_t offset[2] = { 0U };
     118  uint32_t offset[ADC2_CHANNELS_NUM] = { 0U };
    110119  const uint32_t max_samples = 8192U / ((hadc2.Init.OversamplingMode == ENABLE)? hadc2.Init.Oversampling.Ratio: 1);
    111120  // Starting DMA converstion
     
    117126          while(!__HAL_DMA_GET_FLAG(&hdma_adc2, DMA_FLAG_TCIF1_5));
    118127          // 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];
    121129          __HAL_DMA_CLEAR_FLAG(&hdma_adc2, DMA_FLAG_TCIF1_5);
    122130  }
    123131
    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");
    125135
    126136  if (HAL_OK == HAL_ADC_Stop_DMA(&hadc2))
     
    128138          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));
    129139          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));
    130141  }
    131142
     
    184195  sConfig.Channel = ADC_CHANNEL_10;
    185196  sConfig.Rank = ADC_REGULAR_RANK_1;
    186   sConfig.SamplingTime = ADC_SAMPLETIME_810CYCLES_5;
     197  sConfig.SamplingTime = ADC3_SAMPLETIME_640CYCLES_5;
    187198  sConfig.SingleDiff = ADC_SINGLE_ENDED;
    188199  sConfig.OffsetNumber = ADC_OFFSET_NONE;
     
    250261    __HAL_RCC_GPIOA_CLK_ENABLE();
    251262    __HAL_RCC_GPIOC_CLK_ENABLE();
     263    __HAL_RCC_GPIOB_CLK_ENABLE();
    252264    /**ADC2 GPIO Configuration
    253265    PA6     ------> ADC2_INP3
     
    255267    PC4     ------> ADC2_INP4
    256268    PC5     ------> ADC2_INN4
     269    PB0     ------> ADC2_INN5
     270    PB1     ------> ADC2_INP5
    257271    */
    258272    GPIO_InitStruct.Pin = BAT_I_SENSE_PLUS_Pin|BAT_I_SENSE_MINUS_Pin;
     
    265279    GPIO_InitStruct.Pull = GPIO_NOPULL;
    266280    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);
    267286
    268287    /* ADC2 DMA Init */
     
    346365    PC4     ------> ADC2_INP4
    347366    PC5     ------> ADC2_INN4
     367    PB0     ------> ADC2_INN5
     368    PB1     ------> ADC2_INP5
    348369    */
    349370    HAL_GPIO_DeInit(GPIOA, BAT_I_SENSE_PLUS_Pin|BAT_I_SENSE_MINUS_Pin);
    350371
    351372    HAL_GPIO_DeInit(GPIOC, GPIO_PIN_4|GPIO_PIN_5);
     373
     374    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0|GPIO_PIN_1);
    352375
    353376    /* ADC2 DMA DeInit */
  • ctrl/firmware/Main/CubeMX/Core/Src/gpio.c

    r108 r111  
    123123  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    124124
    125   /*Configure GPIO pins : PB0 PB1 PB2 PB11
    126                            PB12 PB13 PB3 PB5 */
    127   GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_11
    128                           |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;
    129129  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    130130  GPIO_InitStruct.Pull = GPIO_NOPULL;
  • ctrl/firmware/Main/CubeMX/Core/Src/main.c

    r110 r111  
    266266  PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
    267267  PeriphClkInitStruct.PLL3.PLL3M = 25;
    268   PeriphClkInitStruct.PLL3.PLL3N = 150;
     268  PeriphClkInitStruct.PLL3.PLL3N = 200;
    269269  PeriphClkInitStruct.PLL3.PLL3P = 2;
    270   PeriphClkInitStruct.PLL3.PLL3Q = 6;
    271   PeriphClkInitStruct.PLL3.PLL3R = 3;
     270  PeriphClkInitStruct.PLL3.PLL3Q = 8;
     271  PeriphClkInitStruct.PLL3.PLL3R = 2;
    272272  PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_0;
    273273  PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3VCOMEDIUM;
  • ctrl/firmware/Main/CubeMX/Core/Src/stm32h7xx_it.c

    r110 r111  
    483483        {
    484484                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);
    491491                HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_RESET);
    492492        }
Note: See TracChangeset for help on using the changeset viewer.