Професійний ЦАП з мікропроцесорним управлінням

  • Час 30-07-2015, 15:46
  • Автор admin
  • Коментарів 0 Комент.
  • Силка url

Вступ:  

Даний проект почав свій розвиток ще з далекого 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, працює тільки ЦАП і приймач.
Ця опція спрацьовує По закінченню програмного таймера приблизно через gt; 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 gt; 5999 && freg lt; 9000) // 32000 {lcd_gotoxy (0,1); lcd_putsf ("32kHz"); if (flags_sample_rate) {data_spi1 = data_spi1 &~ (1lt; lt; 0); data_spi1 = data_spi1 &~ (1lt; lt; 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 gt; 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 gt; 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 D1, D2, D5-D8 D3 D4 С1, С6, С7 С2, С3, С12 С4, С5 С9-С11 R5, R12-R15, R21, R25 R6, R8, R16-R19 R7 R20, R22 R23 R24 R27 R26 K1.1 K1.2, K1.3 LS1 L1 J9.1, J8.2 J1-J5, J7, J1 D1 U2, U3 U4 U9 A2-A4 D2 Q2 Q3 Q4 Q5 С1, C3, C6, C22, C25-C27, C30, C32, C37, C38C42, C44, C47, C51, C52 С2, C36, C43 С4, C5, C21, C39, C41 C7-C10, C19, C20 C11, C12, C15, C16 C13, C14, C17, C18 C28, C29 С31 С33-С35 С45, С46 С48-С50 С55-С58 R1, R5, R6, R25, R26 R3, R4 R7, R21-R24, R46 R8 R9-R12, R50-R52 R13-R16 R17-R20 R27, R28 R29, R34-R37, R39-R43, R45, R49 R30 R31-R33 R38 R44 R47 R48 К1,1 L1-L3 IC1 IC2 IC3, IC4 IC5 R2, R7-R9, R11 R3, R6, R10 R12 R13 R14 R15 C1 С2 С3 Tr1
Схема №1
МК AVR 8-бітATmega32A1
MOSFET-транзисторIRLML25022
Біполярний транзистор2N55511
Біполярний транзистор2N54011
Лінійний регуляторLM78081
Лінійний регуляторLM1117-N1
Діод ШотткіMBRA3401
Випрямний діод1N41486
Світлодіод1
Стабілітрон9 V1
Конденсатор10 мкФ3
Конденсатор1 мкФ3
Конденсатор22 пФ2
Конденсатор0.01 мкФ3
Резистор1 кОм12
Резистор10 кому6
Резистор10 кому1
Резистор47 кому2
Резистор10 Ом1
Резистор680 Ом1
Резистор75 Ом3
Резистор100 Ом3
Кварцовий резонатор4 MГц1
Кільце ферритовое1
Реле сигнальнеTQ2-5V / A-5W-K2
Динамік1
Дросель1
ПанелькаBH-101
Кнопка7
Схема №2
ПриймачWM88041
ЦапAD19551
Операційний підсилювачAD80662
Операційний підсилювачLM45621
Лінійний регуляторLM317HV1
Лінійний стабілізаторMC7805CT1
Лінійний регуляторLM1117-N1
Лінійний регуляторLM1117-N1
Сверхмалошумящій стабілізаторM5230L1
Діод ШотткіMBRA160T33
Випрямний діод1N41481
MOSFET-транзисторIRLML25021
Біполярний транзисторBC5471
Біполярний транзисторBC5571
Біполярний транзистор2SA18371
Біполярний транзистор2SC47931
Конденсатор0.1 мкФ18
Конденсатор47 мкФ 35B3
Конденсатор10 мкФ5
Конденсатор100 пФ6
Конденсатор270 пФ4
Конденсатор560 пФ4
Конденсатор390 пФ2
Конденсатор0.01 мкФ1
Конденсатор2200 пФ3
Конденсатор470 мкФ2
Електролітичний конденсатор4700 мкФ 35В3
Конденсатор470 пФ4
Резистор100 Ом7
Резистор10 кому2
Резистор2.2 кОм6
Резистор2.8 кОм1
Резистор2 кОм7
Резистор6.8 кОм4
Резистор3.3 кОм4
Резистор22 Ом1
Резистор1 кОм12
Резистор300 Ом1
Резистор75 кОм3
Резистор47 кому1
Резистор18 Ом1
Резистор470 Ом1
Резистор240 Ом1
Кільце ферритовое1 Мотається в два дроти 0.1-0.3мм 10вітков
Гніздо RCA2
Резистори без позначення
Резистор1 Ом4
Дросель1
Резистор22 кОм2
Резистор10 кому9
Резистор1.82 кОм1
Схема №3
ПеретворювачADM14851
РфзвязкаADUM11001
ІС буфера, драйвераSN74AHC1G1252
Приймач SPDIFTORX1792
Резистор70 Ом6
Резистор10 кому3
Резистор1 МОм1
Резистор300 Ом1
Резистор1 кОм1
Резистор100 Ом1
Конденсатор100 нФ1
Конденсатор2200 пФ1
Конденсатор10 нФ1
Трансформатор1
Tags

Коментарі до новини