ESP32: Высокоточные измерения сигналов с помощью таймеров

ESP32 оснащён мощными аппаратными таймерами, которые позволяют не только управлять событиями, но и выполнять высокоточные измерения входных сигналов. Одним из распространённых применений является создание простого частотомера — устройства, измеряющего частоту поступающего сигнала.

Подсчёт частоты входного сигнала

Для измерения частоты сигнала можно использовать следующий принцип:

  • Один таймер запускается на фиксированный интервал времени (например, 1 секунда).
  • На входном GPIO (через прерывания) подсчитывается количество фронтов сигнала.
  • По завершении интервала таймера подсчитанное количество импульсов переводится в значение частоты.

Таким образом, мы получаем простейший частотомер, реализованный полностью в коде на ESP32.

Пример программы: простой частотомер


const int signalPin = 4;       // GPIO для входного сигнала
volatile unsigned long pulses = 0;
hw_timer_t *timer = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;

void IRAM_ATTR handleSignal() {
  pulses++; // считаем каждый фронт
}

void IRAM_ATTR onTimer() {
  portENTER_CRITICAL_ISR(&timerMux);
  unsigned long freq = pulses; // сохраняем количество импульсов
  pulses = 0;                  // обнуляем для следующего цикла
  portEXIT_CRITICAL_ISR(&timerMux);

  Serial.print("Частота: ");
  Serial.print(freq);
  Serial.println(" Гц");
}

void setup() {
  Serial.begin(115200);
  pinMode(signalPin, INPUT);

  attachInterrupt(digitalPinToInterrupt(signalPin), handleSignal, RISING);

  // Настраиваем таймер на 1 сек (1 000 000 мкс)
  timer = timerBegin(0, 80, true); 
  timerAttachInterrupt(timer, &onTimer, true);
  timerAlarmWrite(timer, 1000000, true);
  timerAlarmEnable(timer);
}

void loop() {
  // основной цикл свободен
}

Как работает программа:

  • На пине GPIO4 ожидается прямоугольный сигнал.
  • Каждый фронт увеличивает счётчик pulses.
  • Каждую секунду таймер вызывает функцию onTimer(), где подсчитанное значение выводится в Serial Monitor.

Улучшения и расширения

  • Можно изменить интервал таймера (например, 100 мс для более быстрого обновления).
  • Для повышения точности следует использовать внешний опорный генератор или кварц.
  • Можно усреднять несколько измерений для снижения шума.

Заключение

Используя таймеры ESP32, можно реализовать простой частотомер для измерения частоты цифровых сигналов. Такой подход демонстрирует возможности аппаратных таймеров ESP32 и позволяет строить недорогие измерительные устройства.

<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Шестерня для зубчатого ремня на 36 зубьев под ось 8 мм

Шестерня для зубчатого ремня на 36 зубьев под ось 8 мм

Используется для передачи и редукции крутящего момента от двигателя до оси 8 ммКоличество зубьев 36 ..

94.71грн.

Использование внутреннего Watchdog таймера в ESP32

Использование внутреннего Watchdog таймера в ESP32

Использование внутреннего Watchdog таймера в ESP32 Watchdog (WDT) — это встроенный таймер микроко..

Аудио штекер 3,5мм папа с винтовым клеммником

Аудио штекер 3,5мм папа с винтовым клеммником

Стерео штекер 3,5 мм для монтажа цепей передачи звукового сигнала при помощи винтового клеммника.Выв..

94.08грн.

Светодиод ультраяркий 3мм

Светодиод ультраяркий 3мм

Сверхяркий светодиод диаметром 3 ммКорпус прозрачный у светодиодов разного цвета свечения. То есть р..

0.99грн.

Тестируем WEB-инструмент программирования Arduino на официальном сайте

Тестируем WEB-инструмент программирования Arduino на официальном сайте

Посмотрим поближе на веб-редактор На официальном сайте Arduino в разделе скачки средства програ..

Рекомендуемые товары

ESP32 Timer Groups: архитектура и использование

ESP32 Timer Groups: архитектура и использование

ESP32 Timer Groups: архитектура и использование Микроконтроллер ESP32 имеет мощную систему аппара..

0.00грн.

ESP32: Генерация ШИМ на основе таймера (без LEDC)

ESP32: Генерация ШИМ на основе таймера (без LEDC)

ESP32: Генерация ШИМ на основе таймера (без LEDC) В ESP32 есть несколько способов организовать ши..

0.00грн.