Odtwarzacz audio z Raspberry Pi (3)

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

Komputerek Raspberry 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. W trzeciej, ostatniej części artykułu omówimy czynności montażowe i uruchomieniowe oraz opiszemy działanie i obsługę odtwarzacza.

Podstawowe parametry:
  • współpracuje ze specjalizowanym darmowym oprogramowaniem odtwarzacza muzycznego, na przykład Volumio,
  • przetwornik DAC typu PCM1794A firmy Texas Instrument,
  • 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.

Montaż układu

Płytka przetwornika

Płytka przetwornika został pokazana na rysunku 12. Użyte elementy do montażu powierzchniowego nie powinny nastręczać problemów montażowych średnio wprawnemu elektronikowi.

Rysunek 12. Płytka przetwornika

Najmniejszy raster wyprowadzeń ma przetwornik. Najlepiej rozpocząć od lutowania rezystorów, układów TL431, potem przetwornika, układu ICS570, stabilizatora 3,3 V i wzmacniaczy operacyjnych. Potem kondensatory elektrolityczne, kondensatory foliowe w filtrze. Na koniec listwy goldpin i największe złączki do podłączenia zasilania. Uwaga – nie montujemy oporników R33 i R34 w obwodzie konfiguracji powielacza częstotliwości ICS570B, bo dla współczynnika powielania 6×, wejścia konfiguracyjne powinny nie być podłączone.

Przetworniki audio dla Raspberry Pi zazwyczaj są wykonywane w formie nakładki, posiadającej gniazdo 40-pinowe, wtykane do złącza I/O. Powstaje wtedy coś w rodzaju „kanapki” z dwóch płytek, jedna nad drugą. Celowo zrezygnowałem tutaj z takiego rozwiązania. Płytki komputerka i przetwornika są umieszczone obok siebie, połączone za pomocą krótkiego kabla 40-pinowego, zakończonego z dwu stron wtykami AWP40 (fotografia 1). Kabel powinien być tak krótki jak to tylko możliwe. Sygnały I2S nie są przystosowane do przesyłania na większe odległości i długi kabel może spowodować nieprawidłowe działanie.

Fotografia 1. Połączenie Raspberry Pi z płytką przetwornika

Płytka przetwornika jest zasilana z osobnego modułu zasilacza. Zawsze w takim przypadku powstaje problem pewnego połączenia zasilacza z płytką przetwornika. Przyznam, że preferuję umieszczanie kompletnych układów zasilania na płytce przetwornika, bo gwarantuje to krótkie i niezawodne połączenia. Z zewnątrz podłączane są tylko napięcia przemienne z transformatora. W tym rozwiązaniu jest inaczej i dlatego zastosowałem sprężynowe złączki Wago do druku. To bardzo szybkie i pewne połączenie dzięki silnej sprężynie złączki.

Alternatywą może być polutowanie kabli zasilających, przez punkty lutownicze przeznaczone do złączek Wago. Na płytce przetwornika jest wyprowadzenie zasilania +5 V, którym można zasilać Raspberry Pi przez złącze I/O napięciem +5 V, ale to ma pewne wady. Zasilanie przez USB-C jest zabezpieczone przed odwrotną polaryzacją i zbyt wysokim napięciem zasilającym.

Ostatecznie, w prototypie podłączyłem zasilanie przez USB-C.

Wyjściowe sygnały audio dla kanału lewego i prawego są wyprowadzone do dwu podwójnych goldpinach. W prototypie do tych wyprowadzeń są przylutowane przewody ekranowane, prowadzące do złączy cinch.

Fotografia 2. Umieszczenie zworek konfiguracyjnych – złącze P6

Przetwornik można w pewnym zakresie konfigurować sprzętowo za pomocą zworek na płytce:

  • Na złączu P6, w celu połączenia sygnałów I2S z Raspberry Pi do PCM1794A (fotografia 2). Uwaga – nie zwieramy pinów 9 i 10 oraz 11 i 12 przeznaczonych do zasilania opcjonalnego separatora sygnałów I2S;
  • Na złączu P5 są zwarte wszystkie piny. Pin 1 zwarty z pinem 2 wymusza sygnał MUTE, dla braku prawidłowego sygnału cyfrowego na wejściu przetwornika (ZERO). Zwarcie pinu 2 i 4 wyłącza preemfazę. Zwarcie pinu 5 i 6 oraz 7 i 8 wymusza stan 00 na wejściu FMT0 i FMT1, ustawiając format danych wejściowych I2S;
  • Jeżeli jest używany układ konwerterów I/U i filtra na płytce przetwornika, to trzeba zewrzeć piny złącza P3, podając prądowe sygnały różnicowe na wejście konwerterów I/U.

Moduł zasilacza

Płytka zasilacza została pokazana na rysunku 13. Są na niej umieszczone wszystkie elementy łącznie z dwoma transformatorami w obudowach, z wyprowadzeniami przeznaczonymi do zamontowania na płytce drukowanej.

Rysunek 13. Płytka modułu zasilacza

Montaż nie powinien nastręczać żadnych trudności. Tak jak na płytce przetwornika, do podłączenia napięć wyjściowych zastosowałem złączki sprężynowe Wago. Tranzystor wykonawczy dla układu napięć ujemnych, powinien mieć mały radiator, bo obciążenie w obwodzie napięć ujemnych jest wyższe, niż w obwodzie napięć dodatnich. Zmontowany układ pokazano na fotografii 3.

Fotografia 3. Zmontowany moduł zasilacza

Zasilacz Raspberry Pi

Moduł zasilacza 5 V, 5 A dla Raspberry Pi zmontowałem na kawałku uniwersalnej płytki drukowanej. Stabilizator LM1084 został przykręcony do sporego radiatora. W trakcie normalnej pracy komputerka, pod kontrolą programu Volumio, z podłączonym przez USB dyskiem HDD o pojemności 1 TB, radiator jest tylko lekko ciepły. Zmontowany zasilacz został pokazany na fotografii 4.

Fotografia 4. Prototyp zasilacza 5 V, 5 A

Napięcie +5 V jest doprowadzone do złączek Wago, gdzie podłączone są przewody przylutowane do gniazda USB-A, przeznaczonego do montażu powierzchniowego. Do podłączenia zasilania Raspberry Pi, użyłem przewodu USB-A z wtykiem USB-C. Przewód ten miał być w założeniu dobrej jakości, co sugerowała jego cena. Po wielu godzinach użytkowania, nie było problemu z zasilaniem, więc jakość jest wystarczająca.

Uruchomienie układu

Wszystkie zmontowane moduły należy połączyć ze sobą. Prototypowy odtwarzacz został zamontowany w starej obudowie po zniszczonym tunerze FM (fotografia 5). Połączenia pomiędzy modułem zasilacza i przetwornika, zostały wykonane z użyciem giętkich przewodów o przekroju 0,75 mm2 (fotografia 6). Oprócz modułów komputerka, przetwornika i zasilaczy, znalazło się tam miejsce na przenośny dysk HDD z interfejsem USB. Na dysku tym zostały zapisane pliki, przegrane z części moich płyt CD.

Fotografia 5. Wszystkie moduły odtwarzacza zamontowane w obudowie

Po wykonaniu połączeń, sprawdzamy czy wszystkie napięcia są poprawne. Jeżeli tak, to można przejść do testowania odtwarzania plików muzycznych. Do tego celu potrzebne jest odpowiednie oprogramowanie komputerka. Wybrałem aplikacje Volumio, ale są też inne równie dobrze spełniające swoja rolę. Volumio jest zoptymalizowaną aplikacją Linux-ową, przeznaczoną tylko do odtwarzania muzyki. Po włączeniu zasilania, uruchamia się automatycznie i przejmuje kontrolę nad Raspberry Pi. Ma to swoje zalety, bo nie musimy uruchamiać programu ręcznie, na przykład z poziomu Raspbiana.

