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 и позволяет строить недорогие измерительные устройства.
Режим сна SIM800L с Arduino Nano: энергосбережение и пробуждение по SMS
Режим сна SIM800L и пробуждение Arduino Привет, друзья! Тему этой статьи предложили подписчики. И..
Драйвер A4988. Как использовать ENABLE, SLEEP и RESET
Привет, друзья! Давайте обсудим такой важный вопрос при работе с драйвером A4988, как пины разрешени..
Кабель питания 220В 2х0,75мм2
Сетевой кабель питания 220ВПлощадь сечения провода 0,75 мм2Длина провода 1,8 м..
35.63грн.
Уроки Arduino структура программы для начинающих
Здравствуйте друзья! Вы большие молодцы, что заинтересовались уроками Arduino! Структура програ..
Циклы 1 — Введение в циклы Arduino
Циклы 1 — Введение в циклы Arduino Введение Циклы — это важный инструмент в программиров..






