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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Модуль двух кнопок 50x25мм

Модуль двух кнопок 50x25мм

Две кнопки 12х12мм на плате с отверстиями под крепление.Включать в цепь можно при помощи пайки или ч..

54.77грн.

Arduino SPI: Полное руководство по последовательной шине Serial Peripheral Interface

Arduino SPI: Полное руководство по последовательной шине Serial Peripheral Interface

Arduino SPI: Полное руководство по последовательной шине Serial Peripheral Interface SPI ..

Модуль MOSFET-транзистора N-channel

Модуль MOSFET-транзистора N-channel

Модуль (драйвер) силового MOSFET-транзистора для подключения мощной нагрузки на выход контролле..

48.22грн.

MOC3041 оптопара

MOC3041 оптопара

Оптопара с симисторным выходом.Используется для управления мощным симистором при помощи логических с..

19.53грн.

Создание простого таймера на ESP32: пример периодического вызова функции

Создание простого таймера на ESP32: пример периодического вызова функции

Создание простого таймера на ESP32: пример периодического вызова функции При разработке проектов ..

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

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

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

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

0.00грн.

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

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

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

0.00грн.