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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Кінцевик з коліщатком для 3D принтера або CNC ramps 1.4

Кінцевик з коліщатком для 3D принтера або CNC ramps 1.4

Кінцевий вимикач для встановлення на 3D-принтер або CNC-верстат системи ramps 1.4В комплекті кабель ..

52.29грн.

Шестерня для зубчатого ременю на 30 зубців під вісь 8 мм

Шестерня для зубчатого ременю на 30 зубців під вісь 8 мм

Використовується для передачі та редукції обертаючого моменту від двигуна до вісі 8 ммКількість зубц..

80.11грн.

Аудіо штекер 3,5мм папа

Аудіо штекер 3,5мм папа

Аудіоштекер 3,5 мм використовується для подовжувачів аудіосигналу, для передачі сигналу з аудіороз'є..

20.98грн.

Мотор-редуктор з колесом 66мм

Мотор-редуктор з колесом 66мм

Моторчик з пластмасовим редуктором для встановлення на роботизованих машинкахВ комплект входить коле..

111.67грн.

Arduino повернення більше однієї змінної функції

Arduino повернення більше однієї змінної функції

Привіт друзі! З відео Arduino функції ми вже знаємо, що в функцію можна передавати багато змінних, а..

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

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

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

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

0.00грн.

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

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

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

0.00грн.