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 і дозволяє будувати недорогі вимірювальні пристрої.
Кінцевик з коліщатком для 3D принтера або CNC ramps 1.4
Кінцевий вимикач для встановлення на 3D-принтер або CNC-верстат системи ramps 1.4В комплекті кабель ..
52.29грн.
Шестерня для зубчатого ременю на 30 зубців під вісь 8 мм
Використовується для передачі та редукції обертаючого моменту від двигуна до вісі 8 ммКількість зубц..
80.11грн.
Аудіо штекер 3,5мм папа
Аудіоштекер 3,5 мм використовується для подовжувачів аудіосигналу, для передачі сигналу з аудіороз'є..
20.98грн.
Мотор-редуктор з колесом 66мм
Моторчик з пластмасовим редуктором для встановлення на роботизованих машинкахВ комплект входить коле..
111.67грн.
Arduino повернення більше однієї змінної функції
Привіт друзі! З відео Arduino функції ми вже знаємо, що в функцію можна передавати багато змінних, а..







