Ignore:
Timestamp:
Jan 22, 2025, 4:41:16 PM (5 days ago)
Author:
Zed
Message:

FAN TACHO RPM was moved changed to use interrupt.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ctrl/firmware/Main/SES/Core/Src/fan_thread.cpp

    r66 r67  
    66
    77#include "fan_thread.h"
     8#include "utils.h"
    89
    9 static constexpr unsigned INPUT_BUF_SIZE = 256U;  // Must be dev by 4
     10static constexpr unsigned INPUT_BUF_SIZE = 64U;  // Must be dev by 4
    1011
    11 alignas(32) static char ibuf[INPUT_BUF_SIZE]                                                                    __attribute__((section(".RAM1")));
    12 alignas(32) static char obuf[INPUT_BUF_SIZE]                                                                    __attribute__((section(".RAM1")));
     12alignas(32) static unsigned ibuf[INPUT_BUF_SIZE]                                                                __attribute__((section(".RAM1")));
     13//alignas(32) static char obuf[INPUT_BUF_SIZE]                                                                  __attribute__((section(".RAM1")));
     14
     15static volatile uint32_t rawCnt;
     16
     17//TX_EVENT_FLAGS_GROUP fanEG;
    1318
    1419VOID fanThread(ULONG initial_input)
    1520{
    1621        (void)initial_input;
    17         extern DMA_HandleTypeDef hdma_tim3_ch1;
     22        //extern DMA_HandleTypeDef hdma_tim8_ch1;
     23        extern TX_THREAD fan_thread_ptr;
    1824
    1925        // Compute the value of ARR register to generate signal frequency at 25Khz
     
    2632
    2733
    28         auto start = __HAL_TIM_GET_COMPARE(&htim3, TIM_CHANNEL_2);
    29         auto end = __HAL_TIM_GET_AUTORELOAD(&htim3) - 300;
     34        //auto start = __HAL_TIM_GET_COMPARE(&htim3, TIM_CHANNEL_2);
     35        //auto end = __HAL_TIM_GET_AUTORELOAD(&htim3) - 300;
    3036
    31         HAL_TIM_IC_Start_IT(&htim8, TIM_CHANNEL_1);//, (uint32_t*)ibuf, INPUT_BUF_SIZE);
    32         //__HAL_DMA_DISABLE_IT(&hdma_tim3_ch1, DMA_IT_HT);
    33 
    34 
     37        //tx_event_flags_create(&fanEG, (char*)"FAN TACHO event group");
     38        //ULONG actual_flags;
    3539
    3640        while(1)
    3741        {
     42                for (auto i = 0U; i < INPUT_BUF_SIZE; i++)
     43                {
     44                        HAL_TIM_IC_Start_IT(&htim8, TIM_CHANNEL_1);//, (uint32_t*)ibuf, INPUT_BUF_SIZE);
     45                        //__HAL_DMA_DISABLE_IT(&hdma_tim8_ch1, DMA_IT_HT);
     46
     47                        tx_thread_suspend(&fan_thread_ptr);
     48                        //tx_event_flags_get(&fanEG, 1, TX_AND_CLEAR, &actual_flags, TX_WAIT_FOREVER);
     49
     50                        //printf("%u, ", rawCnt);
     51                        ibuf[i] = rawCnt;
     52                }
     53
     54                unsigned sum = 0;
     55                for (auto i = 0U; i < INPUT_BUF_SIZE; i += 4)
     56                {
     57                        unsigned tmp = 0;
     58                        for (auto j = 0U; j < 4U; j++)
     59                                tmp += ibuf[i + j];
     60                        sum += tmp;
     61                }
     62
     63                sum /= (INPUT_BUF_SIZE / 4U);
     64
     65                uint32_t div = htim8.Instance->PSC + 1;
     66                uint32_t clockHz = SystemCoreClock / div;
     67                //uint32_t arr = htim8.Instance->ARR + 1;
     68
     69                uint32_t rpm = (60U * clockHz) / sum;
     70                printf("RPM = %u\n", rpm);
     71
     72
     73                //SCB_InvalidateDCache_by_Addr((uint32_t*)ibuf, INPUT_BUF_SIZE);
     74
     75
    3876                /*for (auto i = start; i < end; i++)
    3977                {
     
    5189                //HAL_DMA_PollForTransfer()
    5290
    53                 tx_thread_sleep(1000);
     91                //tx_thread_sleep(1);
    5492        }
    5593}
     
    5997void pulseMeasured(void)
    6098{
    61         volatile static uint32_t rawCnt;
     99        extern TX_THREAD fan_thread_ptr;
    62100        //static uint32_t lastTime;
    63101        /*extern DMA_HandleTypeDef hdma_tim3_ch1;
     
    71109
    72110        rawCnt = HAL_TIM_ReadCapturedValue(&htim8, TIM_CHANNEL_1);
     111        //tx_event_flags_set(&fanEG, 1, TX_OR);
    73112
     113        /*SCB_InvalidateDCache_by_Addr((uint32_t*)ibuf, INPUT_BUF_SIZE);
     114
     115        for (auto i = 0U; i < INPUT_BUF_SIZE; i++)
     116        {
     117                printf("%u,", ibuf[i]);
     118        }*/
     119        //printf("%u\n", HAL_GetTick());
     120
     121
     122        tx_thread_resume(&fan_thread_ptr);
    74123}
Note: See TracChangeset for help on using the changeset viewer.