Fotografia 6. Połączenia pomiędzy modułem zasilacza i przetwornika

Aplikacja Volumio

Volumio pobieramy ze strony volumio.org, w postaci spakowanego pliku z rozszerzeniem .zip. Po rozpakowaniu mamy do dyspozycji plik obrazu systemu .iso, który należy nagrać na karcie SD, przeznaczonej dla Rasbperry Pi. Obraz systemu trzeba nagrywać na karcie za pomocą specjalnego programu. Ja do tego celu użyłem aplikacji Etcher. Po nagraniu obrazu systemu, wkładamy kartę do złącza Raspberry Pi i włączamy zasilanie.

Aplikacja domyślnie nie obsługuje żadnego lokalnego interfejsu użytkownika, zbudowanego na przykład z monitora i myszki lub ekranu dotykowego. Volumio ma za to wbudowany serwer WWW i za jego pomocą można urządzenie konfigurować oraz sterować jego pracą. Przy pierwszym uruchomieniu Raspberry Pi z Volumio trzeba go podłączyć do routera sieci lokalnej LAN, za pomocą kabla Ethernet. Router przydzieli Volumio adres w sieci lokalnej i można się z nim łączyć, za pomocą standardowej przeglądarki www urządzenia (komputer, smartfon), połączonego do tej samej sieci LAN. Według autorów aplikacji najlepiej, kiedy jest to przeglądarka Chrome. W przeglądarce wpisujemy volumio/local i powinna pojawić się strona interfejsu użytkownika.

W przypadku dowolnego komputera pracującego pod kontrolą Windows tak się dzieje, ale u mnie nie zadziałało z przeglądarką Chrome, uruchomioną w smartfonie pod systemem Android. Przez stronę WWW konfiguracji routera podejrzałem jaki adres został przydzielony Volumio. W moim przypadku, po wpisaniu 192.168.1.6 strona się otworzyła, ale nie drążyłem dalej tego problemu.

Smartfon jest bardzo wygodnym elementem sterującym i spełnia role inteligentnego pilota. Po pierwszym uruchomieniu można w konfiguracji wybrać swoja sieć Wi-Fi i połączyć się z nią po wpisaniu klucza. Nie musimy używać interfejsu Ethernet do połączenia z ruterem, ale trzeba pamiętać, że adres IP, przy połączeniu przez Wi-Fi, będzie najprawdopodobniej inny, niż przy połączeniu przez Ethernet. U mnie, dla Ethernet ustawione było 192.168.1.6, a dla Wi-Fi – 192.168.1.3. Połączenie Rspberry Pi przez Wi-Fi jest bardzo wygodne. Pozwala umieścić odtwarzacz w dowolnym miejscu zasięgu domowego Wi-Fi. Jeśli chcemy, aby poziom zakłóceń EMI generowany przez Raspberry Pi był jak najmniejszy, to lepszym rozwiązaniem jest połączenie przez Ethernet i wyłączenie Wi-Fi. Moduł radiowy pracujący bardzo blisko układów audio, może być przyczyną dodatkowych zakłóceń. Ethernet jest też lepszym wyjściem, kiedy źródłem danych audio są serwery plików, czy dyski sieciowe.

W trakcie użytkowania odtwarzacza okazało się też, że podłączenie lokalnego dysku HDD do interfejsu USB 3.0, skracało wyraźnie zasięg Wi-Fi. Najlepiej, gdy dysk był połączony przez interfejs USB 2.0, w pełni wystarczający do poprawnego transferu danych audio. Trudno powiedzieć, czy jest to przypadłość komputerka, czy raczej zastosowanego sposobu zasilania, albo umiejscowienia, w co prawda otwartej, ale metalowej obudowie. Tak czy inaczej, jeżeli jest taka możliwość, to powinno się wyłączyć Wi-Fi z poziomu ustawień Volumio.

Nie będę szczegółowo opisywał konfiguracji sieci, czy konfiguracji interfejsu katalogowania i wyszukiwania nagrań. Interfejs jest w miarę intuicyjny, a w przypadku wątpliwości można poczytać instrukcję. Skupimy się na skonfigurowaniu interfejsu audio I2S tak, by Volumio działało z naszym przetwornikiem. W zakładce Ustawienia → Opcje odtwarzania, są cztery panele:

  • wyjście audio,
  • opcje odtwarzania,
  • opcje głośności,
  • audio resampling;

Najpierw trzeba w panelu Wyjście Audio włączyć interfejs I2S i z menu wybrać typ przetwornika. Na liście jest sporo różnych typów. O ile mi wiadomo, aplikacja może obsługiwać, oprócz samego interfejsu I2S, różne funkcje dodatkowe, na przykład cyfrową regulację w układzie przetwornika, za pomocą jakiegoś interfejsu szeregowego, choćby SPI. W naszym przypadku potrzebujemy tylko sygnału I2S, bo nasza konstrukcja nie przewiduje funkcji dodatkowych. Wybieramy Generic I2S DAC. Ustawienia wyglądają następująco:

  • urządzenie audio: Generic I2S DAC,
  • I2S DAC – ON,
  • DAC Model Generic I2S DAC;

Klikamy na Zapisz. Powyższą konfigurację pokazuje rysunek 14.

Rysunek 14. Konfiguracja wyjścia I2S

Można eksperymentalnie wybrać inne przetworniki i odtwarzacz powinien działać. Kolejnym ustawieniem są opcje odtwarzania (rysunek 15):

  • DSD Playback Mode – przyznam, że nie rozumiem tego ustawienia. W instrukcji jest napisane, że jeżeli DAC nie obsługuje bezpośrednio DSD, to trzeba strumień danych przesyłać przez jakiegoś typu konwersję na PCM. W moim przypadku odtwarzanie działało przy obu ustawieniach i zostawiłem DSD Direct;
  • DSD Auto Volume Level i Normalizacja głośności – nasz przetwornik nie obsługuje żadnych z tych opcji i zostały one wyłączone;
  • Rozmiar bufora Audio – tu definiuje się jaka jest pojemność bufora w pamięci RAM na dane audio. Im większy bufor, tym mniej transferów danych z dysku lub sieci. W miarę możliwości, wybieramy największą wartość;
  • Buforuj przed odtwarzaniem – procent zapełnienia bufora przed rozpoczęciem odtwarzania.
Rysunek 15. Opcje odtwarzania

W panelu Opcje głośności można włączyć programowy mixer. Programowa modyfikacja cyfrowego sygnału audio jest dość prosta w implementacji. Możemy regulować głośność, filtrować pasmowo (equalizer) itp. Jednak każda z tych modyfikacji powoduje, że tracimy jakąś część jakości sygnału wejściowego. Z mojego doświadczenia wynika, że regulacje poziomu sygnału najlepiej jest robić po konwersji w torze analogowym. Dlatego mixer programowy wyłączyłem, ale dla zabawy można go włączyć i sprawdzić, czy dobrze działa.

Przechodzimy do ostatniego panelu Audio Resampling. Zagorzali audiofile chcieliby, żeby odtwarzacz spełniał wymagania tak zwanego bit perfect, czyli że cyfrowy sygnał wejściowy nie powinien być w ogóle modyfikowany. To oczywiście w przetwornikach typu PCM1794A nie jest możliwe, bo wejściowy strumień danych jest i tak poddawany 8-krotnemu nadpróbkowaniu przed konwersją C/A. Przyjmuje się, że odpowiednio wykonany resampling, czyli zmiana częstotliwości próbkowania, go nie degraduje, tak jak na przykład cyfrowa regulacja poziomu sygnału (głośności). Teoretycznie, również sztuczne zwiększanie rozdzielczości sygnału wejściowego, jest zabiegiem obojętnym. Dlaczego o tym piszę? Bo pojawił się problem, którego rozwiązaniem było włączenie opcji resamplingu i porzucenie idei bit perfect już na wejściu przetwornika.

Na płytach kompaktowych CD materiał dźwiękowy ma parametry: słowo 16-bitowe i częstotliwość próbkowania 44,1 kHz. Pliki .wav o takich parametrach nie były przez przetwornik w ogóle odtwarzane. Początkowo przy uruchamianiu urządzenia, trudno było zrozumieć przyczynę. Okazało się jednak, że Volumio odtwarza takie pliki w ciekawy sposób.

Jak wiemy, w interfejsie I2S sygnał LRCK ma częstotliwość równą częstotliwości próbkowania. W czasie połowy okresu LRCK przesyłane są 32-bity jednego kanału, a w czasie drugiej połowy okresu – kolejne 32-bity drugiego kanału. 32 bity na kanał jest przyjęte nadmiarowo, żeby w przyszłości, kiedy pojawia się pliki o większych rozdzielczościach, nie trzeba było projektować i stosować nowego standardu. Sygnał BCK, w czasie całego okresu LRCK, taktuje przesłanie 64 bitów, czyli ma częstotliwość równą 64 fs (rysunek 16).

Rysunek 16. przykład przesyłania danych 24 bitowych przez I2S

W przypadku danych z płyt CD o długości 16 bitów, Volumio robi coś dziwnego. LRCK ma częstotliwość 44,1 kHz, na linii danych jest przebieg z danymi, lecz słowo danych dla jednego kanału ma długość 16 bitów, a nie 32 bitów. Z tego powodu, w czasie przesyłania danych dla dwu kanałów, są przesyłane 32 bity i BCK ma częstotliwość 32 fs. PCM1794A nie rozumie takiego formatu wejściowego i blokuje konwersję. Przetwornik nie działa i brak jest sygnału na wyjściu. Jednym rozwiązaniem które znalazłem, to włączenie modułu Audio Resampling i zwiększenie w ustawieniach Target Bit Depth formatu do 24 bitów (więcej niż 16 bitów). Operacja zwiększenia długości słowa, polega na dopisaniu ośmiu zer na najmłodszych ośmiu pozycjach słowa danych. Nie powinno to mieć żadnego znaczenia dla odtwarzania, ale na wejściu przetwornika jest jednak zmodyfikowany sygnał danych. Po ustawieniu opcji wszystko zaczęło działać. Można zostawić 44,1 kHz, albo najlepiej opcję native, bo wtedy resampler nie zmienia częstotliwości próbkowania sygnału wejściowego. Przykład ustawienia panelu Audio Resampling pokazuje rysunek 17.

Rysunek 17. Ustawienia panelu Audio Resampling

W czasie testów ustawiałem różne Target Sample Rate, od native, przez 48 kHz do 88,4 kHz. Nie usłyszałem jakieś wyczuwalnej różnicy w działaniu przetwornika. Nie były to zbyt dogłębne testy i nie należy z nich wyciągać ostatecznych wniosków. Jakość algorytmu ustawiamy na najwyższą Very High. Po tych zmianach sygnał I2S na wyjściu Raspberry Pi pod kontrolą Volumio, wyglądał tak jak na rysunku 16.

Robiłem testy także ze zwiększeniem długości do 24 bitów słowa danych, w trakcie zgrywania plików z płyty poprzez Nero. Takie pliki były również odtwarzane prawidłowo, tylko że niepotrzebnie miały, co zrozumiałe, sporo większą objętość. Co ciekawe, w Internecie nie ma żadnych informacji o tym problemie, więc być może jest jakieś inne wyjście zapewniające odtwarzanie bit perfect, którego nie znalazłem.

Rysunek 18. Ekran odtwarzania komputera z systemem Windows

Ekran odtwarzania wyświetlany na komputerze jest wygodny i przejrzysty (rysunek 18). Z lewej strony jest umieszczona kontrolka czasu odtwarzania, czas całkowity oraz parametry pliku utworu (format pliku .wav, częstotliwość próbkowania 44,1 kHz, długość słowa danych pliku 16 bitów). Pośrodku jest umieszczona okładka albumu i nazwa odtwarzanego utworu (jeżeli jest zapiana w postaci pliku graficznego w katalogu utworu), a z prawej strony – nieaktywna kontrolka regulacji głośności (ta funkcja została wyłączona). Pasek na dole ekranu powiela informację o pliku (nazwa utworu i parametry próbkowania), pasek postępu odtwarzania i kontrolki PLAY, PAUSE, STOP następny/poprzedni utwór, odtwarzanie w pętli i odtwarzanie losowe.

Praca ze stroną WWW na komputerze jest dość komfortowa, ale komputer niezbyt się sprawdza w roli mobilnego pilota do sterowania. Lepszym w tej roli jest smartfon. W sklepie Google Play jest dostępna płatna aplikacja Volumio, ale jej nie używałem. Do sterowania pracą odtwarzacza zupełnie wystarczy przeglądarka Chrome, uruchomiona na smartfonie połączonym przez Wi-Fi z lokalna siecią LAN, do której też jest połączone Volumio. Jak wspominałem wcześniej, na smartfonie trzeba w pasku adresu wpisać adres IP, przydzielony Volumio przez router. Po połączeniu, dostępne są wszystkie funkcje ustawień, wyszukiwania i odtwarzania utworów. Co prawda, nie jest to takie komfortowe jak w przypadku komputera, ale smartfon doskonale spełnia rolę inteligentnego pilota zdalnego sterowania odtwarzaczem, połączonym do lokalnej sieci LAN przez Wi-Fi lub Ethernet, umieszczonego w dowolnym miejscu mieszkania. To bardzo wygodne rozwiązanie, bo odtwarzacz można schować na przykład w szafce i nie musi mieć atrakcyjnej obudowy. Na rysunku 19 pokazano typowy ekran sterowania odtwarzaniem utworu.

Rysunek 19. Ekran smartfonu ze sterowaniem odtwarzania utworu przez Volumio

Podsumowanie

Testowałem przetwornik w dwóch zestawach. Pierwszy z bardzo dobrym wzmacniaczem DIY i słuchawkami Bayerdynamic DT880PRO. Zestaw pozwala z jednej strony na usłyszenie wszelkich niedociągnięć przetwornika, a z drugiej, ze względu na jakość toru, pozwala na uzyskanie jak najlepszej jakości odtwarzanej muzyki. Drugi zestaw to wzmacniacz lampowy TU-8200 japońskiej firmy Elekit, i kolumny Tannoy o efektywności 92 dB. W bardzo subiektywnej ocenie jest to jeden z najlepiej brzmiących przetworników jakie słyszałem. Rewelacyjna separacja kanałów, połączona z detalicznością i świetną lokalizacją źródeł na scenie muzycznej. Do tego wiele powietrza i przestrzeni. Słuchanie muzyki przez dłuższy czas sprawia wiele przyjemności i nie jest absolutnie męczące. Nie bez znaczenia jest możliwość łatwego wyboru odtwarzanego materiału muzycznego, z większej lub mniejszej własnej biblioteki muzycznej, oferowanej przez oprogramowanie komputerka Raspberry Pi. Nie można tej wygody porównać do odtwarzania płyt w typowym odtwarzaczu CD.

Tomasz Jabłoński, EP

Artykuł ukazał się w
Elektronika Praktyczna
grudzień 2020
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik lipiec 2021

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio lipiec - sierpień 2021

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka Podzespoły Aplikacje lipiec 2021

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna lipiec 2021

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich sierpień 2021

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów