Данный проект начал свое развитие еще из далекого 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) и всякие мелкие функции типа сброса настроек и сброса конфигурации к заводским настройкам.
Исходный код написан на языке Си. Это дает большие возможности. Можно без проблем модифицировать код, добавить что то особенное и т.д.
Исходный код хорошо прокомментирован. Благодаря этому программист быстро сможет "въехать" в алгоритм работы.
Приведу пару важных участков кода. А также постараюсь их описать.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // процедура запуска тактового генератора в режиме 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 - можно смело выкинуть кусок кода и часть аппаратной части.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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кГц (код не совсем оптимизирован в этом плане, но работает отлично. Сейчас сделал бы по другом)
Для других частот код похож. Также в этом участке кода идет определение режима цифрового фильтра - если мы разрешили в настройках управлять автоматически цифровым фильтром.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 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(); } } } |
Этот код запускает процесс перехода в режим микро потребления. Из кода все довольно хорошо понятно.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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кГц.
Прикрепленные файлы:
- DAC_HI_END_MEGA32_Sour.zip (15 Кб)
- Exe_DAC_HI_END.zip (15 Кб)
- Звуковая карта HI-END WM8804 V2_5.rar (160 Кб)
- Описание работы модуля+ монтажка.zip (4472 Кб)
0 Комментарии