Odtwarzacz audio z Raspberry Pi (1)

Odtwarzacz audio z Raspberry Pi (1)
Pobierz PDF Download icon

Komputerek Rasberry Pi stał się wygodnym źródłem cyfrowego audio. Można na nim uruchomić specjalizowane darmowe oprogramowanie odtwarzacza muzycznego, na przykład Volumio lub podobny, oraz ma interfejs I2S przeznaczony do przesyłania danych audio między innymi do przetworników cyfrowo-analogowych. Raspbbery Pi może też wysyłać dane audio przez port USB lub sygnał S/PDIF (AES3). Pozostaje dołączyć przetwornik analogowo-cyfrowy i możemy cieszyć się muzyką. Tematem prezentowanego projektu jest właśnie taki przetwornik, gwarantujący odtwarzanie dźwięku w wysokiej jakości.

Podstawowe parametry:
  • współpracuje ze specjalizowanym darmowym oprogramowaniem odtwarzacza muzycznego, na przykład Volumio,
  • przetwornik DAC typu PCM1794A firmy Texas Instruments,
  • zakres dynamiki 127 dB dla sygnału stereo, zniekształcenia THD+N 0,0004%, rozdzielczość 24 bity,
  • przesyłanie danych audio z odtwarzacza cyfrowego do przetwornika poprzez interfejs I2S,
  • układ przetwornika i komputerka z osobnymi zasilaczami liniowymi.

Mało kto pamięta, że cyfrowy format nagrań muzycznych, o handlowej nazwie Compact Disc, na początku swojego istnienia nie miał łatwo. Czołowe amerykańskie firmy fonograficzne CBS Warner i RCA były w latach 80. XX wieku zdecydowanym przeciwnikiem nowej technologii. W firmie CBS powstał system CX (Compatible Expansion), będący rodzajem elektronicznego systemu reduktora szumów, znacznie zwiększającego zakres dynamiki sygnału (o około 20 dB), odtwarzanego z czarnej płyty analogowej LP. Według CBS, wszystkie typowe zakłócenia powstające przy odtwarzaniu zostały wyeliminowane i nie było potrzeby wprowadzania nowych rozwiązań. Właściciele miliardów czarnych krążków nie potrzebowali nawet nowego odtwarzacza, tylko niewielkiego urządzenia, kosztującego około 100 DEM, między odtwarzaczem a wzmacniaczem. Dzięki temu ulepszeniu, specjalnie oznaczone nowe nagrania gramofonowe byłyby prawie na poziomie płyty kompaktowej. Sama płyta CD kosztowała wtedy około 2 razy więcej niż płyta LP. Do tego dochodził koszt odtwarzacza Compact Disc, który miał wynieść ponad 1000 DEM. Z punktu widzenia konsumenta, nawet zamożnego i wymagającego bardzo wysokiej jakości, system CD mógł się wydawać fanaberią.

Pomimo starań CBS system CX okazał się klapą, również techniczną, a w połowie lat 80. rynek płyt kompaktowych eksplodował, przyczyniając się do popularyzacji zapisu cyfrowego. Ma to dzisiaj olbrzymie znaczenie, bo chociaż format CD, z zapisem materiału muzycznego na optycznej płycie, wyraźnie słabnie, to system zapisu cyfrowego zaprojektowany i wdrożony w 1982 roku przez firmy Philips i Sony jest dalej powszechnie używany. Pliki muzyczne, chociaż ciągle dostępne na płytach optycznych standardu Compact Disc, mogą być zapisywane na dowolnym nośniku: dysku HDD, pamięciach Flash (np. pendrive) czy na coraz bardziej popularnych wirtualnych dyskach, umieszczanych w chmurze. Szybki rozwój Internetu umożliwił przesyłanie utworów muzycznych strumieniowo, online, bez konieczności ich zapisywania na lokalnych nośnikach. Są specjalne serwisy muzyczne, które za cenę niezbyt drogiego abonamentu oferują praktycznie niewyczerpane zasoby muzyki z całego świata. Oprócz formatu wav, coraz większą popularność zdobywa format flac, zapewniający bezstratną kompresję plików audio wysokiej jakości oraz lepsze lub gorsze formaty kompresji stratnych, w tym najbardziej popularny MP3. Dla wielu odbiorców formaty stratne oferują zupełnie wystarczającą jakość muzyki.

Chociaż nadal nie ma problemu z odtwarzaniem płyt CD, to dużo lepszym i wygodniejszym sposobem jest używanie, jako źródła danych muzycznych, smartfona, komputera lub specjalizowanych playerów, potrafiących odtwarzać muzykę z różnych źródeł, zapisaną w różnych formatach, w tym formatach stratnych typu MP3 czy OGG. Wygodnym źródłem sygnału cyfrowego stał się jeden z fenomenów świata mikroelektroniki – komputerek Rasberry Pi. Na jego temat napisano wiele.

Dla nas istotne jest to, że można na nim uruchomić specjalizowane darmowe oprogramowanie odtwarzacza muzycznego, na przykład Volumio, oraz to, że ma port I/O, z możliwością wygenerowania sygnałów szeregowego interfejsu I2S, przeznaczonego do przesyłania danych audio, między innymi do przetworników cyfrowo-analogowych. Komputerek Raspbbery Pi może też wysyłać dane audio przez port USB lub sygnał S/PDIF (AES3).

Oprogramowanie pozwala na odczytywanie danych muzycznych z dysków HDD oraz pendrive, dołączonych lokalnie poprzez port USB lub połączenie z Internetem (Ethernet lub Wi-Fi), z dysków sieciowych i serwisów strumieniowych. Dostępne są też stacje radiowe, przesyłające strumieniowo swój sygnał w Internecie. Pozostaje dołączyć przetwornik analogowo-cyfrowy i możemy cieszyć się muzyką. Tematem projektu jest właśnie taki przetwornik, z założenia odtwarzający muzykę z wysoka jakością. W czasie pracy nad nim przyjęto kilka początkowych założeń:

  1. Do przesyłania danych audio z odtwarzacza cyfrowego do przetwornika będzie wykorzystany interfejs I2S;
  2. Układ przetwornika zostanie wyposażony w układy konwertera prąd/napięcie i filtra analogowego (rekonstrukcyjnego) zbudowanego na wzmacniaczach operacyjnych. Różnicowe prądowe sygnały z wyjścia przetwornika będzie można alternatywnie dołączać do innych zewnętrznych układów analogowych, przez zworki na płytce drukowanej;
  3. Układ przetwornika będzie miał swoje autonomiczne zasilanie, zbudowane z zasilaczy liniowych. Do zasilania zostanie użyty osobny moduł zasilacza sieciowego;
  4. Rasberry Pi będzie zasilany z osobnego sieciowego zasilacza liniowego o wydajności 5 A.

Przetwornik cyfrowo-analogowy DAC

Na rynku jest wiele scalonych przetworników cyfrowo-analogowych różnych producentów. Konstruktorzy audiofilskich przetworników bardzo sobie cenią stare „wielobitowe” układy R2R z drabinkami rezystorów typu AD1860 czy PCM1704. To prawda, że dobrze brzmią, ale są coraz trudniejsze do zdobycia i kłopotliwe w aplikacji. Ja założyłem, że użyję nowoczesnego, obecnie produkowanego przetwornika wysokiej klasy. Ponieważ już nie produkuje się wielobitowych przetworników R2R, a jeszcze możliwy do kupienia PCM1704 osiąga zawrotne ceny, pozostały do wyboru przetworniki z konwerterami Sigma-Delta. Wybór padł na rewelacyjny według mnie układ PCM1794A firmy Texas Instruments (Burr Brown). Techniczne parametry układu są bardzo dobre:

  • zakres dynamiki 127 dB dla sygnału stereo,
  • zniekształcenia THD+N 0,0004%,
  • rozdzielczość 24 bity,
  • zaawansowany moduł konwertera cyfra/prąd,
  • 8-krotne nadpróbkowanie we wbudowanym filtrze,
  • częstotliwość próbkowania sygnału wejściowego od 10 kHz do 200 kHz,
  • wyjście prądowe 7,8 mApp,
  • interfejs danych wejściowych w formatach I2S, left justified,
  • wydzielone wyprowadzenia masy i zasilania części cyfrowej 3,3 V (linie interfejsu akceptują poziomy 5 V) i części analogowej 5 V.
