Всем привет!
В этой части я расскажу вам о цифро-аналоговом преобразователе на основе чипа CS4350 от Сirrus Logic.
ЦАП имеет один цифровой аудиовход I2S и программно не конфигурируется; работая в автоматическом режиме, тянет поток PCM до 192 КГц @ 32 бит; может быть подключен к другим источникам I2S-audio.
Начало читайте здесь: "Аудиоплеер на базе миникомпьютера «Raspberry Pi». Часть 1. Блок питания для Raspberry Pi (5V, 2A)".
Содержание статьи / Table Of Contents
Для аудиоплеера это не приемлемо. Слушать такое просто не прилично. Уж теперь-то я слышу, уж конечно!
Рис 3. Схема аудиовыхода Raspberry PI
Если посмотреть схему, то всё становится ясно. RC–фильтры, подключенные к ШИМ (PWM) выходам чипа BCM2835, вот и вся «звуковая карта» на борту «Raspberry».
Но у процессора BCM2835 есть аппаратный выход «PCM/I2S Audio». Вот он-то нам и нужен. Жаль, только, что нет выхода «MCLK» (Master Clock). И возможности завести внешний «MCLK» тоже нет. Именно поэтому, у ценителей сверх высококачественного звучания «Малинка» попадает в черный список.
В Китае можно купить готовый I2S DAC для «Raspberry», например, на чипах PCM5102, ES9023 и др., но я решил построить свой, самодельный.
Нам нужно выбрать чип ЦАП, который бы смог работать без «MCLK», смог держать 192 КГц @ 24 бит. Так же дифференциальные выходы приветствуются. А если сможет работать самостоятельно, без программной настройки, то вообще замечательно. И такой чип был найден!
Встречайте — СS4350
↑ Схема ЦАП на CS4350
Исключён фрагмент. Полный вариант доступен меценатам и полноправным членам сообщества.
Рис 5. Схема электрическая принципиальная ЦАП CS4350
Чип CS4350 умеет с помощью внутреннего PLL восстанавливать Master Clock из сигнала LRCLK. При необходимости его наличие можно проверить на 8-м выводе, или использовать в каких-то коварных целях.
Это мой первый ЦАП, и программное управление я не стал делать, ограничился автономным режимом «Stand-Alone Mode». Задается режим входами DIF0 – DIF2. В этом режиме при частоте дискретизации до 96 КГц «RMCLK» (Recovered Master Clock) составляет fRMCLK = fLRCLK x 256, а при 176 КГц и 192 КГц получается fRMCLK = fLRCLK x 128.
Основной проблемой, с которой я столкнулся при макетировании – это переходные процессы — щелчки при начале и завершении воспроизведения. Когда I2S-сигнал отсутствует, выходное дифференциальное напряжение имеет максимальную величину (5V = «OUT+» – «OUT-»). Эту постоянную составляющую мы имеем на выходе фильтра.
Для решения данной проблемы есть специальные выходы «MUTE», с помощью которых выход фильтра должен быть закрыт, например, транзистором или быстрым реле. Совершенно случайно я заметил, что когда микросхема находится в состоянии сброса (вход «RESET» = 0) дифференциальное выходное напряжение равно нулю (оба выхода «OUT+» и «OUT-» равны нулю) и на выходе фильтра остается ноль Вольт. Поэтому, я сделал простейший детектор наличия сигнала I2S на элементах DD1, D1, R3, C4. RC-цепочка сглаживает меандр «LRCLK», формируя, тем самым, высокий логический уровень. Когда воспроизведение заканчивается, сигнал «LRCLK» всегда имеет высокий уровень – конденсатор С4 разряжается через резистор R3 и на входе «RESET» формируется низкий логический уровень.
Номиналы резистора R3 и конденсатора С4 подобраны таким образом, что при минимально возможной частоте дискретизации (32 КГц) конденсатор не успевал разрядиться ниже логического уровня единицы (см. Рис. 6).
Если подключать данный ЦАП не к «Raspberry Pi», а к другому источнику, у которого возможно шина i2S при отсутствии воспроизведения имеет низкие
логические уровни, то инвертер DD1.1 следует исключить или заменить повторителем.
ЦАП выполнен на односторонней плате (см. Рис. 7.), вторая сторона служит экраном. Сверху вся плата закрывается металлической крышкой (см. Рис. 1.)
↑ Блок питания для ЦАП
Схема блока питания для ЦАП проста и думаю, в комментариях не нуждается (см. Рис. 8 и 9).↑ Настройка ОС Raspbian
Для того, чтобы включить i2S-выход на «Малинке», в операционной системе должны присутствовать и быть загружены специальные модули ядра. В официальном дистрибутиве Raspbian (Debian для «Малинки») путь к модулям следующий:/lib/modules/3.12.26-rt40+/kernel/sound
Версия ядра может отличаться. Подключаются модули с помощью фала /etc/modules. В моем случае файл modules имеет следующее содержимое:
# /etc/modules: kernel modules to load at boot time.
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
snd_soc_bcm2708_i2s
bcm2708_dmaengine
snd_soc_pcm5102a
snd_soc_hifiberry_dac
Я использую програмный модуль для pcm5102 , так как он не проверяет наличие чипа по SPI или I2C, как например другой модуль snd_soc_pcm1794a.
Далее проверяем командой aplay –l наличие звуковых устройств.
root@raspberrypi:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
Скачал последнюю версию Raspbian — посмотреть, что появилось нового. Список поддерживаемых микросхем увеличился, это радует.
↑ Измерения параметров нашего ЦАП
Измерения — это всегда интересно! В качестве измерительного устройства будет кодек ALC887 встроенной звуковой карты ПК. Как говорится, на безрыбье… Потренироваться. Сойдет на первый раз.При измерениях ЦАП нагружен на резистор 10K и подключен к линейному входу звуковой карты. Тестовые файлы создал в Adobe Audition.
На рисунке 11 шумы при закрытых входах, шнурок в компьютер вставлен, на конце закорочен. SpectrPLUS уже откалиброван.
Далее подключаем к плееру (к ЦАП) рис. 12, воспроизведение отсутствует. Вылезли 50 Гц и две гармоники 100 Гц и 150 Гц. А 25 KГц это, наверное, мой импульсник.
По сигналу 1 Кгц откалибровал 0dB в SpectraPLUS-е.
Рис. 15 Воспроизведение: 1 Кгц, -80dB
Нужно проверить, что амплитуды отображаются верно. -6dB на рис. 14 и -80dB на рис. 15.
На рисунке 17 — пики по сторонам и «горб» — это результат модуляции в следствии джиттера. Представляете?! В моём ЦАП-е… есть… настоящий… джиттер!!!
На рисунке 18 тоже 20 КГц, но при частоте дискретизации тестового файла 192 КГц, все предыдущие тестовые файлы, использованные при измерениях, на 44.1 КГц.
Рисунок 19 — это тестовый трек с тестового диска журнала «Аудиохобби“ [1]. Но там треки короткие и сними неудобно работать.
Рис. 20 АЧХ практическое.
АЧХ снял осциллографом, режим – детектор пиков. Развертка 4 сек. Тестовый sweep-сигнал 40 секунд, чтобы попасть в клетку (5 КГц). Испугал меня сразу завал слева, но как оказалось, ЦАП просто плавно подымает громкость при начале воспроизведения.
Для меня интересно было сравнить АЧХ теоретическое и практическое. Следует отметить, что при таком способе снятия АЧХ, амплитуда не в децибелах, а просто в Вольтах. Если перевести в децибелы то на 50 КГц сигнал упал где-то на 3,2 dB. Вроде, похоже на результат в Multisim-е.
И ещё несколько сигналов.
↑ Полезности по теме
• [1] «77 синтезированных и натуральных сигналов для объективной экспертизы и субъективной оценки разнообразной аудиотехники», Приложение к журналу «Аудиохобби», 2004, H.Сухов, В.Широков.• Даташит на чип CS4350.pdf
• Заказать готовый I2S DAC для «Raspberry» из Китая!
• Заказать одноплатный миникомпьютер Raspberry Pi оттуда же.
• Заказать чип CS4350 на Ебее, оказалась редкая вещь, нашёл только здесь.
↑ Файлы
🎁Печатная плата и схема принципиальная 85.05 Kb ⇣ 113
🎁Проект фильтра в Мультисиме 189.46 Kb ⇣ 78
↑ Заключение
Качеством звука более чем доволен. Осознавая, какой путь проделывают байтики, пока превратятся в звук, вслушиваешься в каждую ноту! И хочется переслушать все любимые композиции на своей поделке. Хе-хе, надо будет ещё какой-нибудь ЦАП сделать. :cool:На этом пока всё.
Спасибо за внимание!
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.