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 і дозволяє будувати недорогі вимірювальні пристрої.

<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
ESP32-CAM

ESP32-CAM

Плата WiFi-контролера ESP32S з камерою OV2640 2Mpix Формат зображення – JPEG( підтримує тільки..

293.61грн.

Ультразвуковий датчик відстані HC-SR04 для Arduino, ESP32, STM32

Ультразвуковий датчик відстані HC-SR04 для Arduino, ESP32, STM32

HC-SR04 — популярний ультразвуковий сенсор для точного вимірювання відстані в діапазоні від 2 до 450..

62.06грн.

Драйвер двигуна постійного струму 15А, 5.5–24 В — H-міст A3941 для Arduino, ESP32, STM32

Драйвер двигуна постійного струму 15А, 5.5–24 В — H-міст A3941 для Arduino, ESP32, STM32

Потужний драйвер для керування двигунами постійного струму, побудований на мікросхемі Allegro A3941,..

387.47грн.

Отримання даних через UART Arduino Nano

Отримання даних через UART Arduino Nano

Усім користувачам контролерів Arduino відомо, що можна передавати дані через апаратний порт UART кон..

Розробка електроніки та друкованих плат в Україні

Розробка електроніки та друкованих плат в Україні

Потрібен інженер для розробки електроніки, IoT-пристроїв або друкованих плат в Україні? Ми викон..

Рекомендовані товари

ESP32 Timer Groups: архітектура та використання

ESP32 Timer Groups: архітектура та використання

ESP32 Timer Groups: архітектура та використання Мікроконтролер ESP32 має потужну систему апаратни..

0.00грн.

ESP32: Генерація ШІМ на основі таймера (без LEDC)

ESP32: Генерація ШІМ на основі таймера (без LEDC)

ESP32: Генерація ШІМ на основі таймера (без LEDC) В ESP32 є кілька способів організувати широтно-..

0.00грн.