Rysunek 1. Schemat blokowy przetwornika PCM1794A

Schemat blokowy przetwornika pokazano na rysunku 1. Dane z interfejsu szeregowego są poddawane standardowemu 8-krotnemu nadpróbkowaniu w cyfrowym filtrze dolnoprzepustowym. Nadpróbkowanie pozwala uprościć analogowy dolnoprzepustowy filtr rekonstruujący, bo może mieć szersze pasmo przepustowe i łagodną charakterystykę opadania. Konwersja cyfra/prąd jest wykonywana w zaawansowanym modulatorze, zbudowanym z dwóch bloków: dekodera ICOB i 5-poziomowego modulatora Sigma-Delta (rysunek 2).

Rysunek 2. Konwerter cyfra/prąd

Sześć starszych bitów słowa danych jest konwertowanych przez moduł ICOB, a 18 młodszych bitów – przez modulator Sigma-Delta. Różnicowe wyjście prądowe z układu, pozwala na zastosowanie zewnętrznego konwertera prąd/napięcie I/V o lepszych parametrach niż ten, który można zaimplementować w strukturze układu scalonego. Przetworniki wyższych klas najczęściej korzystają z takiego rozwiązania. PCM1794A nie ma interfejsu pozwalającego na zapisanie ustawień i ewentualną cyfrową regulację poziomu sygnału przez mikrokontroler – host. Wszystkie możliwe konfiguracje są wykonywane przez wymuszanie stanów logicznych na wejściach konfiguracyjnych układu.

Dobre przetworniki DAC mają możliwość pracy w trybie dual mono, w którym jeden układ konwertuje sygnał z jednego kanału. Na wyjściu filtra otrzymujemy napięciowy sygnał zbalansowany. W systemach audio SE trzeba go poddawać desymetryzacji. Po kilku doświadczeniach z takim rozwiązaniem, zdecydowałem się nie stosować trybu dual-mono. Zysk w typowych niezbalansowanych torach audio jest nie do uchwycenia, a konstrukcja przetwornika zdecydowanie bardziej skomplikowana i droższa. Dlatego przetwornik będzie pracował w typowej konfiguracji stereo.

Wydawało się, że PCM1794A spełnia wszystkie założenia i można go zastosować do budowy odtwarzacza współpracującego z Raspberry Pi przez interfejs I2S. Kiedy szukałem w sieci podobnych opracowań, ze zdziwieniem stwierdziłem, że prawie nie ma podobnych konstrukcji i wiele przetworników opartych na wysokiej klasy DAC, w tym PCM1794A, współpracuje z Raspberry Pi poprzez konwerter USB/I2S. Do tego celu stosuje się, na przykład bardzo znany układ nazwany Amanero. Powszechne są konstrukcje wykorzystujące I2S, oparte na układzie PCM5122 i podobnych, ale z założenia są to przetworniki o gorszych parametrach z wyjściem napięciowym, co potwierdzają parametry układu. Założenia wstępne określają pracę przez I2S, dlatego takie konwertery nie mogły być zastosowane, choć są one nieodzowne dla przetworników współpracujących z komputerami PC, działającymi jako cyfrowe źródło sygnału audio. Po dokładnym zbadaniu sprawy okazało się, że problemem jest jeden z sygnałów potrzebnych do pracy przetwornika PCM1794A, a właściwie jego brak. Raspberry Pi generuje sygnały cyfrowe zgodne ze standardem I2S zbudowanym z trzech linii:

  1. Linia danych SD (Serial Data), nazywana też DATA;
  2. Linia zegara WS (Word Select), określająca, dla którego kanału (lewego czy prawego) są przesyłane bieżące dane. Sygnał WS, nazywany też LRCK, ma częstotliwość równą częstotliwości próbkowania fs;
  3. Linia zegara SCK (Serial Clock) taktującego przesyłanie bitów danych. Częstotliwość tego sygnału jest równa 64 xfs. SCK jest również nazywana BCK.

Z nazwami sygnałów jest trochę bałaganu, bo jak widać są różnie nazywane. My przyjmiemy nomenklaturę stosowaną w danych technicznych PCM1794A: dane –DATA, identyfikacja kanałów LRCK, zegar taktujący przesyłaniem danych BCK.

Przetwornik, do prawidłowego działania, potrzebuje jeszcze jednego sygnału zegarowego, nazywanego System Clock – SCK, który taktuje układy cyfrowe filtra oversamplingu i układy cyfrowe konwertera advanced DAC. Jego częstotliwość, według danych technicznych, musi być wielokrotnością częstotliwości próbkowania, ale nie może być mniejsza niż 128 fs. I tu się pojawia kłopot, bo Raspberry Pi nie generuje takiego sygnału. Zapewne dlatego, że nie jest to sygnał standardu. BCK ma częstotliwość równą 64 fs i jest przynajmniej dwukrotnie za niska. To nieco tłumaczy używanie konwerterów USB/I2S, bo one mają na wyjściu również odpowiedni sygnał SCK i można nim taktować DAC. Sygnał System Clock o odpowiedniej częstotliwości jest również dostępny na wyjściu każdego odbiornika S/PDIF (AES3). Są też nakładki na Raspberry Pi z odbiornikiem WM8804 i wyjściem I2S, pozwalające ominąć ten problem.

Część konstruktorów idzie na skróty, podając równolegle sygnał BCK (64 fs) na wejście SCK. Podobno przetwornik w takiej konfiguracji działa poprawnie, ale mam spore wątpliwości. Stosowanie przetwornika wysokiej klasy po to, by potem nie aplikować go zgodnie z dość wrażliwym zaleceniem producenta, według mnie mija się z celem. Mimo że taki układ działa, to trudno przewidzieć, jakie będą parametry konwersji, przy taktowaniu częstotliwością przynajmniej 2 razy niższą niż zalecana.

Pierwszym pomysłem na rozwiązanie tego problemu było taktowanie SCK z wysokiej klasy oscylatora kwarcowego. Ale to najprawdopodobniej zły pomysł. Sygnał SCK musi być zgodny fazowo z sygnałem LRCK. Nie da się tego uzyskać z niesynchronizowanym oscylatorem. Poza tym taki układ byłby właściwy tylko dla jednej częstotliwości próbkowania.

Naturalnym rozwiązaniem byłoby powielenie częstotliwości sygnału LRCK o częstotliwości fs lub sygnału BCK (64×fs) przez zewnętrzny układ PLL. Tak też zrobiłem w moim przetworniku.

Układ ICS570B

Powielenie częstotliwości i wygenerowanie sygnału SCK powierzyłem układowi ICS570B, produkowanemu przez firmę Renesas. Wybór został podyktowany jego unikalnymi właściwościami:

  • Zastosowaniem rozwiązania ZDB (Zero Delay Buffer). Powielony sygnał wyjściowy nie jest opóźniony w fazie z sygnałem wejściowym. Inaczej mówiąc, nie ma opóźnienia pomiędzy zboczami sygnału wejściowego i wyjściowego;
  • Niskim jitterem sygnału wyjściowego. Według danych katalogowych można osiągnąć jitter sygnału wyjściowego na poziomie 50 ps.

Schemat blokowy układu pokazuje rysunek 3. Do prawidłowego działania potrzebne jest zewnętrzne połączenie pomiędzy sygnałem wyjściowym i wejściem sprzężenia zwrotnego FBIN. Jako sygnał sprzężenia można użyć sygnału wyjściowego CLK lub sygnału wyjściowego, o częstotliwości podzielonej przez dwa CLK2. Jeżeli zakres powielanych częstotliwości na to pozwala, to należy wybrać sygnał podzielony przez dwa (CLK2), ponieważ sygnał wyjściowy CLK ma w tym przypadku lepsze parametry, na przykład dwa razy mniejszy jitter. Dlatego w naszym układzie sygnałem sprzężenia zwrotnego jest sygnał z wyjścia CLK2.

Rysunek 3. Schemat blokowy układu ICS570B

Współczynnik powielania ustawiany jest sprzętowo przez wymuszanie stanów na wejściach konfiguracyjnych S0 i S1. Możliwe jest ustawianie stanu niskiego, wysokiego i wejścia niepodłączonego (float). W naszym układzie, na wejście ICLK jest podawany sygnał BCK, o częstotliwości 64 fs. Wejścia S0 i S1 są niepodłączone, a częstotliwość wejściowa jest mnożona przez 6. Sygnał wyjściowy CLK podawany na wejście SCK przetwornika ma częstotliwość 6×64 fs=384 fs. Zegar systemowy PCM1794A akceptuje mnożniki 128 fs, 192 fs, 256 fs 384 fs, 512 fs i 768 fs. Mamy teraz wszystkie sygnały cyfrowe potrzebne do prawidłowego działania przetwornika, którego schemat pokazuje rysunek 4.

 
Rysunek 4. Schemat przetwornika dla Raspberry Pi
Rysunek 4. Schemat przetwornika dla Raspberry Pi – cd.

Sygnały magistrali I2S z Raspberry Pi są podłączane przez 40-pinowe złącze P11. Wyprowadzenia tego złącza są powieleniem wyprowadzeń złącza I/O komputerka i można je łączyć 1:1. Dalej Sygnały I2S trafiają na złącze P6, w założeniu przeznaczone dla układu izolatora galwanicznego. W części konstrukcji DAC stosowane są izolatory galwaniczne po to, by zakłócenia generowane w komputerku nie przenosiły się poprzez masę do układu przetwornika. To trochę kontrowersyjne rozwiązanie, bo bez dokładnych pomiarów trudno rozstrzygnąć, czy układ izolacji nie wprowadza zniekształceń, na przykład różnych przesunięć fazowych, pomiędzy sygnałami o różnych częstotliwościach na liniach I2S. Może się okazać, że zysk z tłumienia zakłóceń jest całkowicie niwelowany przez wprowadzane zniekształcenia sygnału cyfrowego albo nawet, że z izolatorem jest gorzej niż przy jego braku. W prototypowym rozwiązaniu nie ma izolatora – linie I2S są połączone bezpośrednio do układu przetwornika, przez zworki na złączu P6. Szeregowe rezystory 27 V: R17, R18, R21 i R23 mają za zadanie dopasować wyjścia I2S do wejść PCM1794A i zminimalizować zmiany kształtu sygnałów cyfrowych.

Wejścia konfiguracyjne MONO i CHSL, są na stałe podłączone do masy. Pierwsze z nich konfiguruje przetwornik do pracy w trybie STEREO, drugie – na stałe ustawia „ostrą” charakterystykę filtra cyfrowego. Złącze P5 jest przeznaczone do konfigurowania formatu cyfrowego sygnału wejściowego, deemfazy i układu wyciszania MUTE. Format danych wejściowych ustawiamy na I2S przez wymuszenie stanów niskich na wejściach konfiguracyjnych FMT0 i FMT1. Demfazę należy wyłączyć na stałe przez wymuszenie stanu niskiego na wejściu DEEM. Wejście wyciszania MUTE jest połączone z wyjściem ZERO. Kiedy układy przetwornika wykryją, że wejściowy sygnał cyfrowy jest nieprawidłowy lub zaniknie, to wyjście ZERO wymusza wyciszenie wyjść przetwornika.

