Анализатор спектра АЦП на базе ESP32-C3: профессиональный инструмент для анализа сигналов в реальном времени
Сегодня я представляю комплексный проект — веб-анализатор спектра на ESP32-C3. Это полноценный измерительный инструмент, который преобразует микроконтроллер в автономное устройство для анализа аналоговых сигналов с отображением результатов через современный веб-интерфейс.
Суть проекта
Данная прошивка превращает ESP32-C3 в автономный анализатор спектра с веб-сервером. Ключевые возможности:
- Высокоскоростной сбор данных с АЦП (до 10 кГц) через аппаратный таймер.
- Цифровая обработка сигналов: прямое преобразование Фурье (DFT), оконное взвешивание (Хэмминг), вычисление амплитудного спектра.
- Интерактивный веб-интерфейс с тремя синхронизированными графиками в реальном времени.
- Работа в режиме точки доступа (AP) — не требует внешнего Wi-Fi.
Устройство подключается к любому аналоговому источнику сигнала (0-3.3В) и предоставляет доступ к спектральному анализу через браузер по адресу http://192.168.4.1.
Ключевые технические особенности
1. Аппаратно-оптимизированный сбор данных
- Прерывание по таймеру: Для точной и равномерной выборки с фиксированным интервалом используется аппаратный таймер ESP32-C3, что критически важно для корректного спектрального анализа.
- Кольцевой буфер в ОЗУ: Данные АЦП накапливаются в буфере размером 512 сэмплов с использованием критических секций для потокобезопасности.
2. Алгоритмы цифровой обработки сигналов (ЦОС)
- Дискретное преобразование Фурье (DFT): Реализация на C++ для вычисления частотных составляющих сигнала.
- Окно Хэмминга: Применяется к временным данным для уменьжения эффектов “растекания спектра”.
- Логарифмическая шкала (дБ): Преобразование амплитуд для лучшего восприятия динамического диапазона.
3. Профессиональный веб-интерфейс
- Три синхронизированных графика (на базе Chart.js):
- Амплитудный спектр (основной график).
- Временная форма сигнала (первые 200 сэмплов).
- Спектрограмма (историческая визуализация изменения спектра во времени).
- Панель управления с кнопками запуска/останова, выбором частоты дискретизации (1, 2, 5, 10 кГц) и типа шкалы.
- Панель статуса с ключевыми параметрами в реальном времени.
4. Полная автономность
- Микроконтроллер создает собственную Wi-Fi сеть (
ESP32-ADC-Spectrum). - Не требует подключения к интернету или маршрутизатору.
- Весь интерфейс хранится в памяти устройства (встроенный HTML).
Области практического применения
- Анализ аудиосигналов: Визуализация спектра гитар, синтезаторов, голоса.
- Диагностика электромеханических систем: Выявление частот вибрации двигателей, подшипников.
- Образовательные цели: Наглядная демонстрация теории ЦОС, работы АЦП, свойств сигналов.
- Радиолюбительские проекты: Настройка фильтров, анализ работы генераторов, модуляторов.
- Научные измерения: Мониторинг медленно меняющихся процессов (температура, освещенность, давление).
Архитектура проекта
Основной цикл (loop)
│
├── Веб-сервер (обработка HTTP-запросов)
│ ├── / → HTML-интерфейс
│ ├── /spectrum → JSON с данными спектра
│ ├── /control → управление сбором
│ └── /config → настройки
│
├── Таймерное прерывание (аппаратное)
│ └── Запись АЦП в буфер
│
└── Фоновая обработка
└── При готовности буфера → БПФ → спектр
Уникальные преимущества реализации
- Низкая задержка: Оптимизированный код на C++ с использованием
IRAM_ATTRдля критичных функций. - Стабильность: Корректная обработка прерываний, защита разделяемых данных.
- Гибкость: Возможность изменения частоты дискретизации “на лету” через веб-интерфейс.
- Расширяемость: Чистая модульная структура кода, легко добавлять новые функции ЦОС.
Возможности развития проекта
- Реализация БПФ с прореживанием по времени для увеличения скорости вычислений.
- Добавление различных оконных функций (Ханна, Блэкмана, Кайзера).
- Сохранение данных на SD-карту для долговременного логирования.
- Реализация триггерных режимов захвата сигнала.
- Добавление сетевых протоколов (MQTT для интеграции в IoT-системы).
- Создание мобильного приложения как альтернативы веб-интерфейсу.
Требования к аппаратной части
- Плата: Любая с ESP32-C3 (например, ESP32-C3-DevKitM-1).
- Питание: 5V через USB или 3.3V напрямую.
- Входной сигнал: 0-3.3В (превышение может повредить микроконтроллер).
- Рекомендуется: Делитель напряжения/буфер для сигналов >3.3В.
Инструкция по запуску
- Скомпилируйте прошивку в PlatformIO или Arduino IDE.
- Загрузите на ESP32-C3.
- Подключитесь к Wi-Fi сети
ESP32-ADC-Spectrum(пароль:12345678). - Откройте в браузере
http://192.168.4.1. - Подключите сигнал к пину GPIO0 и запустите измерение.
Заключение
Данный проект демонстрирует, как современные микроконтроллеры, такие как ESP32-C3, позволяют создавать сложные измерительные системы с профессиональным интерфейсом при минимальной себестоимости. Код написан с акцентом на производительность и стабильность, что делает его отличной базой как для практического применения, так и для дальнейшего развития.
Для технической аудитории сайта islife.ru этот проект представляет интерес как пример полноценной системы сбора и обработки данных, объединяющей аппаратные возможности микроконтроллера, алгоритмы цифровой обработки сигналов и современные веб-технологии.
Лицензия: Открытый исходный код. Разрешено использование, модификация и распространение с указанием авторства. Техническая поддержка: Вопросы и предложения по развитию проекта можно обсудить в Telegram: @askfind
📦 Скачать проект
Полный исходный код, схемы и инструкции по сборке доступны в архиве: Скачать ESP32-ADC-Spectrum.zip (размер: 154,1 К (157 798))
В архиве содержатся:
- Полный код прошивки для PlatformIO/Arduino IDE
- Инструкция по использованию
