Наверх

ΔΣ ЦАП Mercury | Меркурий

Данный проект является, наверное, моим самым длинным долгостроем. Началось его обдумывание и разработка, кажется, в 2010 году. Если мне не изменяет память, то можно найти мои посты в теме "Делаем ЦАП" на форуме "Паяльник" где-то в районе 30-50 страниц. Я начал его делать когда еще плохо разбирался в электронике, поэтому и набил немного шишек. В то время было сложно и дорого заказать печатные платы, приходилось пользоваться непонятными сервисами и услугами частных лиц... Впрочем, обо всем по порядку.


Предыстория

2011 г.

Первая версия трассировалась еще в Sprint Layout на выводных компонентах в две стороны и под ЛУТ. Какой ужас... Я планировал сделать три входа - оптический и коаксиальный S/PDIF и USB на микросхеме PCM2704. Аналоговый выход был умощнен каскадом из предусилителя Вадима Могильного (waso):

Второй вариант платы был урезанным - из трех входов я оставил только один коаксиальный S/PDIF.

Впрочем, ни первому, ни второму варианту не пришлось состояться. По совету участника форума Алексея (Lexus) я начал разводить плату на SMD. С компонентами поверхностного монтажа мне только еще престояло познакомиться, поэтому я выбрал не самый мелкий типоразмер 0805.

Новую версию платы я стал разводить в Altium Designer, попутно его изучая и рисуя себе необходимые библиотеки компонентов. Долго вылизывал изгиб каждой дорожки и получил такой вариант:

Заказ платы планировалось делать на заводе, и для этих целей я нашел сервис pcb4u.ru. Он создавался некими энтузиастами для совместного заказа плат в Китае. Получив свою версию платы, я закупил гору деталей и занялся сборкой.

К сожалению, собственные библиотеки компонентов сыграли со мной злую шутку - по неопытности я перепутал входы у операционных усилителей и ноги у стабилизаторов в питании.

Но тем не менее, после исправления всех ошибок ЦАП заработал! Но мой внутренний перфекционист не мог смотреть на тот ужас, который творился на плате, и я отложил ее до лучших времен. К тому же дешево заказать новую плату мне было негде.


2015 г.

Несколько лет спустя я решил все-таки исправить плату и заказал новую у одного знакомого из Украины. Он их делал, как я понял, "на коленке", но, что самое главное, с металлизацией и маской. Она успешно запустилась и работала.

Но в данной плате все равно есть некоторые недочеты. Во-первых, жутко грелись стабилизаторы питания ОУ, во-вторых, вариант преобразователя ток-напряжения был не оптимальным по схемотехнике - из-за большого выходного тока ЦАПа ОУ выходили из малосигнального режима, что вело к росту искажений, ну и в-третьих - я осознал, что не нужен мне вход S/PDIF.

Третья проблема решилась достаточно просто - был собран источник I2S на основе PCM2707 и я подключил его в обход приемника S/PDIF сигнала. Получился такой макет:

Решением второй проблемы я занялся позже и переделал аналоговую часть - взял схему от ЦАПа Black Kitty. Там ОУ преобразователя ток-напряжения разгружены при помощи эмиттерных повторителей. Оформил это в виде отдельной платки.

В таком виде это и просуществовало до лета 2017-го. Появилось некоторое количество свободного времени и во время очередного прослушивания музыки возникло непреодолимое желание собрать это все в одну кучу на одной плате, чтобы поставить некую точку в этом ЦАПе.


25 августа 2017 г.

Новая плата