Układ U7 to opisywany już układ z pętlą PLL do 6-krotnego powielania częstotliwości sygnału BCK o częstotliwości 64 fs. Wyjściowe prądowe sygnały różnicowe są doprowadzone do złącza P3. To rozwiązanie jest przewidziane do podłączenia innego układu konwertera I/U i filtra dolnoprzepustowego, niż umieszczone na płytce przetwornika. Stwarza to wiele możliwości – konstruowane są układy lampowe, tranzystorowe czy na wzmacniaczach operacyjnych. Różne rozwiązania mają swoich zagorzałych zwolenników i można je w prosty sposób dołączyć do przetwornika. Zastosowany na płytce układ analogowy konwertera U/I i filtra dolnoprzepustowego w praktyce nie daje możliwości typowych eksperymentów z różnymi wzmacniaczami operacyjnymi, bo jest zaprojektowany do obudów do montażu powierzchniowego. Nie można, tak jak w przypadku obudów DIP, stosować podstawek czy tak zwanych płytek – stolików i wymieniać wzmacniaczy operacyjnych. Jeżeli ktoś chce eksperymentować, to złącze P3 mu to ułatwi. W prototypie sygnały prądowe są dołączane do konwerterów U/I na płytce przez zworki na złączu P3.

Podsumowanie

Jest to pierwsza część opisu urządzenia audio, technicznego opisu – na tym się głównie skupiliśmy. Jednak o przydatności każdego elementu toru audio decydują jego walory brzmieniowe. Źródło sygnału audio jest bardzo ważnym elementem toru i od jego jakości w dużej mierze zależy końcowa jakość dźwięku. Oczywiście wszystkie zastosowane techniczne zabiegi, od wyboru interfejsu I2S, poprzez wybór przetwornika, układu analogowego do sposobu zasilania miały na celu uzyskanie tej dobrej jakości. Czy się udało? Dalszy opis konstrukcji oraz relację z testów przetwornika zaprezentuję w kolejnych wydaniach EP.

Tomasz Jabłoński, EP

Wykaz elementów:
Rezystory: (SMD1206, 1%, 0,25 W, jeżeli nie zaznaczono inaczej)
  • R1: 60 Ω SMD1206, 0,5 W
  • R2, R3: 150 Ω
  • R4…R6, R8…R10, R19, R24…R28, R38: 1 kΩ
  • R7, R16, R29, R37: 820 Ω
  • R11, R22, R30, R40: 330 Ω
  • R12, R20, R31, R39: 680 Ω
  • R13, R15, R32, R36: 620 Ω
  • R14, R35: 100 Ω
  • R17, R18, R21, R23: 27 Ω
  • R42: 10 Ω
Kondensatory:
  • C14, C26, C33, C43: 2,2 nF/100 V polipropylenowy MKP
  • C16, C25, C35, C39: 2,7 nF/100 V MKT lub MKP
  • C23, C37: 8,2 nF/100 V MKT lub MKP
  • C40: 10 nF X7R SMD1206
  • C1…C3, C7, C8, C15, C17, C18, C22, C27, C29, C30, C34, C36, C44, C49…C51: 100 nF X7R, SMD1206
  • C42, C52: 10 μF/16 V tantalowy SMD3258
  • C4…C6, C9, C13, C19, C24, C28, C31, C32, C38, C45: 10 μF/25 V elektrolityczny SME
  • C10…C12, C20, C21: 47 μF/25 V elektrolityczny SME
Półprzewodniki:
  • D1: dioda LED czerwona SMD1206
  • U1…U3: TL431 (SOT23-3)
  • U5: PCM1794A
  • U7: ICS570B
  • U9: LT1763 3,3
  • U6, U10: OPA1611AID
  • U4, U8: OPA1612AID
Inne:
  • listwy goldpin podwójne raster 2,54 mm
  • P9, P10, P12…P14: złączki Wago sprężynowe
Artykuł ukazał się w
Elektronika Praktyczna
październik 2020
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje marzec 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów