Новый модульный процессор в авто на базе SigmaDSP ADAU1467. Общая концепция.
В ходе эксплуатации своей рабочей DIY лошадки на базе ADAU1701 я столкнулся со следующими проблемами:
- ограничение в количестве инструкций на семпл: 1041 инструкций на семпл в ADAU1701 - это совсем не густо, и если мы в ходе настройки приходим к расширенной эквализации, то упираемся в общее количество фильтров.
- для диапазона ниже 400-500 Гц нам требуется использовать блоки фильтров с двойной точностью, особенно когда добротность фильтров высока, а это еще сильнее бьет по количеству доступных инструкций.
- невозможность построить разные цепочки обработки сигнала, например с другими задержками (чтобы хоть как-то сгладить неприятную картину пассажиру), и иметь возможность быстро переключать с помощью GPIO, и опять же из-за ограниченного набора инструкций;
- ADC ADAU1701 шумноват. Решается это установкой внешних I2S АЦП (ADAU1761, PCM1808), но я это оставил до сборки нового DSP;
- по сути отсутствует возможность задействовать FIR фильтры, пару таких фильтров съедят все доступные ресурсы, с НЧ диапазоном можно даже не пробовать;
В общем мне его стало просто мало. И при желании выйти в три полосы на текущей системе в автомобиле, я еще больше упрусь в ограничение вычислительных мощностей. Для какой-нибудь 2.1 системы ADAU1701 просто более чем достаточен, но для систем с большим количеством каналов, IRR фильтров с высоким значением добротности, он быстро себя исчерпает.
Поэтому было решено собирать новый DSP. В качестве базового чипа выбор пал на ADAU1467, Правда в этот раз новый DIY процессор будет с расширенным функционалом.
Конечно, можно было бы не заморачиваться со всем этим, и купить себе что-нибудь из DSP линейки Helix, так как там и набор фильтров достаточно богат, и самое главное есть импорт коэффициентов фильтров EQ из REW! Просто copy & paste, не надо руками вбивать 15 значений частоты, уровня и добротности, просто копируем кнопкой в REW, и DSP PC-Tool их подхватывает. Да, дорогие модули расширения, но это современная платформа с постоянной поддержкой и общемировой аудиторией.
Однако это не так интересно и увлекательно! Поставил, настроил, забыл. 😁
В новом проекте придется:
- еще раз разобраться со всеми особенностями взаимодействия разных устройств по шине I2S (master/slave, выбор тактования),
- подготовить систему питания, гальванически развязанную с бортовой сетью автомобиля (звук генератора в выходных каналах я уже как-то слышал 😁);
- разобраться с работой Sigma TCPIP (да, попробуем беспроводное соединение к ADAU1467 для настройки),
- прокачаем немного скил в Python, С и Kotlin, для:
- создания "умного" контроллера питания модулей нового процессора на базе ESP32,
- своего приложения - сервера с API на Raspberry PI для работы с Android приложением на ГУ, нажимаем кнопки на экране ГУ - по WiFi сети отправляем нужные значения регистров в ADAU1467 для регулировки выбранных параметров, например Low Shelf фильтр на НЧ);
- своего Android приложения, для управления параметрами DSP по сети;
- разработки PY скрипта для работы Paspberry Pi с внешним контроллером CAN, будем отслеживать нажатие кнопок на руле, чтобы регулировать громкость непосредственно в DSP (ADAU1467), в том числе и с физической крутилки на отдельном контроллере у подлокотника (еще один проект);
Схема процессора и компоненты:
Общая схема будущего устройства выглядит следующим образом:

