Karta muzyczna dla Raspberry Pi

Karta muzyczna dla Raspberry Pi
Pobierz PDF Download icon

Odtwarzanie dźwięku przez Raspberry Pi jest tematem rozpoznanym i nie stanowi większego problemu. Możemy użyć wbudowane wyjście PWM lub jedną z dostępnych nakładek HAT z przetwornikiem DAC. Coraz częściej konieczne jest też nagrywanie dźwięku, przykładowo dla uzupełnienia obrazu z kamery w systemach wizyjnych lub rozpoznania i analizy mowy w systemach asystentów głosowych opartych o Raspberry Pi. W tym przypadku konieczna jest karta w wejściami mikrofonowymi, a najlepiej z pełnym kompletem złącz wejść i wyjść.

Prezentowana karta wzorowana jest na HAT WM8960 Waveshare i jest z nim zgodna programowo, ale posiada kilka rozszerzeń zwiększających elastyczność zastosowań i w pełni wykorzystuje możliwości sprzętowe kodeka.

Budowa i działanie

Strukturę wewnętrzną kodeka WM8960 pokazano na rysunku 1. Układ posiada w torze wejściowym trzy wejścia analogowe LINPUT1...3 z wbudowanymi regulowanymi wzmacniaczami do współpracy ze źródłami o poziomie mikrofonowym i liniowym, wbudowany automatyczny regulator wzmocnienia ALC/limiter, bramkę szumów sumator sygnałów wejściowych, a w torze wyjściowym mikser z możliwością odsłuchu wejść, wzmacniacz słuchawkowy (HP) z wyjściem linowym i dwukanałowy wzmacniacz mocy 2×1 W współpracujący bezpośrednio z głośnikami (SPK).

Rysunek 1. Schemat wewnętrzny WM8960 (za notą producenta)

Konfiguracja układu odbywa się przez interfejs I2C, do przesyłu cyfrowego sygnału audio używany jest interfejs I2S. Układ w aplikacji wymaga niewielu elementów zewnętrznych.

Schemat ideowy urządzenia pokazano na rysunku 2. Moduł zasilany jest z dwóch źródeł, wzmacniacz mocy układu U2 WM8960 korzysta bezpośrednio z +5 V dostępnego na złączu GPIO a, część sygnałowa karty zasilana jest +3,3 V dostarczanego przez niskoszumny stabilizator LDO U1 typu ADP122. Wszystkie potencjały zasilające U2 odsprzęgnięte są zespołem dławika ferrytowego i kondensatorów ceramicznych. Za taktowanie U1 (MCLK) odpowiada generator OSC1 o częstotliwości 24 MHz. Cyfrowy interfejs audio I2S (SDI, SDO, LRCK, BLCK) doprowadzony jest do złącza GPIO poprzez rezystory szeregowe RP1. Sygnały wyjściowe ze wzmacniacza mocy po filtracji dolnoprzepustowej FB12...15, C35...37 doprowadzone są do złącz JST 2,00 mm SPKL, SPKR. Sygnał ze wzmacniacza słuchawkowego po separacji składowej stałej CE4, CE5 doprowadzony jest do gniazda HP typu Jack 3,5 mm. Wyjście słuchawkowe pełni też rolę wyjścia liniowego audio.

Rysunek 2. Schemat elektryczny modułu

Wszystkie sygnały wejściowe przed doprowadzeniem do WM8960 podlegają filtracji RF w filtrach dolnoprzepustowych PI, składających się z kondensatorów i dławika ferrytowego (np. C8, 9, FB4). Tor mikrofonowy podłączony jest do wejścia LIN/RIN U2.

Płytka posiada wbudowany mikrofon stereofoniczny, w postaci dwóch typowych wkładek mikrofonowych MICIL/MICIR typu LD-MC-0905P.

Do podłączenia zewnętrznych mikrofonów pojemnościowych służą gniazda MICL/R. Mikrofon zewnętrzny musi posiadać wtyk Jack 3,5 mm TRS, z rozdzielonym sygnałem audio i zasilaniem (sygnał audio styk L (Tip), zasilanie styk R (Ring), masa GND (Sleeve), tak połączona jest większość monofonicznych mikrofonów dla PC. Jeżeli chcemy korzystać tylko z zewnętrznej wkładki mikrofonowej, należy zewrzeć styki T/R oraz doprowadzić masę ze styku S. Zasilanie mikrofonów dostarczane jest ze stabilizatora wbudowanego w WM8960, poprzez wyprowadzenie MICBIAS. Podczas korzystania z mikrofonu zewnętrznego, zasilanie i sygnał audio odłączony jest od mikrofonów wbudowanych. Sygnał liniowy można podłączyć do gniazd LINE typu Jack 3,5 mm stereo lub AUX typu JST PH 2,00 mm.

Układ WM8960 konfigurowany jest poprzez interfejs I2C, rezystory R6, R7 podciągają magistralę. Na płytce jest pozostawione miejsce na opcjonalna pamięć EEPROM U6, dla spełnienia wymogów HAT, w modelu nie jest ona wlutowana.

Montaż i uruchomienie

Karta zmontowana jest na niewielkiej dwustronnej płytce drukowanej. Sposób montażu jest klasyczny i nie wymaga opisu, rozmieszczenie elementów pokazano na rysunku 3. Zmontowaną płytkę pokazuje fotografia tytułowa. Prawidłowo zmontowany DAC nie wymaga uruchamiania, konieczna jest konfiguracja systemu operacyjnego.

Rysunek 3. Schemat płytki PCB wraz z rozmieszczeniem elementów

Przed instalacją warto zaktualizować system i po aktualizacji sprawdzić obecność układu WM8960, na magistrali I2C pod adresem 0x1A poleceniem:

i2cdetect -y 1

Jeżeli układ został wykryty poprawnie, należy zainstalować oprogramowanie do jego obsługi:

git clone https://github.com/waveshare/WM8960-Audio-HAT
cd WM8960-Audio-HAT
sudo ./install.sh
sudo reboot

Po instalacji karta audio powinna pojawić się na liście dostępnych urządzeń odtwarzających, co można sprawdzić poleceniem:

aplay -l

Karta w systemie testowym zgłasza się jako urządzenie card1:

pi@raspberrypi:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
Subdevices: 7/7
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 IEC958/HDMI [bcm2835 IEC958/HDMI]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: ALSA [bcm2835 ALSA], device 2: bcm2835 IEC958/HDMI1 [bcm2835 IEC958/HDMI1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: wm8960soundcard [wm8960-soundcard], device 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0

Po sprawdzeniu instalacji i detekcji karty w systemie należy sprawdzić poprawność nagrywania dźwięku:

pi@raspberrypi:~ $ sudo arecord -f cd -Dhw:1 | aplay -Dhw:1
Recording WAVE ‘stdin’ : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Playing WAVE ‘stdin’ : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Aborted by signal Interrupt...

i odtwarzania:

sudo aplay -D hw:1,0 test.wav

Ze względu na kilka wejść i wyjść oraz sporą ilość ustawień WM8960 konieczne jest posiłkowanie się mikserem audio. W tym celu uruchamiamy mikser ALSA:

sudo alsamixer

Rysunek 4. Tekstowa nakładka miksera ALSA

Tekstowa nakładka miksera wygląda jak na rysunku 4, w pierwszej kolejności wybieramy klawiszem F6 kartę z WM8960 (mogą być widoczne też źródła dźwięku z SoC BCM), klawiszami strzałek lewo/prawo przemieszczamy się po parametrach, klawiszami góra/dół zmieniamy wybraną wartość, klawiszem m możemy wyłączyć parametr np. wyciszyć wyjście. Opanowanie ustawień wymaga spojrzenia do dokumentacji kodeka i sprawdzenia przepływu sygnału i wpływu zmian ustawień na zapisywany i odtwarzany dźwięk. Szczególną uwagę trzeba poświęcić konfiguracji w torze mikrofonowym przy użyciu ALC/limitera/bramki szumów. Konfigurację można zapisać i odtworzyć z pliku korzystając z polecenia:

sudo alsactl store
sudo alsactl restore

Zdecydowanie wygodniejsza jest obsługa miksera w trybie graficznym. W tym celu uruchamiamy konfigurację audio z menu Preferences\Audio Device Settings. Pierwszą czynnością jest wybór karty wm8960-souncard (Alsa mixer) (rysunek 5).

Rysunek 5. Wybór karty w ALSA

Następnie, warto dostosować wyświetlane kontrolki poprzez wybór Select Controls, co znacząco ułatwia sprawne poruszanie się po ustawieniach miksera (rysunek 6). Klawiszem Make default można ustawić domyślną kartę dźwiękową.

Rysunek 6. Dostosowanie wyświetlanych kontrolek

Do odtwarzania plików w konsoli można używać aplay (wav) lub mpg123 (mp3), a w trybie graficznym VLC media player. Do nagrywania i obróbki dźwięku polecam program Audacity, po wcześniejszej konfiguracji aktywnych wejść i wyjść.

Adam Tatuś, EP

Wykaz elementów:
Rezystory:
  • R1, R4, R5: 22 Ω 1% SMD0603
  • R2, R3: 2,2 kΩ 1% SMD0603
  • R6, R7: 4,7 kΩ 1% SMD0603
  • R8…R10: 4,7 kΩ 1% SMD0603
  • RP1: 22 Ω 1%
Kondensatory:
  • C1, C35…C38: 1 nF SMD0603
  • C2, C24, C25, C28, C31…C33, C41: 100 nF SMD0603
  • C3, C4, C23, C26, C27, C29, C30, C34: 10 mF SMD0603
  • C5, C6, C8, C9, C11, C12, C14, C15, C17, C18, C20, C21: 100 pF SMD0603
  • C7, C10, C13, C16, C19, C22: 4,7 mF SMD0603
  • C39: 22 pF SMD0603
  • C40: 220 pF SMD0603
  • CE1: 22 μF/10 V tantalowy SMD A
  • CE2…CE5: 47 μF/10 V SMD
Półprzewodniki:
  • U1: ADP122AUJZ-3.3 SOT23-5
  • U2: WM8960CGEFL QFN32
  • U6: AT24LC32 SO8
Inne:
  • FB1…FB10: ferryt BLM18AG102 SMD0603
  • FB11…FB17: ferryt BLM18AG101 SMD0603
  • OSC1: generator SMD 24 MHz 3,2×2,5 mm
  • MICIL, MICIR: wkładka pojemnościowa LD-MC-0905P
  • GPIO: IDC40
  • HP, LINE, MICL, MICR: gniazdo Mini Jack 3,5 mm z wyłącznikami
  • AUX: Złacze JST 3 pin, 2 mm
  • SPKL, SPKR: Złacze JST 2 pin, 2 mm
  • WP: Listwa SIL2 2 mm + zwora (opcja)
Artykuł ukazał się w
Elektronika Praktyczna
marzec 2020
DO POBRANIA
Pobierz PDF Download icon

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2021

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec 2021

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka Podzespoły Aplikacje marzec 2021

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2021

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich kwiecień 2021

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów