Прототип RF-001: беспроводная передача звука для музыкантов
В этом посте я подробно рассказываю о своём главном личном проекте по встраиваемым системам: системе беспроводной передачи звука для музыкантов.
Обзор
RF-001 — это музыкальная педаль, которая передаёт звук в реальном времени по воздуху. Цель — дать профессиональным музыкантам гибкое решение для прослушивания: на репетиции им нужно выборочно слышать отдельных участников группы, не возясь с громоздкими проводными подключениями.
Ключевые возможности
-
Модульная конструкция: универсальный приёмопередающий модуль в корпусе, напечатанном на 3D-принтере. Модули можно объединять в «супермодуль», состыковывая их борт к борту через 9-контактные разъёмы D-sub.
-
Качественный звук: передача в реальном времени с низкой задержкой, разрядность 32 бита при частоте дискретизации 44,1 кГц (моно, поддержка стерео запланирована в будущих версиях).
-
Программное управление: полный цифровой контроль функций кодека плюс аналоговое микширование для подключённых модулей:
- эквалайзер (EQ)
- регулировка громкости
- регулировка баланса
- дополнительные функции обработки звука
-
Управление устройством:
- DFU (обновление прошивки устройства) по USB
- настольная программа для полноценного управления устройством
-
Пользовательский интерфейс: интуитивное управление одним энкодером с кнопкой, вывод на OLED-экран.
-
Варианты подключения:
- вход Line/Mic
- выход на наушники (один)
- выход Line (один)
- Связь между модулями: первый модуль может подключаться к ноутбуку как главный контроллер и управлять настройками всех подключённых модулей.
Аппаратные характеристики
- Микроконтроллер: STM32F103RCT6 (ядро ARM Cortex-M3)
-
Аудиокодек: AK4954AEN — плата модуля собственной разработки по схеме включения из документации
- Дисплей: модуль OLED-экрана SSD1306
- Радиочастотный приёмопередатчик: модуль Amicom A7190 для передачи звука
- Память: EEPROM на 8 Кбит (STMicroelectronics)
Ход разработки
Раннее тестирование
Первая успешная демонстрация передачи звука на полной скорости:
Готовый прототип
Полностью собранный прототип одного модуля:
Архитектура проекта
Структура прошивки
- Загрузчик: с поддержкой DFU (стандартная реализация)
- Слой HAL: сгенерирован через STM32Cube для быстрого прототипирования
- RTOS: FreeRTOS для структурной организации кода и управления очередями
- Язык: смешанный C/C++ (сгенерированные исходники на C, собственный код на C++)
- Отладка: RTT (Real-Time Transfer) для вывода логов и отладки
- Драйверы периферии: абстрагированные драйверы для упрощённых передач с DMA и без DMA
- Производительность: вся периферия настроена на DMA для максимальной пропускной способности
- Фреймворк интерфейса: собственный лёгкий фреймворк (на основе библиотеки Adafruit GFX, с планами на будущие улучшения)
-
Тестирование: модульные тесты Catch2 с заглушками периферии и интерфейсов