Схема претерпела некоторые изменения, в основном в питании. Также важной особенностью стало внедрение гальванической развязки шины I2S на ADuM1400C. На макете на выходе в одном канале присутствует неприятная "постоянка" около 20 мВ, а, стоящие в ФНЧ ОУ LME49990, не поддерживают корректировку нуля. Поэтому в новой схеме ввел для этих целей подстроечник и хотел поставить LT1122, но не смог достать их по адекватной цене и поставил OP42. Все управляющие цепи PCM-ки вывел на отдельный разъем - можно конфигурировать как джамперами, так и какой-то логикой. Аналоговый выход пустил через реле, чтобы была возможность приглушать выход. В питании применял те стабилизаторы, что имелись в наличии. Чтобы конструкция стала законченной, на плату поставил и трансформаторы.

За выходные развел плату, размер которой получился 160 на 90 мм.

ОУ в преобразователе ток-напряжения на макете грелись до 70 градусов (судя по расчетам, это для них норма), поэтому на новой плате сделал под ними заливку с переходными отверстиями на верхний слой и убрал маску. Хоть какое-то охлаждение будет. Точно так же сделано под стабилизаторами ADP3303, но в отличие от ОУ, как я понял из документации, у них хитрая запатентованная внутренняя конструкция, распределяющая равномерно тепло по всему корпусу.

Кроме этого, коллекторам транзисторов добавил небольшие полигончики для лучшего отвода и рассеивания тепла.

Да, и куда ж ЦАП без названия :) Решил окрестить его Меркурием - такой же жаркий.

Впервые попробовал сделать заказ в Seeedstudio. При производстве китайцы плоховато пропечатали маркировку, но в целом качество неплохое.

Сборка и запуск

Далее последовала сборка. Не очень понравилось паять плату с черной маской - все детали черные, теряются на черном фоне, как-то некомфортно. Сама маска очень классная, достаточно прочная, не отваливается кусками при пайке.

Как всегда не обошлось без некоторых ошибок - оказалось, что забыл добавить на плату керамику на выходы стабилизаторов, допаял навесом, и ох уж эти реле... похоже, что миниатюрные они все имеют полярность, которую я успешно перепутал. Также спалил одну ADuM-ку, случайно сделав шлейф зеркально, в результате чего у развязки на приемной стороне возникла переполюсовка питания, ADuM-ка перегрелась и больше так и не запустилась... Но, пережив все это, плата завелась и порадовала музыкой на своих выходах.

Также нужно сказать пару слов о тепловых режимах. Кроме ОУ преобразователей ток-напряжение, достаточно сильно греются стабилизаторы веток питания +/-12V_A и +9V_А и трансформатор питания ОУ. Но все в пределах нормы - не более 60 градусов.

Вот на таком макете он и стал у меня жить. Теперь я был очень доволен получившейся конструкцией. Звучание ЦАПа ровное, приятное, на оркестровых записях масштабное, т.е. в целом очень качественное.


23 ноября 2017 г.

Доработка плат и результаты измерений

Экспериментировал с конденсаторами в цепи ОС преобразователя ток-напряжение (C42..C45).
С номиналом 220 пФ много гармоник в спектре, и при увеличении емкости становится только хуже. При уменьшении до 20-30 пФ все становится хорошо. Оставил 22 пФ.

C32..35 можно ставить больше чем на схеме - емкость в 1 нФ вполне нормальна.

Также ток покоя эмиттерных повторителей получился маловат, поэтому уменьшением номиналов резисторов R36..R39 его надо поднять до 14-15 мА. Я поставил 36 Ом, ТП получился 14,8 мА. "Лес" в спектре, который был изначально в правом канале, пропал. Но в правом канале все равно осталась повышенная 2-я гармоника. Почему - непонятно, но предположительно, что в ФНЧ нужно подбирать R и C, чтобы составляющие дифференциального сигнала складывались как можно точнее для компенсации гармоник.


17 января 2018 г.

Пятая ревизия

Оставить плату со всеми ее недочетами я не мог, поэтому по горячим следам исправил ошибки и выпустил 5 ревизию платы.

Изменений получилось немало:

  1. Исправил ошибку с подключением реле.
  2. Добавил керамические конденсаторы на выходы стабилизаторов.
  3. Заменил футпринты резисторов преобразователя ток-напряжение на выводные.
  4. Добавил ферритовые бусины для м/с гальванической развязки.
  5. Убрал полигон и дорожки над м/с гальванической развязки (насколько это было возможно).
  6. Привел вход к устоявшейся распиновке от Lynx (1 - BCLK, 2 - NC, 3 - SDATA, 4,6,8 - GND, 5 - LRCK, 7 - MCLK, 9 - PWR, 10 - MUTE).
  7. Разъем CTRL сделал универсальным для м/с серии PCM179x с токовым выходом.
  8. Добавил возможность приглушать выход ЦАПа сигналом MUTE с разъема INPUT.
  9. Изменил трассировку и немного схемотехнику обвязки стабилизаторов LM317/337.
  10. Исправил незначительные недочеты в рисунке печатных проводников.

Описание сигналов разъема CTRL

Для PCM1794/98:

Управление аппаратное при помощи установки нужных перемычек, либо программное, а номинал R30-R33 200 Ом.

RST - сигнал сброса ЦАП, инверсный.
F0 - ZERO, сигнал отсутствия сигнала на входе, устанавливается в высокий уровень при обнаружении во входном сигнале 1024 подряд идущих нулевых отсчетов, при этом R2 на плату не устанавливается.
F1 - FMT1, выбор формата входного сигнала, по умолчанию - I2S, низкий уровень (установлена перемычка).
F2 - FMT0, выбор формата входного сигнала, по умолчанию - I2S, низкий уровень (установлена перемычка).
F3 - MUTE, включение режима приглушения, по умолчанию - нормальный режим, низкий уровень (установлена перемычка).
F4 - DEEMP, включение функции de-emphasis, по умолчанию - функция отключена, низкий уровень (установлена перемычка).
F5 - CHSL, выбор формы огибающей встроенного цифрового фильтра, по умолчанию - крутой (sharp), низкий уровень (установлена перемычка), альтернативный вариант - плавный (slow), высокий уровень (перемычка отсутствует).
F6 - MONO, переключение ЦАПа в моно-режим, в данной конструкции эта функция должна быть отключена - сигнал должен быть низкого уровня (установлена перемычка).
OE - OUTPUT ENABLE, включение аналогового выхода, высокий уровень - включен (установлена перемычка), низкий уровень - выключен (перемычка отсутствует).
SR - SAMPLE RATE, сигнал LRCK шины I2S, который показывает актуальную частоту дискретизации.
EXT MCLK - EXTERNAL MCLK, вход внешнего сигнала MCLK.

Для PCM1792/95/96:

Управление только программное, номинал R30-R33 390 Ом.

RST - сигнал сброса ЦАП, инверсный.
F0 - MDO, для SPI - сигнал MISO, для I2C - сигнал данных SDA.
F1 - MC, для SPI - тактовый сигнал SCK, для I2C - тактовый сигнал SCL.
F2 - MDI, для SPI - сигнал MOSI, для I2C - сигнал выбора адреса ADR1.
F3 - nMS, для SPI - сигнал nCS, для I2C - сигнал выбора адреса ADR0.
F4 - MSEL, выбор интерфейса управления м/с ЦАП, низкий уровень - SPI, высокий уровень - I2C.
F5 - ZEROR, сигнал отсутствия сигнала на входе в правом канале, устанавливается в высокий уровень при обнаружении во входном сигнале 1024 подряд идущих нулевых отсчетов в правом канале, при этом R7 на плату не устанавливается.
F6 - ZEROL, сигнал отсутствия сигнала на входе в левом канале, устанавливается в высокий уровень при обнаружении во входном сигнале 1024 подряд идущих нулевых отсчетов в левом канале, при этом R8 на плату не устанавливается.
OE - OUTPUT ENABLE, включение аналогового выхода, высокий уровень - включен (установлена перемычка), низкий уровень - выключен (перемычка отсутствует).
SR - SAMPLE RATE, сигнал LRCK шины I2S, который показывает актуальную частоту дискретизации.
EXT MCLK - EXTERNAL MCLK, вход внешнего сигнала MCLK.

ADuM1400 при подаче MCLK с отдельного генератора должна быть заменена на ADuM1401. Таким образом, плата получилась универсальной и поддерживает установку любой микросхемы серии PCM179x с токовым выходом.

Проведенные сравнительные измерения двух экземпляров ЦАПа на м/с PCM1794 (вых. ток 7,8 mAp-p) и PCM1796 (вых. ток 4,0 mAp-p) показали, что лучший результат THD и IMD дает ЦАП с меньшим выходным током.


20 января 2019 г.

Шестая ревизия

Спустя год я снова вернулся к плате. Я разработал дополнительный модуль с генераторами для ЦАПа, чтобы была возможность использования его в ведущем (master) режиме с подключением, например, к Amanero в ведомом режиме (slave). Поэтому была добавлена поддержка сигнала переключения генераторов (сигнал F0 у Amanero/Combo384). Его нужно завести на 2 вывод входного разъема (44/n48). Также футпринт под трансформаторы сделал универсальным для серий ТП и TEZ.

Добавил информацию о контактах разъема CTRL прямо на плату. Его окончательный вид такой:

Пересобрал свой экземпляр на новой плате и снова снял спектры. Там по прежнему все отлично, а сетевых наводок даже меньше. А перемерив все с новым измерительным АЦП, я обнаружил, что на самом деле ЦАП выдает параметры лучше, чем я измерял ранее.

Ниже приведены итоговые результаты измерений из программы RMAA.



Краткая сводка измерений и характеристик приведена в таблице:

Номинальный выходной уровень 2,2 В RMS
THD, 0 дБ 0,00005 (44,1 кГц)
0,00005 (48 кГц)
0,00009 (96 кГц)
0,00018 (192 кГц)
THD, -6 дБ 0,00010% (44,1 кГц)
0,00010 (48 кГц)
0,00015 (96 кГц)
0,00031 (192 кГц)
SNR 112,6 дБ (44,1 кГц)
114,9 (48 кГц)
112,3 (96 кГц)
110,7 (192 кГц)
IMD (8 кГц + 9 кГц) менее 0,0001% (44,1 кГц)
Частотный диапазон 0 Гц – 20 кГц по уровню -0,5 дБ


При установке дополнительного модуля с генераторами добавится поддержка обратного тактирования с автоматическим переключением генераторов.



17 апреля 2021 г.

Ставим точку

Все время разработки ЦАП существовал в виде макета на фанерке. Было много разных мыслей по поводу корпуса.. и за этими мыслями прошли годы :D И вот в начале 2021 года я присмотрел один китайский корпус и принял решение купить его и поселить ЦАП туда. Искал именно с отверстиями, так как ЦАП во время работы довольно горяч:

Качество изготовления очень неплохое, все детали хорошо подогнаны друг к другу. Очень легко и удобно разбирается.

Далее я начал прорабатывать компоновку и думать о том, как управлять ЦАПом - то есть что будет на передней панели. Вот так я решил расположить имеющиеся платы, слева за трансформаторами ЦАПа решил поставить сетевой фильтр, который давно лежал без дела:

Включать ЦАП мне хотелось простой тактильной кнопкой, поэтому необходимо было сделать систему дежурного питания и поставить микроконтроллер. Также, т.к. звуковой интерфейс в виде Combo384 имеет выходы, сигнализирующие о текущей частоте дискретизации, я решил их использовать и вывести информацию о частоте на световой индикатор. Для этих целей был взят имеющийся у меня HCMS-2915.

Определившись с элементами передней и задней панелей я принялся за проработку их дизайна. Если с задней панелью все понятно, то для передней было придумано несколько вариантов и утвердил я такую простую и лаконичную, на мой вкус, версию:

