DIY ЦАП от Soekris

от автора

Зачем

Как и любой человек, я люблю все новое, а уже если это новое в области увлечения и получения удовольствия, то это вдвойне приятно.

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

В погоне за вкусным звуком своих любимых песен был куплен Soekris 1021 — платка DIY которая по вполне удобоваримой цене, давала тот самый приятный звук, глубокую сцену, и выигрывала у стандартного китайца Topping D50s не по измерениям, а именно по личным впечатлениям от прослушивания. Ссылка на саму плату и ее описание тут: http://www.soekris.dk/dam1021.html

Далее будет описание проекта с небольшими порциями электроники и Ардуино.

Требования к проекту

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

Поэтому был взят Ардуино НАНО на базе которого и стал строится ЦАП.

В качестве монитора взят стандартный 16×2 тектовый контроллер, а в качестве управлялки использована одна кнопка.

Общая конструкция

Изначально, планировался один блок питания, выдающий ±9 вольт как и требуется схеме Soekris, но так как инвертированную схему с общей землей неудобно использовать для работы с другими уровнями питания, а так же с возникшей проблемой медленного старта Ардуино, которая отставала от практически мгновенного старта схемы ЦАП и не успевала к первому выводу установок которые ЦАП выплевывает по UART, то пришлось заиметь второй трансформатор, который питает отдельными 12 вольтами саму Ардуино, и дает 24В для управляющего питания на реле, которые и включают ЦАП при подачи 5 вольт с пина Ардуино на транзисторный ключ.

Общая схема питания выглядит примерно так (я не специалист в рисовалке и EAGLE не имеет картинок ни схемы монитора ни Ардуино, ни даже использованных типов реле, поэтому не судите строго — схема дает представление об идее и подключениях).

Первый БП имеет в составе два LM317 для стабилизации выходных 9В с обеих обмоток с радиаторами, и дополнительные фильтрующие конденсаторы на 47мФ, а второй не задается такой целью, так как получает нужные 12 и 24 вольта с обмоток второго трансформатора. Более того ни управление реле ни Ардуино, не нуждаются в стабилизированном питании.

Немного описания

Soekris доступный по ссылке представляет собой немного нестандартное решение для входа с USB при этом полностью соответствует моему личному представлению о правильной организации системы асинхронной передачи данных.

А именно — в нем реализован входной буфер FIFO который помогает избежать затыков, рассинхронизации клоков, и прочих стандартных болезней на входе в ЦАП по USB.

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

Поэтому у Ардуино задействован стандартный железный Tx/Rx транспорт, для монитора используется обычная стандартная система через I2C, управление обычной кнопкой с софтварным PULL_UP.

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

В стандартном режиме на мониторе отображен вход, используемый поток (PCM/DSD, 44K / 192K и т.д. и текущий фильтр 1 из 4 выбранных). Долгое нажатие включает поочередно режим смены фильтра, режим смены входа и может по кругу вернуться в стандартный режим. При отсутствии действия на кнопке в течении 30 секунд возврат обратно автоматический.

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

Код

Код можно найти тут https://github.com/Gromush/adac на гитхабе.

Скетч поделен на файлы по тематике и легко модифицируется под любое изменение. Все константы зашиты в defs.h, в C формате, тем самым не надо бегать и искать где, что валяется.

Писать описания кода — дело неблагодарное, поэтому только суть.

Все константы для восстановления настроек пользователя лежат в EEPROM

Вся настройка в setup()

void setup() {      sprintf(VersionString, "FW:  %s", VERSION_STRING);   saved.bytes.filter = EEPROM.read(SAVED_ADDR_FILTER);   saved.bytes.input = EEPROM.read(SAVED_ADDR_INPUT);   SetupLed();   SetMainPwrOn();   InitLCD();   ButtonInit();   LCD_Print(0,0, "Starting...", true);   LCD_Print(0,1, VersionString,false);   LCD_PritLogo(12,0);   analogReference(DEFAULT);    analogWrite(BRIGHTNESS,BRIGHTNESS_VAL);   InitSerial();   GetGConfig()->inputType = UNINIT_VAL;   GetGConfig()->mode = MODE_NORMAL;   //DAC ON   pinMode(DAC_PWR_ENABLE,OUTPUT);   digitalWrite(DAC_PWR_ENABLE, HIGH);   SetPwrRdyOn();   WaitSerialChar(INFINIT);   GetDACDataSerial();      if (saved.bytes.filter == 0xFF)   {     saved.bytes.filter = GetGConfig()->FilterNum;     saved.bytes.filter = GetGConfig()->inputType;     EEPROM.write(SAVED_ADDR_FILTER, saved.bytes.filter);     EEPROM.write(SAVED_ADDR_INPUT, saved.bytes.input);   } else   {     // Put saved data to struct and DAC     SetFilter(&saved, true);     SetInput(&saved, true);   }   GetDACDataSerial();   PrintDisplay(); }

Функциональность легко отключается в main функции которая по сути вызывает блочно каждый элемент.

void loop() {   //   //CheckMode();   //   ButtonAction(&saved);   BlinkRdyLed(gBConf);   GetDACDataSerial();   ReturnToMainMode();   IndicatorAnalogs();   }

Заключение

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


ссылка на оригинал статьи https://habr.com/ru/post/693476/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *