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

Модуль расширения входов-выходов 4 реле и 4 DI I2C

Интересный модуль расширения 4-х входов и 4 релейных выходов с коммуникацией I2C на основе микросхем..

475.88грн.

Что нужно знать, чтобы собрать свой ЧПУ?

Что нужно знать, чтобы собрать свой ЧПУ?

Станок ЧПУ (с числовым программным управлением) или по английски CNC позволяет любому ..

Аналоговые входы ESP32: особенности, подводные камни и калибровка

Аналоговые входы ESP32: особенности, подводные камни и калибровка

Аналоговые входы ESP32: особенности, подводные камни и калибровка ADC (Analog-to-Digita..

Набор перемычек (мама-мама) 40шт 10см

Набор перемычек (мама-мама) 40шт 10см

Набор соединительных проводов для соединения плат контроллера с периферией без пайки. Подходят под с..

76.14грн.

Стабилизатор напряжения 3,3 В 800 мА LM1117T-3.3

Стабилизатор напряжения 3,3 В 800 мА LM1117T-3.3

Стабилизатор напряжения в виде микросхемы с тремя ногамиИспользуется для стабилизации нестабилизиров..

19.54грн.

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

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

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

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

0.00грн.

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

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

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

0.00грн.