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-CAM
Плата WiFi-контролера ESP32S з камерою OV2640 2Mpix Формат зображення – JPEG( підтримує тільки..
293.61грн.
Ультразвуковий датчик відстані HC-SR04 для Arduino, ESP32, STM32
HC-SR04 — популярний ультразвуковий сенсор для точного вимірювання відстані в діапазоні від 2 до 450..
62.06грн.
Драйвер двигуна постійного струму 15А, 5.5–24 В — H-міст A3941 для Arduino, ESP32, STM32
Потужний драйвер для керування двигунами постійного струму, побудований на мікросхемі Allegro A3941,..
387.47грн.
Отримання даних через UART Arduino Nano
Усім користувачам контролерів Arduino відомо, що можна передавати дані через апаратний порт UART кон..
Розробка електроніки та друкованих плат в Україні
Потрібен інженер для розробки електроніки, IoT-пристроїв або друкованих плат в Україні? Ми викон..







