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 и позволяет строить недорогие измерительные устройства.
Уроки Arduino типы данных для начинающих
Привет друзья от geekmatic.in.ua! Пора заняться полезным делом и разобрать типы данных, представле..
Разработка систем мониторинга: температура, вес, расход воды, влажность
Современный бизнес, сельское хозяйство и промышленность всё чаще нуждаются не просто в электронике..
Умный дом 1. Постановка задачи.
Умный дом 1. Постановка задачи. Каждый человек представляет себе свой умный дом в соответствии со с..
Таймеры Arduino UNO — Часть 4. Применение таймеров для управления сервоприводами
Таймеры Arduino UNO — Часть 4. Применение таймеров для управления сервоприводами Теория ..
Управление машинкой через WiFi
Решил я недавно сделать апгрейд радиоуправляемого игрушечного джипа своего сына. Радиоуправлен..