Что будем иметь на борту:
- DSP: ADAU1467: это самый мощный чип платформы SigmaDSP:
- 6,144 инструкций при 48 kHz семплировании;
- Огромный объемом памяти под коэффициенты и параметры, и пулом 1,600 мс под задержки;
- Параметризация всё также через SigmaStudio.
- Используется в раде продуктов Helix, в основном в сдвоенном виде, на сколько помню, старшие устройства у Helix уже на платформе Shark;
- Следующим по производительности и возможностью программирования с помощью графического интрефейса будет только DSP на архитектуре Shark - ADSP-21489, новый пакет SigmaStudio+ (Plus) позволяет использовать уже и их для создания проектов. Платы на ADSP-21489 пока есть только у китайцев, люди пока покупают/изучают;
- Для своего проект взял плату RDC PRO 4-0027 от ChipDip;
- Аудиокодек AD 1938:
- Комплексное устройство, имеет 4 входных канала АЦП (дифференциальные) и восемь выходных каналов ЦАП (недифференциальные), с 1В среднеквадратичным на выходе.
- По сути это ЦАП уровня PCM5142 или PCM5102, без каких-либо заявок, но попробуем его сравнить с другими цапами в этом устройстве. В любом случае, как АЦП для ADAU1467 он нужен;
- Для своего проект взял плату AD1938 CODEC V2 от ChipDip;
- ЦАП ES9038Q2M:
- новый компактный модуль от китайцев, вход I2S, версия с OPA1612 и AD8397 на выходе;
- ОУ в "кроватках", посмотрим, возможно AD8397 тут вообще лишний, он тут планировался для работы на низкоомную нагрузки в виде наушников;
- данные 2 канал пойдут у меня на ширики;
- сравню данный ЦАП с AD 1938 на всех полосах, возможно потом масштабирую данные модули в корпусе на другие каналы, либо попробую что-нибудь от AKM;
- Модули на сдвоенных ОУ OPA1632:
- нужны для преобразования входного линейного сигнала в дифференциальный на АЦП AD 1938;
- один из модулей планировал использовать под вход высокого уровня c ГУ, с корректировкой входного уровня путем изменения коэффициента усиления комбинацией дополнительных резисторов на плате (предусмотренно схемой), но затем я решил, что просто выведу линейный сигнал из штатного ГУ Changan CS55 Plus (у нас имеются на плате два SGM5532 перед TDA75616EP), в итоге буду иметь два линейных стерео входа в процессоре;
- использовал платы RDC1-0034 V2 Stereo от ChipDip;
- Коннектор Toslink:
- у ADAU1467 есть родной Spdif вход, поэтому сразу предусмотрим ему коммуникацию по оптике. Так как есть мечты вывести I2S со штатного ГУ и направить по оптике в DSP.
- USB-Audio в штатном ГУ пока никак не удаётся победить, очень сложные отношения там с USB портом (особый режим для ADB);
- Raspberry Pi Zero 2W: будет выступать центральным "мозгом" всего процессора, выполнять целый ряд функций:
- цифровой источник для ADAU1467 (I2S) c подключением по Airplay, Bluetooth AptX, UPnP/MPD, и самое главное - Spotify Connect, что даст возможность использовать приложение Spotify на экране ГУ, но загрузку треков и воспроизведение производить с Raspberry Pi напрямую потоком в ADAU1467 по I2S.
- за все функции источников выше будет отвечать MoodeAudio;
- реализация сервера Sigma TCPIP для беспроводного доступа к ADAU1467 по SPI из SigmaStudio по WiFi, на базе проекта с github: "Analog Devices Sigma DSP control software". Не нужно будет больше подключаться проводом к процессору, загрузку проекта и настройку можно будет выполнять по сети (в автомобиле стоит USB WiFi роутер ZTE);
- коммуникация по CAN шине автомобиля, для регистрации нажатия кнопок регулировки громкости на руле, с последующей отправкой значения регистров в ADAU1467 по SPI. Будем регулировать общую громкость напрямую в DSP, так как источников теперь несколько;
- запуск сервер с API в рамках локальной сети в автомобиле, к которому будет подключаться Android приложение на ГУ. В данном приложении будет выбор определенных параметров, пресетов. Сервер будет получать данные по API в рамках сети, и отправлять нужные значения регистров в ADAU1467 по SPI;
- в будущем придумаем что-нибудь еще 😁;
- CAN модуль MCP2515:
- модуль CAN-шины с SPI интерфейсом, даст возможность Raspberry Pi работать с CAN-шиной автомобиля;
- отлично документирован, огромное количество библиотек, сотни проектов в сети, проблем с ним не возникает;
- ESP32-C3:
- совсем мелкий и простой микроконтроллер, будет выполнять гибкую логику управление питанием Raspberry Pi:
- Raspberry Pi не любит обрыв питания, возможны ошибки файловой системы на SD-карте, что есть невозможность запуска;
- можно не выключать Raspberry Pi, например в течении 6 часов от постоянного питания АКБ, по истечению 6 часов отправлять на GPIO Raspberry Pi сигнал, что в свою очередь стригерит на ней "shutdown -h now", дождется остановки Raspberry Pi и отключит ей питание.
- если в течении 6-часового таймаута был запуск ГУ, сбросить таймаут, и запустить новый. Если в течении предыдущего цикла малина была обесточена, то при запуске ГУ подать на неё питание;
- рассматриваю вариант просто с переводом системы на Raspberry Pi в режим "read-only", но определюсь позже.
- будет управлять запуском и остановкой ADAU1467:
- выключение питание после отключения усилителей (на ADAU1701 можно наблюдать хлопок, поэтому там тоже внедрял задержку);
- задержка включения до запуска AD 1938, так как ADAU1467 должен сам загрузить контрольные параметры в AD 1938 через Control Port при загрузке, и AD 1938 должен быть уже готов их принять;
- совсем мелкий и простой микроконтроллер, будет выполнять гибкую логику управление питанием Raspberry Pi:
- Модули LR7843:
- будут управлять нагрузкой от ESP32-C3 (включение и выключение ADAU1467 и Raspberry Pi Zero 2W;
- Модуль питания 12В / 5В/ 3.3В:
- целый набор DC-DC преобразователей с гальванической развязкой, Hi-Link, серия VRB и URB, заложил хороший запас по мощности для всех диапазонов используемого напряжения (12В / 5В/ 3.3В);
- каскад дросселей и емкостей для максимальной фильтрации питания;
- подробная схема модуля питания и своей вариант платы в следующем посте;
Все комплектующие и детали приобретаются на Ali, Ozon и ChipDip. Подход простой - собираем из того, что доступно, чего нет, попробуем сделать сами.
Корпус DSP будет моделироваться и пойдет в 3D-печать уже после предварительной компоновки компонентов, возможно будет несколько суб-плат своего изготовления для лучшей организации и меньшего количества проводов обвязки.
Проект на несколько месяцев, поэтому много постов сразу не будет. Но все этапы, проекты, настройки, всё покажу.
Следующим постом пойдет проектирование модуля питания, особенность схемы, разводка платы, сборка.