Пытаюсь реализовать на STM32 измерение скорости вращения вентилятора.
Идея очень простая на вход таймера в режиме Input Capture direct mode подаем сигнал с датчика хола вентилятора.
Дальше обрабатываем прерывание по нарастающему фрону сигнала. Сбрасываем счетчик и оставляем его считать до следующего наростающего фронта.
Соответственно смотри до скольки досчитал тайме и снова его сбрасываем.
Собственно получаем количество счетов за период. Ну и дальше считаем скорост.
Код: Выделить всё
volatile uint32_t fanCount = 0;
uint8_t changed=0;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM3)
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
{
TIM3->CNT = 0;
fanCount = HAL_TIM_ReadCapturedValue(&htim3, TIM_CHANNEL_1);
changed=1;
}
}
}
Код: Выделить всё
while (1) {
if(changed) {
uint32_t tmp = fanCount;
changed=0;
printf("%u\n", tmp);
}
}
Код: Выделить всё
57
56
0
56
57
57
57
0
57
56
57
57
57
56
57
0
57
56


