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

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

Введение в таймеры ESP32 Микроконтроллер ESP32 оснащён мощными аппаратными таймерами, которые поз..

Модуль реле для Wemos D1 mini

Модуль реле для Wemos D1 mini

Модуль с электромагнитным реле для установки на плату контроллера Wemos D1 miniХарактеристики реле: ..

51.63грн.

Колпачок на переменный резистор 6мм

Колпачок на переменный резистор 6мм

Чорно-белый декоративный колпачок для переменных резисторов и енкодеровВнутренний диаметр отверстия ..

5.63грн.

ST-Link V2 программатор

ST-Link V2 программатор

Программатор для микроконтроллеровАлюминиевый корпусПоддерживает следующие версии программ для проек..

153.83грн.

OLED шилд для контроллера WeMos D1 mini

OLED шилд для контроллера WeMos D1 mini

Шилд OLED под WiFi-контроллер WeMos D1 mini с диагональю 0,66" и разрешением 64x..

125.17грн.

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

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

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

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

0.00грн.

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

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

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

0.00грн.