Профессиональный ЦАП с микропроцессорным управлением

Вступление:  

Данный проект начал свое развитие еще из далекого 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-битATmega32A1

MOSFET-транзисторIRLML25022

Биполярный транзистор2N55511

Биполярный транзистор2N54011

Линейный регуляторLM78081

Линейный регуляторLM1117-N1
А1
Диод ШотткиMBRA3401
D1, D2, D5-D8
Выпрямительный диод1N41486
D3
Светодиод1
D4
Стабилитрон9 V1
С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
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-K2
LS1
Динамик1
L1
Дроссель1
J9.1, J8.2
ПанелькаBH-101
J1-J5, J7, J1
Кнопка7
Схема №2D1
ПриёмникWM88041

ЦапAD19551
U2, U3
Операционный усилительAD80662
U4
Операционный усилительLM45621

Линейный регуляторLM317HV1

Линейный стабилизаторMC7805CT1

Линейный регуляторLM1117-N1

Линейный регуляторLM1117-N1
U9
Сверхмалошумящий стабилизаторM5230L1
A2-A4
Диод ШотткиMBRA160T33
D2
Выпрямительный диод1N41481

MOSFET-транзисторIRLML25021
Q2
Биполярный транзисторBC5471
Q3
Биполярный транзисторBC5571
Q4
Биполярный транзистор2SA18371
Q5
Биполярный транзистор2SC47931
С1, C3, C6, C22, C25-C27, C30, C32, C37, C38C42, C44, C47, C51, C52
Конденсатор0.1 мкФ18
С2, C36, C43
Конденсатор47 мкФ 35B3
С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витков
Гнездо RCA2
Резисторы без обозначения
Резистор1 Ом4
L1-L3
Дроссель1

Резистор22 кОм2

Резистор10 кОм9

Резистор1.82 кОм1
Схема №3IC1
ПреобразовательADM14851
IC2
РфзвязкаADUM11001
IC3, IC4
ИС буфера, драйвераSN74AHC1G1252
IC5
Приемник SPDIFTORX1792
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
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

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

Ваш адрес email не будет опубликован.