Ignore:
Timestamp:
Aug 21, 2025, 3:14:57 PM (6 days ago)
Author:
f.jahn
Message:

Änderung neuer Controller mit mehr Speicher

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/firmware_v2/Core/Src/tim.c

    r22 r23  
    2323/* USER CODE BEGIN 0 */
    2424
    25 #define STATE_NUM       (2U)
    26 #define AVG_NUM         (8U)
    27 
    28 uint16_t ic_buf[AVG_NUM][STATE_NUM];
     25#include <stdio.h>
     26
     27uint32_t period[STATE_NUM];
     28uint32_t freq;
    2929uint32_t ic_overflows;
    3030
    3131/* USER CODE END 0 */
    3232
    33 TIM_HandleTypeDef htim3;
     33TIM_HandleTypeDef htim16;
    3434TIM_HandleTypeDef htim17;
    35 DMA_HandleTypeDef hdma_tim3_ch1;
    36 
    37 /* TIM3 init function */
    38 void MX_TIM3_Init(void)
    39 {
    40 
    41   /* USER CODE BEGIN TIM3_Init 0 */
    42 
    43   /* USER CODE END TIM3_Init 0 */
    44 
    45   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
    46   TIM_SlaveConfigTypeDef sSlaveConfig = {0};
    47   TIM_MasterConfigTypeDef sMasterConfig = {0};
     35
     36/* TIM16 init function */
     37void MX_TIM16_Init(void)
     38{
     39
     40  /* USER CODE BEGIN TIM16_Init 0 */
     41
     42  /* USER CODE END TIM16_Init 0 */
     43
    4844  TIM_IC_InitTypeDef sConfigIC = {0};
    4945
    50   /* USER CODE BEGIN TIM3_Init 1 */
    51 
    52   /* USER CODE END TIM3_Init 1 */
    53   htim3.Instance = TIM3;
    54   htim3.Init.Prescaler = 1;
    55   htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
    56   htim3.Init.Period = 65535;
    57   htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    58   htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
    59   if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
    60   {
    61     Error_Handler();
    62   }
    63   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
    64   if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
    65   {
    66     Error_Handler();
    67   }
    68   if (HAL_TIM_IC_Init(&htim3) != HAL_OK)
    69   {
    70     Error_Handler();
    71   }
    72   sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
    73   sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
    74   sSlaveConfig.TriggerPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
    75   sSlaveConfig.TriggerFilter = 0;
    76   if (HAL_TIM_SlaveConfigSynchro(&htim3, &sSlaveConfig) != HAL_OK)
    77   {
    78     Error_Handler();
    79   }
    80   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    81   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
    82   if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
     46  /* USER CODE BEGIN TIM16_Init 1 */
     47
     48  /* USER CODE END TIM16_Init 1 */
     49  htim16.Instance = TIM16;
     50  htim16.Init.Prescaler = 23;
     51  htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
     52  htim16.Init.Period = 65535;
     53  htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
     54  htim16.Init.RepetitionCounter = 0;
     55  htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
     56  if (HAL_TIM_Base_Init(&htim16) != HAL_OK)
     57  {
     58    Error_Handler();
     59  }
     60  if (HAL_TIM_IC_Init(&htim16) != HAL_OK)
    8361  {
    8462    Error_Handler();
     
    8866  sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
    8967  sConfigIC.ICFilter = 0;
    90   if (HAL_TIM_IC_ConfigChannel(&htim3, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
    91   {
    92     Error_Handler();
    93   }
    94   /* USER CODE BEGIN TIM3_Init 2 */
    95 
    96   __HAL_TIM_ENABLE_IT(&htim3, TIM_IT_UPDATE);
    97   HAL_TIM_IC_Start_DMA(&htim3, TIM_CHANNEL_1, (uint32_t*)ic_buf, STATE_NUM * AVG_NUM);
    98 
    99   /* USER CODE END TIM3_Init 2 */
     68  if (HAL_TIM_IC_ConfigChannel(&htim16, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
     69  {
     70    Error_Handler();
     71  }
     72  /* USER CODE BEGIN TIM16_Init 2 */
     73
     74  /* USER CODE END TIM16_Init 2 */
    10075
    10176}
     
    132107  }
    133108  sConfigOC.OCMode = TIM_OCMODE_PWM1;
    134   sConfigOC.Pulse = 64;
     109  sConfigOC.Pulse = 0;
    135110  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
    136111  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
     
    167142
    168143  GPIO_InitTypeDef GPIO_InitStruct = {0};
    169   if(tim_baseHandle->Instance==TIM3)
    170   {
    171   /* USER CODE BEGIN TIM3_MspInit 0 */
    172 
    173   /* USER CODE END TIM3_MspInit 0 */
    174     /* TIM3 clock enable */
    175     __HAL_RCC_TIM3_CLK_ENABLE();
     144  if(tim_baseHandle->Instance==TIM16)
     145  {
     146  /* USER CODE BEGIN TIM16_MspInit 0 */
     147
     148  /* USER CODE END TIM16_MspInit 0 */
     149    /* TIM16 clock enable */
     150    __HAL_RCC_TIM16_CLK_ENABLE();
    176151
    177152    __HAL_RCC_GPIOA_CLK_ENABLE();
    178     /**TIM3 GPIO Configuration
    179     PA6     ------> TIM3_CH1
     153    /**TIM16 GPIO Configuration
     154    PA6     ------> TIM16_CH1
    180155    */
    181156    GPIO_InitStruct.Pin = FAN_TACHO_Pin;
     
    183158    GPIO_InitStruct.Pull = GPIO_PULLUP;
    184159    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    185     GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
     160    GPIO_InitStruct.Alternate = GPIO_AF5_TIM16;
    186161    HAL_GPIO_Init(FAN_TACHO_GPIO_Port, &GPIO_InitStruct);
    187162
    188     /* TIM3 DMA Init */
    189     /* TIM3_CH1 Init */
    190     hdma_tim3_ch1.Instance = DMA1_Channel2;
    191     hdma_tim3_ch1.Init.Request = DMA_REQUEST_TIM3_CH1;
    192     hdma_tim3_ch1.Init.Direction = DMA_PERIPH_TO_MEMORY;
    193     hdma_tim3_ch1.Init.PeriphInc = DMA_PINC_DISABLE;
    194     hdma_tim3_ch1.Init.MemInc = DMA_MINC_ENABLE;
    195     hdma_tim3_ch1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
    196     hdma_tim3_ch1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
    197     hdma_tim3_ch1.Init.Mode = DMA_CIRCULAR;
    198     hdma_tim3_ch1.Init.Priority = DMA_PRIORITY_LOW;
    199     if (HAL_DMA_Init(&hdma_tim3_ch1) != HAL_OK)
    200     {
    201       Error_Handler();
    202     }
    203 
    204     __HAL_LINKDMA(tim_baseHandle,hdma[TIM_DMA_ID_CC1],hdma_tim3_ch1);
    205 
    206     /* TIM3 interrupt Init */
    207     HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
    208     HAL_NVIC_EnableIRQ(TIM3_IRQn);
    209   /* USER CODE BEGIN TIM3_MspInit 1 */
    210 
    211   /* USER CODE END TIM3_MspInit 1 */
     163    /* TIM16 interrupt Init */
     164    HAL_NVIC_SetPriority(TIM16_IRQn, 0, 0);
     165    HAL_NVIC_EnableIRQ(TIM16_IRQn);
     166  /* USER CODE BEGIN TIM16_MspInit 1 */
     167
     168  /* USER CODE END TIM16_MspInit 1 */
    212169  }
    213170  else if(tim_baseHandle->Instance==TIM17)
     
    256213{
    257214
    258   if(tim_baseHandle->Instance==TIM3)
    259   {
    260   /* USER CODE BEGIN TIM3_MspDeInit 0 */
    261 
    262   /* USER CODE END TIM3_MspDeInit 0 */
     215  if(tim_baseHandle->Instance==TIM16)
     216  {
     217  /* USER CODE BEGIN TIM16_MspDeInit 0 */
     218
     219  /* USER CODE END TIM16_MspDeInit 0 */
    263220    /* Peripheral clock disable */
    264     __HAL_RCC_TIM3_CLK_DISABLE();
    265 
    266     /**TIM3 GPIO Configuration
    267     PA6     ------> TIM3_CH1
     221    __HAL_RCC_TIM16_CLK_DISABLE();
     222
     223    /**TIM16 GPIO Configuration
     224    PA6     ------> TIM16_CH1
    268225    */
    269226    HAL_GPIO_DeInit(FAN_TACHO_GPIO_Port, FAN_TACHO_Pin);
    270227
    271     /* TIM3 DMA DeInit */
    272     HAL_DMA_DeInit(tim_baseHandle->hdma[TIM_DMA_ID_CC1]);
    273 
    274     /* TIM3 interrupt Deinit */
    275     HAL_NVIC_DisableIRQ(TIM3_IRQn);
    276   /* USER CODE BEGIN TIM3_MspDeInit 1 */
    277 
    278   /* USER CODE END TIM3_MspDeInit 1 */
     228    /* TIM16 interrupt Deinit */
     229    HAL_NVIC_DisableIRQ(TIM16_IRQn);
     230  /* USER CODE BEGIN TIM16_MspDeInit 1 */
     231
     232  /* USER CODE END TIM16_MspDeInit 1 */
    279233  }
    280234  else if(tim_baseHandle->Instance==TIM17)
     
    293247/* USER CODE BEGIN 1 */
    294248
     249static unsigned lastSpeed;
     250
    295251void SetFANSpeed(unsigned speed)
    296252{
    297         const unsigned MAX_RPM = 1000U;                                                                                 // 100.0%
     253        const unsigned MAX_RPM = 100U;                                                                                  // 100.0%
    298254
    299255        if (speed > MAX_RPM) speed = MAX_RPM;
    300256
    301         const unsigned MAX_PWM = __HAL_TIM_GET_AUTORELOAD(&htim17);
     257        lastSpeed = speed;
     258
     259        const unsigned MAX_PWM = __HAL_TIM_GET_AUTORELOAD(&htim17) + 1U;
     260        //printf("%u", MAX_PWM);
    302261        const unsigned newPWM = (MAX_PWM * speed/ MAX_RPM);
    303262
     
    305264}
    306265
     266//-----------------------------------------------------------------------------
     267
     268unsigned GetLastSpeed(void)
     269{
     270        return lastSpeed;
     271}
     272
    307273/* USER CODE END 1 */
Note: See TracChangeset for help on using the changeset viewer.