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 и позволяет строить недорогие измерительные устройства.
Модуль расширения входов-выходов 4 реле и 4 DI I2C
Интересный модуль расширения 4-х входов и 4 релейных выходов с коммуникацией I2C на основе микросхем..
475.88грн.
Что нужно знать, чтобы собрать свой ЧПУ?
Станок ЧПУ (с числовым программным управлением) или по английски CNC позволяет любому ..
Аналоговые входы ESP32: особенности, подводные камни и калибровка
Аналоговые входы ESP32: особенности, подводные камни и калибровка ADC (Analog-to-Digita..
Набор перемычек (мама-мама) 40шт 10см
Набор соединительных проводов для соединения плат контроллера с периферией без пайки. Подходят под с..
76.14грн.
Стабилизатор напряжения 3,3 В 800 мА LM1117T-3.3
Стабилизатор напряжения в виде микросхемы с тремя ногамиИспользуется для стабилизации нестабилизиров..
19.54грн.







