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 и позволяет строить недорогие измерительные устройства.
Модуль двух кнопок 50x25мм
Две кнопки 12х12мм на плате с отверстиями под крепление.Включать в цепь можно при помощи пайки или ч..
54.77грн.
Arduino SPI: Полное руководство по последовательной шине Serial Peripheral Interface
Arduino SPI: Полное руководство по последовательной шине Serial Peripheral Interface SPI ..
Модуль MOSFET-транзистора N-channel
Модуль (драйвер) силового MOSFET-транзистора для подключения мощной нагрузки на выход контролле..
48.22грн.
MOC3041 оптопара
Оптопара с симисторным выходом.Используется для управления мощным симистором при помощи логических с..
19.53грн.
Создание простого таймера на ESP32: пример периодического вызова функции
Создание простого таймера на ESP32: пример периодического вызова функции При разработке проектов ..