Теперь можно было приступить к разработке печатной платы передней панели, где должны находиться трансформатор дежурного питания, реле, подающее питание на ЦАП и микроконтроллер с дисплеем, светодиодом и кнопкой.

Посидев пару вечеров, разработал такую плату:

Попутно разработал адаптер для разъема Combo384, т.к. нужно было вывести сигналы частоты дискретизации:

Заказал фрезеровку панелей, оргстекла и нанесение маркировки. Попутно пришлось напечатать пару деталей крепления платы. Узел передней панели в сборе и процесс сборки:

Конечный результат того, что получилось, можно увидеть на фото:

На фото ниже показано как выглядит передняя панель ЦАПа в дежурном режиме, в режиме воспроизведения и без подключения к компьютеру:

Еще немного фото:

Кажется, я таки поставил точку с этим ЦАПом :)

Файлы платы ЦАП:

Скачать проект Altium Designer (ZIP) | Скачать Gerber-файлы (ZIP)

Ниже представлены дополнительные материалы, касающиеся данного ЦАПа.


Модуль генераторов

Для переключения генераторов разных сеток частот на входной разъем I2S следует подать управляющий сигнал на 2 вывод. Лог. 0 соответствует сетке x48, лог. 1 - сетке x44. Далее после гальванической развязки он попадает на разъем CTRL.

Поэтому был разработан модуль, который содержит пару генераторов на обе сетки частот мастерклока и управляющий микроконтроллер ATtiny24/44/84.

Схема модуля имеет вид:

Логика работы программы до безобразия проста. После инициализации контроллера производится инициализация ЦАПа (опционально), включается один из генераторов в зависимости от сигнала SEL_OSC (Select of Oscillator). Далее МК переключается в режим сна с отключением всех источников тактирования (режим Power-Down). При изменении уровня сигнала SEL_OSC МК пробуждается, приглушает выход ЦАПа путем записи соответствующего бита в его регистр по SPI (бит MUTE регистра 18 PCM1796), переключает генератор и возвращает нормальный режима работы ЦАПа. После этого МК снова уходит в сон до очередной смены уровня сигнала управления генераторами.

Объем программы не занимает и 512 байт.

Файлы модуля генераторов:

Скачать Gerber-файлы (ZIP) | Скачать прошивку (HEX)
Скачать проект Altium Designer (ZIP) | Скачать проект Atmel Studio (ZIP)

Конфигурационные биты (fuses) следует установить в следующие значения:

SELFPRGEN = [ ] RSTDISBL = [ ] DWEN = [ ] SPIEN = [X] WDTON = [ ] EESAVE = [X] BODLEVEL = 4V3 CKDIV8 = [ ] CKOUT = [ ] SUT_CKSEL = INTRCOSC_8MHZ_6CK_14CK_0MS EXTENDED = 0xFF (valid) HIGH = 0xD4 (valid) LOW = 0xC2 (valid)

Подключение к Combo384 (Amanero)

У Amanero нумерация разъема нестандартная - вдоль длинной стороны разъема:

У ЦАПа нумерация контактов в разъеме следующая:

Подключение выполняется по следующей схеме:

Mercury Combo384 1 - BCLK --------------------- CLK - 4 2 - OSC_SEL --- (optional) ---- F0 - 17 3 - SDATA ------------------- DATA - 3 4 - GND ---------------------- GND - 13 5 - LRCK ------------------- FSCLK - 5 6 - GND ---------------------- GND - 14 7 - MCLK -------------------- MCLK - 6 8 - GND ---------------------- GND - 15 9 - PWR ---------------------- 3V3 - 10 10 - MUTE -------------------- MUTE - 11

Файлы адаптера для подключения ЦАПа к Combo384 (Amanero):

Скачать проект Altium Designer (ZIP) | Скачать Gerber-файлы (ZIP)