Прототип RF-001: беспроводная передача звука для музыкантов

В этом посте я подробно рассказываю о своём главном личном проекте по встраиваемым системам: системе беспроводной передачи звука для музыкантов.

Обзор

RF-001 — это музыкальная педаль, которая передаёт звук в реальном времени по воздуху. Цель — дать профессиональным музыкантам гибкое решение для прослушивания: на репетиции им нужно выборочно слышать отдельных участников группы, не возясь с громоздкими проводными подключениями.

Ключевые возможности

  • Модульная конструкция: универсальный приёмопередающий модуль в корпусе, напечатанном на 3D-принтере. Модули можно объединять в «супермодуль», состыковывая их борт к борту через 9-контактные разъёмы D-sub.

    Прототип корпуса

  • Качественный звук: передача в реальном времени с низкой задержкой, разрядность 32 бита при частоте дискретизации 44,1 кГц (моно, поддержка стерео запланирована в будущих версиях).

  • Программное управление: полный цифровой контроль функций кодека плюс аналоговое микширование для подключённых модулей:
    • эквалайзер (EQ)
    • регулировка громкости
    • регулировка баланса
    • дополнительные функции обработки звука
  • Управление устройством:
    • DFU (обновление прошивки устройства) по USB
    • настольная программа для полноценного управления устройством

    Настольная программа

  • Пользовательский интерфейс: интуитивное управление одним энкодером с кнопкой, вывод на OLED-экран.

  • Варианты подключения:
    • вход Line/Mic
    • выход на наушники (один)
    • выход Line (один)
  • Связь между модулями: первый модуль может подключаться к ноутбуку как главный контроллер и управлять настройками всех подключённых модулей.

Аппаратные характеристики

  • Микроконтроллер: STM32F103RCT6 (ядро ARM Cortex-M3)
  • Аудиокодек: AK4954AEN — плата модуля собственной разработки по схеме включения из документации

    Модуль 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 с заглушками периферии и интерфейсов

    Модульные тесты

Инструменты разработки

  • Симулятор интерфейса:
  • Система сборки: CMake с детальными конфигурациями запуска

    Конфигурации запуска