Вступление:
Данный проект начал свое развитие еще из далекого 2010г. Был сконструирован модуль ЦАП на связке AD1955 + DIR9001 , без всяких конфигураторов и т.д.
Первое включение меня ошеломило! Очень понравилось звучание. И я пошел дальше.Начитавшись того что если переключить ЦАП в 16бит. (а это возможно только при наличии микроконтроллера) звук стает еще более натуральный и качественный. Я взялся за поиски разработчика ПО для моего проекта. В скором времени я нашел исполнителя. Он создал мне софт для управления ЦАПом. Но меня не устроил его функционал. И я решил своими силами создать программу для ЦАП.
В программировании на то время я был полный ноль. (я с трудом понимал что такое байт, бит.. о системах счисления я вообще молчу) Начал изучение. Долго не давалось… но спустя некоторое время мне удалось добиться первых результатов.
Итак, спустя год я написал 1 версию программы для новой версии ЦАП (в этой версии была полностью переработана аппаратная часть) устройство было уже построено на современном приемнике WM8804 который по всем параметрам превосходил DIR9001 (убивало в этом приемнике срыв синхронизации SPDIF при грязной сети в доме…) Была полностью переразведена аналоговая и цифровая часть устройства. Микроконтроллер был интегрирован на плату что исключило сбои из за наводок на шлейфы. Микропроцессор тактировался уже от кварцевого резонатора на 4мГц а не от встроенного генератора. Было создано два независимых программных SPI (это позволило регулировать тактовую частоту шины в широких пределах) интерфейса для управления AD1955 и для WM8804 Что также исключило возможность сбоев. Также были заказаны заводские Печатные платы. Плату разводил в старой, доброй, простой программе — Sprint Layout . Некоторые могут сказать что я сошел с ума 🙂 но мне было удобно рисовать в ней, так как я ее отлично знал.
На сегодняшний день уже создана 4 версия программы. Отточена до идеала. В настройках отображается как 4.0SP
Индикация и управление:
Управление осуществляется одним «джойстиком» на четыре положения с центральным нажатием.
Индикация с помощью ЖК дисплея на 2 строки и 16 символов. В данном случае применил Winstar WH1602D
Возможности данного ЦАП:
1) Конфигурирование ЦАПа и приемника на лету (одновременно оба, для тестирования звучания при разных форматах)
2) Регулирование громкости средствами ЦАП. (отключаемая в меню)
3) Функцию HI-END MODE . Останавливается тактовый генератор MCU Отключается LCD , работает только ЦАП и приемник.
Эта опция срабатывает По истечению программного таймера примерно через > 30сек.
При нажатии любой из кнопок запускается MCU и активируется LCD при чем команда не срабатывает при первом нажатии, а только при втором.
(отключаемая в меню)
4) Функцию AUTO SEARCH поиск входа с наличием аудио потока.
Работает следующим образом:
При «пропадании» сигнала высвечивается NO SIGNAL потом через секунду SCAN в правом верхнем углу и после начинает переключать по порядку входы. Как только находит — сканирование прекращается. (функция отключается в меню) Также в этом режиме можно переключать входы кнопками NEXT и PREV.
5) Функцию авто отключения подсветки (настраивается в меню)
6) Устройство имеет на борту три входа: USB , coaxial , toslink и два выхода отключаемые с меню, toslink и coaxial
7) Устройство Умеет сканировать ЧД и выводить на дисплей .Отображаются соответствующие частоты 22kHz, 32kHz, 44.1kHz, 48kHz, 88.2kHz, 96kHz, 192kHz.
8) Так же имеется на борту «Зуммер» Тоже отключаемый по желанию.
9) Авто подстройка цифрового фильтра (отключаемое в меню).
10) Для отладки. Возможность просматривать массив еепром памяти.
11) Подстройка тактовой частоты (можно ставить кварц от 1 до 8МГц) пробовал от 2 до 6МГц
12) и всякие мелкие функции типа сброса настроек и сброса конфигурации к заводским настройкам.
Исходный код написан на языке Си. Это дает большие возможности. Можно без проблем модифицировать код, добавить что то особенное и т.д.
Исходный код хорошо прокомментирован. Благодаря этому программист быстро сможет «въехать» в алгоритм работы.
Приведу пару важных участков кода. А также постараюсь их описать.
// процедура запуска тактового генератора в режиме HI-END mode interrupt [EXT_INT1] void ext_int1_isr() { sleep_disable(); timer_sleep=0; enable_mcu=1; //************************************************************// flags_enab=1; // флаг активирующий подсветку дисплея min=sek=time=0; // таймер активирующий подсветку //************************************************************// LED=1; timer_delay_read=TCCR1B=TCNT1=timer_sck=0; }
В этой функции обрабатывается запуск процессора после Power down mode . Если не использовать опцию HI-END mode — можно смело выкинуть кусок кода и часть аппаратной части.
if (in_scan == 0) // отображаем частоту дискретизации { if (freg > 5999 && freg < 9000) //32000 { lcd_gotoxy(0,1); lcd_putsf(" 32kHz "); if (flags_sample_rate) { data_spi1 = data_spi1 &~ (1<<0); data_spi1 = data_spi1 &~ (1<<1); // 48kHz if (flags_sample_rate1) { flags=1; flags_sample_rate1=0; flags_sample_rate2=1; flags_sample_rate3=1; } } }
Этот код определяет ЧД для 32кГц (код не совсем оптимизирован в этом плане, но работает отлично. Сейчас сделал бы по другом)
Для других частот код похож. Также в этом участке кода идет определение режима цифрового фильтра — если мы разрешили в настройках управлять автоматически цифровым фильтром.
if (hi_end_mode==1) // Флаг активации этого режима { if(++timer_sleep > 250) // счетчик включения индикации HI-END MODE { flags_led_active=0; LED=1; // включаем подсветку timer_sleep=251; flags_scan_=1; // поднимаем флаг исключения глюка дисплея (Отображение частоты дискретизации) timer_delay_read=0; // сбрасываем таймер подсчета импульсов (образцовый таймер) timer_sck=0; // таймер тактовой lcd_gotoxy(0,1); lcd_putsf(" HI-END MODE "); if (++timer_sleep_enable > 200) // таймер отключения дисплея и МК { timer_sleep_enable=0; timer_sleep=0; button_active=0; // флаг активации клавиатуры, нужен для исключения выполнения команд когда активирован этот режим LED=0; lcd_clear(); flags_led_active=1; enable_mcu=0; // активируем прерывание delay_ms(20); sleep_enable(); powerdown(); } } }
Этот код запускает процесс перехода в режим микро потребления. Из кода все довольно хорошо понятно.
void menu_shou() { switch (menu) { case 0: menu_active(); break; case 1: menu_mclk_mode(); break; case 2: menu_data_width(); break; case 3: menu_serial_data_format(); break; case 4: menu_de_emphasis(); break; case 5: menu_pcm_sample_rate(); break; case 6: menu_out_format(); break; case 7: menu_reset(); break; case 8: menu_mute_system(); break; case 9: menu_version_system(); break; case 10: menu_reset_system(); break; case 11: menu_hi_end_mode(); break; case 12: menu_zummer_enable(); break; case 13: menu_spdif_enable1(); break; case 14: menu_spdif_enable2(); break; case 15: menu_led_control(); break; case 16: volume_control(); break; case 17: mode_WM8804_control(); break; case 18: mode_calibration(); break; case 19: menu_eeprom();break; case 20: menu_end(); break; } }
Здесь мы можем «наращивать» функции , добавлять пункты меню и т.д.
Исходник имеет линейную структуру. То есть, мы включаем устройство и ходим по настройкам. Также само выглядит и код. вверху — начало меню , вниз — конец.
Необходимые компоненты:
Резисторы СМД счетверенные, шаг – 0.5мм
33 – 100 Ом – 1шт.
4.7к – 1шт.
Резисторы СМД 0603
22 Ом – 1шт.
1к – 1шт.
Резисторы СМД 0805
16 Ом – 3шт.
100 – 3шт.
300 Ом – 1шт.
1к – 11шт.
1.2к – 1шт.
1.5к – 3шт.
1.8к – 1шт.
2к – 5шт.
2.2к – 5шт.
3.3к – 3шт.
5.6к – 3шт.
10к – 6шт.
16к -1шт.
47к – 3шт.
150к – 1шт.
1мОм – 1шт.
Резисторы СМД 1206
0 Ом – 3шт.
1 Ом – 6шт.
4.7 Ом – 6шт.
75 Ом – 12шт.
200 Ом – 1шт.
220 Ом – 2шт.
470 Ом – 1шт.
680 Ом – 5шт.
820 Ом – 1шт.
1к – 4шт.
1.2к – 1шт.
1.8к – 1шт.
2к – 4шт.
3к – 1шт.
3.3к – 4шт.
4.7к – 1шт.
6.8к – 4шт.
10к – 4шт.
33к – 1шт.
1мОм – 1шт.
Конденсаторы СМД 0805 NP0
100пФ – 8шт.
270пФ – 4шт.
560пФ – 4шт.
10нФ – 12шт.
100нФ – 2шт.
Конденсаторы СМД 1206 NP0
10нФ — 19шт.
1мкФ – 5шт.
Конденсаторы танталовые СМД (сниженные габариты)
10мкФ/16В – 4шт.
Конденсаторы выводные Nichicon Stand Power (для аналога)
4700мкФ/35В – 2шт.
4700мкФ/25В – 1шт.
Конденсаторы выводные SAMWA (для цифры) 105гр.
4700мкФ/25В – 1шт.
47мкФ/50В – 1шт.
Конденсаторы выводные Nichicon FG
470мкФ/25В или 470мкФ/16В MUSE – 2шт.
Конденсаторы выводные Nichicon MUSE
47мкФ/16В или 25В – 4шт.
100мкФ/16В или 25В – 1шт.
Конденсаторы выводные Nichicon FG
22мкФ/25В или 47мкФ/25В– 7шт.
Конденсаторы выводные ELNA SILMIC2
100мкФ/16В или 100мкФ/25В – 1шт.
Конденсаторы выводные пленочные WIMA MKP2 или подобные по качеству
10нФ – 5шт.
15нФ – 1шт.
100нФ – 3шт.
680нФ – 2шт.
Конденсатор 2кВ
4.7нФ – 1шт.
Диоды СМД 1206
1N4148 – 9шт.
Ферритовые бусины СМД 0805
2-10мкГ — 1шт.
Ферритовые бусины СМД 1206
2-10мкГ — 5шт.
Ферритовые бусины выводные
?мкг – 8шт.
Резисторы выводные 0.25Вт
300 Ом – 2шт.
10к – 2шт.
Резисторы выводные 1Вт
1 Ом – 1шт.
4.7 Ом – 2шт.
10 Ом – 6шт.
39 Ом – 1шт.
Резисторы выводные 2Вт
2.2 Ом – 2шт.
Стабилитроны выводные 0.25- 1Вт
12В – 1шт.
Диоды выводные
FR207 – 5шт.
Разьем штырьковый двухрядный, шаг 2.54
BH-10 — 2шт.
BH-10 R – 1шт.
Разьем штыревой однорядный, шаг 2.54
ZL202-40G – 1шт.
ZL201-40G – 1шт.
Кварцевые резонаторы
4МГц – 1шт.
12МГц – 2шт.
Кнопка тактовая СМД -1шт. 5мм
Кольцо ферритовое СВЧ наружный диаметр 4мм. – 1шт.
Мотается в два провода 0.1-0.3мм 10витков
Потом провода отделяются на первичную и вторичную обмотку
Кольцо такое можно выколупать с трансформатора гальвано-развязки сетевой карты 100мБит.
Список ИМС и их корпуса:
AD1955 |
SSOP-28 |
1шт. |
ЦАП |
||||||
WM8804 |
SSOP-20 |
1шт. |
Приемник |
||||||
PCM2705 |
SSOP-28 |
1шт. |
Конвертер |
||||||
AD8066 |
SOIC-8 |
2шт. |
ОУ |
||||||
LM4562 |
DIP-8 |
1шт. |
ОУ |
||||||
ADM1485 |
SOIC-8 |
2шт. |
Преобразователь |
||||||
ADUM1100 |
SOIC-8 |
1шт. |
Развязка |
||||||
AHC1G125 |
SOT23-5 |
2шт. |
Ст. Логика |
||||||
Atmega32/16 |
TQFP-44 |
1шт. |
Микроконтроллер |
||||||
WH1602D |
… |
1шт. |
Дисплей |
||||||
IRLML0030 |
SOT23 |
3шт. |
Силовой транзистор |
||||||
BC847 |
SOT23 |
1шт. |
Транзистор |
||||||
BC857 |
SOT23 |
1шт. |
Транзистор |
||||||
TQ2-5V/A-5W-K |
DIP-10 |
2шт. |
Реле сигнальное |
||||||
LM1117-5V |
SOT-223/D-PAK |
3шт. |
Линейный стабилизатор |
||||||
LM1117-3.3V |
SOT-223/D-PAK |
1шт. |
Линейный стабилизатор |
||||||
LM317 |
D2PAK/TO220mod |
1шт. |
Линейный регулятор |
||||||
M5230L |
SIP-8 |
1шт. |
Сверхмалошумящий стабилизатор |
||||||
2SC4793 |
TO220F |
1шт. |
Силовой транзистор |
||||||
2SA1837 |
TO220F |
1шт. |
Силовой транзистор |
||||||
L7808-09 |
TO220F |
2шт. |
Стабилизатор общего назначения |
||||||
L7805 |
TO220F |
1шт. |
Стабилизатор общего назначения |
||||||
MBRA340 |
SMA |
4шт. |
Диод Шоттки |
||||||
MBRA160 |
SMA |
12шт. |
Диод Шоттки |
||||||
TORX179 |
… |
1шт. |
Приемник SPDIF |
||||||
TOTX179* |
… |
1шт. |
Передатчик SPDIF |
||||||
Гнездо тюльпан |
… |
4шт. |
|||||||
Гнездо USB-B |
… |
1шт. |
Краткое описание работы меню можно увидеть в архиве.
Также там можно увидеть монтажную схему для сборки устройства.
Схема устройства состоит из 3-х частей.
1) Микропроцессорная
2) Основная (аналог + частично цифра)
3) Мультиплексорная часть.
Схема №1
Схема №2
Схема №3
Эта схема показывает принцип коммутации цифрового сигнала. А также можно понять принцип работы авто поиска. Авто поиск работает очень просто:
Приемник генерирует сигнал отсутствия «аудио», а микропроцессор тем временем перебирает входы. Когда выбран вход с наличием «аудио» приемник снимает сигнал ошибки, и МК перестает переключать входы. Эта функция может отключаться в главном меню.
Фото ЦАП:
Фьюзы ЦАП для прошивки контроллера:
Программа для прошивки Uniprof специально сделал ее скрин, так как она самая простая. Советую шить в ней на маленькой скорости!
Ссылка на программатор: http://avr.nikolaew.org/progr
Измерения:
Данные тесты проводились на бюджетной ЗК ( ~100$ )
В результате получены следующие картинки:
Измерялось при 24бит 44.1кГц.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот | |
---|---|---|---|---|---|---|---|
Схема №1 | |||||||
МК AVR 8-бит | ATmega32A | 1 | |||||
MOSFET-транзистор | IRLML2502 | 2 | |||||
Биполярный транзистор | 2N5551 | 1 | |||||
Биполярный транзистор | 2N5401 | 1 | |||||
Линейный регулятор | LM7808 | 1 | |||||
Линейный регулятор | LM1117-N | 1 | |||||
А1 | Диод Шоттки | MBRA340 | 1 | ||||
D1, D2, D5-D8 | Выпрямительный диод | 1N4148 | 6 | ||||
D3 | Светодиод | 1 | |||||
D4 | Стабилитрон | 9 V | 1 | ||||
С1, С6, С7 | Конденсатор | 10 мкФ | 3 | ||||
С2, С3, С12 | Конденсатор | 1 мкФ | 3 | ||||
С4, С5 | Конденсатор | 22 пФ | 2 | ||||
С9-С11 | Конденсатор | 0.01 мкФ | 3 | ||||
R5, R12-R15, R21, R25 | Резистор | 1 кОм | 12 | ||||
R6, R8, R16-R19 | Резистор | 10 кОм | 6 | ||||
R7 | Резистор | 10 кОм | 1 | 1В | |||
R20, R22 | Резистор | 47 кОм | 2 | ||||
R23 | Резистор | 10 Ом | 1 | ||||
R24 | Резистор | 680 Ом | 1 | ||||
R27 | Резистор | 75 Ом | 3 | ||||
R26 | Резистор | 100 Ом | 3 | ||||
Кварцевый резонатор | 4 MГц | 1 | |||||
K1.1 | Кольцо ферритовое | 1 | |||||
K1.2, K1.3 | Реле сигнальное | TQ2-5V/A-5W-K | 2 | ||||
LS1 | Динамик | 1 | |||||
L1 | Дроссель | 1 | |||||
J9.1, J8.2 | Панелька | BH-10 | 1 | ||||
J1-J5, J7, J1 | Кнопка | 7 | |||||
Схема №2 | |||||||
D1 | Приёмник | WM8804 | 1 | ||||
Цап | AD1955 | 1 | |||||
U2, U3 | Операционный усилитель | AD8066 | 2 | ||||
U4 | Операционный усилитель | LM4562 | 1 | ||||
Линейный регулятор | LM317HV | 1 | |||||
Линейный стабилизатор | MC7805CT | 1 | |||||
Линейный регулятор | LM1117-N | 1 | |||||
Линейный регулятор | LM1117-N | 1 | |||||
U9 | Сверхмалошумящий стабилизатор | M5230L | 1 | ||||
A2-A4 | Диод Шоттки | MBRA160T3 | 3 | ||||
D2 | Выпрямительный диод | 1N4148 | 1 | ||||
MOSFET-транзистор | IRLML2502 | 1 | |||||
Q2 | Биполярный транзистор | BC547 | 1 | ||||
Q3 | Биполярный транзистор | BC557 | 1 | ||||
Q4 | Биполярный транзистор | 2SA1837 | 1 | ||||
Q5 | Биполярный транзистор | 2SC4793 | 1 | ||||
С1, C3, C6, C22, C25-C27, C30, C32, C37, C38C42, C44, C47, C51, C52 | Конденсатор | 0.1 мкФ | 18 | ||||
С2, C36, C43 | Конденсатор | 47 мкФ 35B | 3 | ||||
С4, C5, C21, C39, C41 | Конденсатор | 10 мкФ | 5 | ||||
C7-C10, C19, C20 | Конденсатор | 100 пФ | 6 | ||||
C11, C12, C15, C16 | Конденсатор | 270 пФ | 4 | ||||
C13, C14, C17, C18 | Конденсатор | 560 пФ | 4 | ||||
C28, C29 | Конденсатор | 390 пФ | 2 | ||||
С31 | Конденсатор | 0.01 мкФ | 1 | ||||
С33-С35 | Конденсатор | 2200 пФ | 3 | ||||
С45,С46 | Конденсатор | 470 мкФ | 2 | ||||
С48-С50 | Электролитический конденсатор | 4700 мкФ 35В | 3 | ||||
С55-С58 | Конденсатор | 470 пФ | 4 | ||||
R1, R5, R6, R25, R26 | Резистор | 100 Ом | 7 | ||||
R3, R4 | Резистор | 10 кОм | 2 | ||||
R7, R21-R24, R46 | Резистор | 2.2 кОм | 6 | ||||
R8 | Резистор | 2.8 кОм | 1 | ||||
R9-R12, R50-R52 | Резистор | 2 кОм | 7 | ||||
R13-R16 | Резистор | 6.8 кОм | 4 | ||||
R17-R20 | Резистор | 3.3 кОм | 4 | ||||
R27, R28 | Резистор | 22 Ом | 1 | ||||
R29, R34-R37, R39-R43, R45, R49 | Резистор | 1 кОм | 12 | ||||
R30 | Резистор | 300 Ом | 1 | ||||
R31-R33 | Резистор | 75 кОм | 3 | ||||
R38 | Резистор | 47 кОм | 1 | ||||
R44 | Резистор | 18 Ом | 1 | ||||
R47 | Резистор | 470 Ом | 1 | ||||
R48 | Резистор | 240 Ом | 1 | ||||
К1,1 | Кольцо ферритовое | 1 | Мотается в два провода 0.1-0.3мм 10витков | ||||
Гнездо RCA | 2 | ||||||
Резисторы без обозначения | |||||||
Резистор | 1 Ом | 4 | |||||
L1-L3 | Дроссель | 1 | |||||
Резистор | 22 кОм | 2 | |||||
Резистор | 10 кОм | 9 | |||||
Резистор | 1.82 кОм | 1 | |||||
Схема №3 | |||||||
IC1 | Преобразователь | ADM1485 | 1 | ||||
IC2 | Рфзвязка | ADUM1100 | 1 | ||||
IC3, IC4 | ИС буфера, драйвера | SN74AHC1G125 | 2 | ||||
IC5 | Приемник SPDIF | TORX179 | 2 | ||||
R2, R7-R9, R11 | Резистор | 70 Ом | 6 | ||||
R3, R6, R10 | Резистор | 10 кОм | 3 | ||||
R12 | Резистор | 1 МОм | 1 | ||||
R13 | Резистор | 300 Ом | 1 | ||||
R14 | Резистор | 1 кОм | 1 | ||||
R15 | Резистор | 100 Ом | 1 | ||||
C1 | Конденсатор | 100 нФ | 1 | ||||
С2 | Конденсатор | 2200 пФ | 1 | ||||
С3 | Конденсатор | 10 нФ | 1 | ||||
Tr1 | Трансформатор | 1 | |||||