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 и позволяет строить недорогие измерительные устройства.
Введение в таймеры ESP32: примеры использования и настройка
Введение в таймеры ESP32 Микроконтроллер ESP32 оснащён мощными аппаратными таймерами, которые поз..
Модуль реле для Wemos D1 mini
Модуль с электромагнитным реле для установки на плату контроллера Wemos D1 miniХарактеристики реле: ..
51.63грн.
Колпачок на переменный резистор 6мм
Чорно-белый декоративный колпачок для переменных резисторов и енкодеровВнутренний диаметр отверстия ..
5.63грн.
ST-Link V2 программатор
Программатор для микроконтроллеровАлюминиевый корпусПоддерживает следующие версии программ для проек..
153.83грн.
OLED шилд для контроллера WeMos D1 mini
Шилд OLED под WiFi-контроллер WeMos D1 mini с диагональю 0,66" и разрешением 64x..
125.17грн.







