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 і дозволяє будувати недорогі вимірювальні пристрої.
Плата захисту балансування 2-х літій-іонних акумуляторів 7,4В
Контролер BMS захисту двох 18650 акумуляторів з балансиром Захисна плата літієвої батареї, захист в..
112.18грн.
Універсальна монтажна плата на 400 отворів
Макетна плата на 400 отворів для макетування любительських схемотехнічних проектів. Містить 4 лінії ..
85.85грн.
Ніжки для лазерного гравера CNC 4 шт. с кріпленням
Ніжки з МДФ для побудови CNC лазерного гравера. Виконують роль власне ніжок, а також повноцінного кр..
179.78грн.
Моно підсилювач потужності 18 Вт TDA2030A
Модуль одноканального підсилювача потужності звукової частоти на основі легендарної мікросхеми TDA20..
62.86грн.
Радіатор для транзистора 34х25х12мм
Радіатор алюмінієвий для пасивного охолодження різноманітних напівпровідникових силових компонентів:..
29.78грн.







