Ignore:
Timestamp:
Feb 20, 2025, 4:39:55 PM (3 months ago)
Author:
Zed
Message:

Charging PWM on TIM1 was implemented.

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

Legend:

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

    r97 r98  
    8080#define POWER_15V_EN_Pin GPIO_PIN_7
    8181#define POWER_15V_EN_GPIO_Port GPIOE
     82#define CHARGE_PWM_L_Pin GPIO_PIN_8
     83#define CHARGE_PWM_L_GPIO_Port GPIOE
     84#define CHARGE_PWM_H_Pin GPIO_PIN_9
     85#define CHARGE_PWM_H_GPIO_Port GPIOE
    8286#define SPI4_NSS_DISPLAY_Pin GPIO_PIN_11
    8387#define SPI4_NSS_DISPLAY_GPIO_Port GPIOE
  • ctrl/firmware/Main/CubeMX/Core/Inc/tim.h

    r84 r98  
    3333/* USER CODE END Includes */
    3434
     35extern TIM_HandleTypeDef htim1;
     36
    3537extern TIM_HandleTypeDef htim3;
    3638
     
    4345/* USER CODE END Private defines */
    4446
     47void MX_TIM1_Init(void);
    4548void MX_TIM3_Init(void);
    4649void MX_TIM6_Init(void);
  • ctrl/firmware/Main/CubeMX/Core/Src/dac.c

    r97 r98  
    6464  /* USER CODE BEGIN DAC1_Init 2 */
    6565
    66   uint32_t Voltage_mV = 3400U / 2U;       // We devide by 2, because voltage from Li-cell passes voltage divider 30k/30k (1:1)
    67   uint32_t Data = (Voltage_mV * (1U << DAC_RESOLUTION_BIT)) / VREF;
     66  uint32_t Voltage_mV = 6000U / 2U;       // We devide by 2, because voltage from Li-cell passes voltage divider 30k/30k (1:1)
     67  uint32_t Data = (Voltage_mV * ((1U << DAC_RESOLUTION_BIT) - 1U)) / VREF;
    6868  HAL_StatusTypeDef r = HAL_DAC_SetValue(&hdac1, DAC_U_LIMIT_CHANNEL, DAC_ALIGN_12B_R, Data);
    6969  if (r == HAL_OK)
  • ctrl/firmware/Main/CubeMX/Core/Src/gpio.c

    r97 r98  
    8282  HAL_GPIO_WritePin(ETH_SPI_RST_GPIO_Port, ETH_SPI_RST_Pin, GPIO_PIN_RESET);
    8383
    84   /*Configure GPIO pins : PE4 PE5 PE8 PE9
    85                            PE10 PE0 PE1 */
    86   GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_8|GPIO_PIN_9
    87                           |GPIO_PIN_10|GPIO_PIN_0|GPIO_PIN_1;
     84  /*Configure GPIO pins : PE4 PE5 PE10 PE0
     85                           PE1 */
     86  GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_10|GPIO_PIN_0
     87                          |GPIO_PIN_1;
    8888  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    8989  GPIO_InitStruct.Pull = GPIO_NOPULL;
  • ctrl/firmware/Main/CubeMX/Core/Src/main.c

    r97 r98  
    149149  MX_DTS_Init();
    150150  MX_DAC1_Init();
     151  MX_TIM1_Init();
    151152  /* USER CODE BEGIN 2 */
    152153
  • ctrl/firmware/Main/CubeMX/Core/Src/tim.c

    r86 r98  
    2525/* USER CODE END 0 */
    2626
     27TIM_HandleTypeDef htim1;
    2728TIM_HandleTypeDef htim3;
    2829TIM_HandleTypeDef htim6;
    2930TIM_HandleTypeDef htim8;
    3031
     32/* TIM1 init function */
     33void MX_TIM1_Init(void)
     34{
     35
     36  /* USER CODE BEGIN TIM1_Init 0 */
     37
     38  // This Timer is used to generate two PWM wave forms to charge the cell.
     39
     40  /* USER CODE END TIM1_Init 0 */
     41
     42  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
     43  TIM_MasterConfigTypeDef sMasterConfig = {0};
     44  TIM_OC_InitTypeDef sConfigOC = {0};
     45  TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
     46
     47  /* USER CODE BEGIN TIM1_Init 1 */
     48
     49  // CPU freqency is assumed as 100MHz. PWM frequency must not be greater than 64kHz.
     50
     51  /* USER CODE END TIM1_Init 1 */
     52  htim1.Instance = TIM1;
     53  htim1.Init.Prescaler = 0;
     54  htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
     55  htim1.Init.Period = 800; // 1600
     56  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
     57  htim1.Init.RepetitionCounter = 0;
     58  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
     59  if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
     60  {
     61    Error_Handler();
     62  }
     63  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
     64  if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
     65  {
     66    Error_Handler();
     67  }
     68  if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
     69  {
     70    Error_Handler();
     71  }
     72  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
     73  sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
     74  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
     75  if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
     76  {
     77    Error_Handler();
     78  }
     79  sConfigOC.OCMode = TIM_OCMODE_PWM1;
     80  sConfigOC.Pulse = 200U;
     81  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
     82  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
     83  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
     84  sConfigOC.OCIdleState = TIM_OCIDLESTATE_SET;
     85  sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
     86  if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
     87  {
     88    Error_Handler();
     89  }
     90  sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_ENABLE;
     91  sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_ENABLE;
     92  sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_1;
     93  sBreakDeadTimeConfig.DeadTime = 20;
     94  sBreakDeadTimeConfig.BreakState = TIM_BREAK_ENABLE;
     95  sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
     96  sBreakDeadTimeConfig.BreakFilter = 0;
     97  sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
     98  sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
     99  sBreakDeadTimeConfig.Break2Filter = 0;
     100  sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_ENABLE;
     101  if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
     102  {
     103    Error_Handler();
     104  }
     105  /* USER CODE BEGIN TIM1_Init 2 */
     106
     107  /* USER CODE END TIM1_Init 2 */
     108  HAL_TIM_MspPostInit(&htim1);
     109
     110}
    31111/* TIM3 init function */
    32112void MX_TIM3_Init(void)
     
    35115  /* USER CODE BEGIN TIM3_Init 0 */
    36116
    37   // This timer is used to control FAN
     117  // This timer is used to control FAN with the PWM generation.
    38118
    39119  /* USER CODE END TIM3_Init 0 */
     
    93173  /* USER CODE BEGIN TIM6_Init 0 */
    94174
    95   // This timer increments its content every 1µs and is used to generate
     175  // This timer increments its counter every 1µs and is used to generate
    96176  // delays for 1-Wire protocol. CPU speed is assumed as 100MHz.
    97177
     
    128208
    129209  /* USER CODE BEGIN TIM8_Init 0 */
     210
     211  // This timer is used to count pulses from FAN's Hall-sensor to count RPM.
    130212
    131213  /* USER CODE END TIM8_Init 0 */
     
    192274
    193275  GPIO_InitTypeDef GPIO_InitStruct = {0};
    194   if(tim_baseHandle->Instance==TIM3)
     276  if(tim_baseHandle->Instance==TIM1)
     277  {
     278  /* USER CODE BEGIN TIM1_MspInit 0 */
     279
     280  /* USER CODE END TIM1_MspInit 0 */
     281    /* TIM1 clock enable */
     282    __HAL_RCC_TIM1_CLK_ENABLE();
     283  /* USER CODE BEGIN TIM1_MspInit 1 */
     284
     285  /* USER CODE END TIM1_MspInit 1 */
     286  }
     287  else if(tim_baseHandle->Instance==TIM3)
    195288  {
    196289  /* USER CODE BEGIN TIM3_MspInit 0 */
     
    252345
    253346  GPIO_InitTypeDef GPIO_InitStruct = {0};
    254   if(timHandle->Instance==TIM3)
     347  if(timHandle->Instance==TIM1)
     348  {
     349  /* USER CODE BEGIN TIM1_MspPostInit 0 */
     350
     351  /* USER CODE END TIM1_MspPostInit 0 */
     352    __HAL_RCC_GPIOE_CLK_ENABLE();
     353    /**TIM1 GPIO Configuration
     354    PE8     ------> TIM1_CH1N
     355    PE9     ------> TIM1_CH1
     356    */
     357    GPIO_InitStruct.Pin = CHARGE_PWM_L_Pin|CHARGE_PWM_H_Pin;
     358    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     359    GPIO_InitStruct.Pull = GPIO_NOPULL;
     360    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
     361    GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
     362    HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
     363
     364  /* USER CODE BEGIN TIM1_MspPostInit 1 */
     365
     366  /* USER CODE END TIM1_MspPostInit 1 */
     367  }
     368  else if(timHandle->Instance==TIM3)
    255369  {
    256370  /* USER CODE BEGIN TIM3_MspPostInit 0 */
     
    279393{
    280394
    281   if(tim_baseHandle->Instance==TIM3)
     395  if(tim_baseHandle->Instance==TIM1)
     396  {
     397  /* USER CODE BEGIN TIM1_MspDeInit 0 */
     398
     399  /* USER CODE END TIM1_MspDeInit 0 */
     400    /* Peripheral clock disable */
     401    __HAL_RCC_TIM1_CLK_DISABLE();
     402  /* USER CODE BEGIN TIM1_MspDeInit 1 */
     403
     404  /* USER CODE END TIM1_MspDeInit 1 */
     405  }
     406  else if(tim_baseHandle->Instance==TIM3)
    282407  {
    283408  /* USER CODE BEGIN TIM3_MspDeInit 0 */
Note: See TracChangeset for help on using the changeset viewer.