Automat mp3

Automat mp3

Pliki MP3 służą do zapisu muzyki i dźwięków. Projekt o skrótowej nazwie Transvox2 pozwala na odtwarzanie plików MP3 zgromadzonych na zewnętrznym nośniku, w sposób sterowany. Pliki zawierające muzykę, odgłosy czy komunikaty informacyjne lub reklamowe mogą być odtwarzane poprzez komendy przesłane portem USB skonfigurowanym jako wirtualny port szeregowy lub wyzwalane sygnałami na zwykłych wejściach sterujących.

Podstawowe parametry:
  • odtwarzane pliki dźwiękowe: mp3, wav,
  • nośnik odtwarzanych plików: pendrive USB,
  • wyjścia dźwięku: słuchawki stereo, głośnik 1 W mono,
  • sterowanie: interfejs szeregowy USB (szybkość transmisji 115200), interfejs równoległy (8 linii danych 3 linie funkcyjne),
  • zasilanie: z portu USB komputera lub z zewnętrznego zasilacza +5 V.

Na rysunku 1 zostały pokazane główne elementy Transvox2 i przepływy sygnałów pomiędzy nimi. Sygnał audio z dekodera MP3 jest podawany na gniazdo słuchawek i na wejście układu scalonego wzmacniacza, do którego podłączany jest głośnik. Procesor steruje pracą dekodera i przesyła w czasie odtwarzania dane z wybranego pliku. Pliki dźwiękowe do odtwarzania są zapisane w odrębnym katalogu na dołączanym zewnętrznym nośniku danych.

Rysunek 1. Schemat blokowy urządzenia Transvox2

Sterowanie automatem i wybór plików do odtwarzania odbywa się poprzez jeden z dwu interfejsów. Szeregowym interfejsem USB można przesłać z zewnętrznego komputera rozkazy sterujące w formacie tekstowym. Do ich wysyłania można wykorzystać dowolny program terminalowy pozwalający na wprowadzenie krótkiego tekstu będącego rozkazem i przesłanie go portem USB. Do wyboru odtwarzanego pliku można także użyć interfejsu równoległego. Wystarczy na liniach danych D0...D7 zakodować numer pliku do odtworzenia i wprowadzić go opadającym zboczem sygnału SET.

Budowa

Na rysunku 2 został pokazany kompletny schemat ideowy automatu Transvox2. Na schemacie znajdziemy pominięte na rysunku 1: interfejs U2 pozwalający podłączyć procesor do portu USB komputera i układ U1 zabezpieczający przed nadmiernym obciążeniem prądowym w czasie podłączania zewnętrznej pamięci USB do gniazda J1. Gniazdo J2 służy do komunikacji z komputerem oraz do doprowadzenia zasilania +5 V.

Rysunek 2. Schemat ideowy urządzenia Transvox2

Jako dekoder plików dźwiękowych pracuje dobrze znany układ VS1003-B oznaczony na schemacie jako U7. Ponieważ w tym projekcie działa wyłącznie jako dekoder, kilka wyprowadzeń używanych podczas kodowania zewnętrznego źródła dźwięku pozostało niepodłączonych. Do wyjść dekodera można bezpośrednio podłączyć słuchawki poprzez gniazdo J6. Dla dołączenia głośnika potrzebny jest układ U8, który wzmacnia zsumowany sygnał audio kanałów lewego i prawego. Wzmocnienie układu U8 można zwiększyć dziesięciokrotnie przez wlutowanie w miejsce kondensatora C41 (U8 piny 1, 8) pojemności 10 µF. Bez kondensatora wzmocnienie wynosi 20 (26 dB). Dekoder jest sterowany poprzez magistralę SPI przez procesor U3.

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

Schemat płytki PCB został pokazany na rysunku 3. Pomimo dosyć rozbudowanej konstrukcji, jej montaż jest typowy i nie wymaga szczegółowego omawiania. Zmontowana płytka została pokazana na fotografii 1.

Fotografia 1. Zmontowana płytka urządzenia Transvox2

Sterowanie dekoderem MP3

Sterowanie pracą dekodera VS1003 odbywa się za pośrednictwem magistrali SPI i jej wyprowadzeń SO (MISO), SI (MOSI) i SCLK. W wewnętrznej strukturze dekodera interfejs SPI zostaje rozdzielony na dwie magistrale: SCI (Serial Control Interfejs) i SDI (Serial Data Interface). Pierwsza służy do zapisu i odczytu z wewnętrznych rejestrów sterujących pracą układu. Poprzez zmianę zawartości rejestrów można np. regulować poziom sygnału audio podawanego na słuchawki i głośnik. Dane zapisywane i odczytywane z rejestrów mają długość 16 bitów. Druga magistrala SDI, służy do przesyłania danych dekodowanego pliku muzycznego. Dane przesyłane są w formacie 8-bitowym. O tym do której magistrali będą podłączane wyprowadzenia SPI decydują stany niskie dwóch sygnałów: xCS aktywuje magistralę SCI a xDCS aktywuje magistralę SDI.

Rozkazy sterujące
Z komputera, portem USB skonfigurowanym jako wirtualny port szeregowy mogą być przesyłane rozkazy sterujące. Składają się z tekstu rozpoczynanego znakiem @ i zakończonego znakiem powrotu CR. Jako potwierdzenie jest odsyłany odebrany rozkaz zakończony komunikatem OK. W przypadku wystąpienia błędu odsyłany zostaje komunikat ERROR.
Rozkaz LP – odczyt listy plików w kolejności ich fizycznego położenia w podkatalogu vox_pliki:
@LP;5;11\r – pierwsza cyfra oznacza numer pliku rozpoczynającego listę, druga ilość pozycji listy. Obie cyfry muszą mieć wartość większą od 0. Symbol \r oznacza znak CR. Przesłana do wyświetlenia lista podaje pozycję plików w kolejności ich położenia w strukturze podkatalogu. Skasowanie plików i dopisanie nowych zmienia kolejność listy.
Rozkaz PI – odtworzenie kolejnych plików o numerach odpowiadających pozycji na liście:
@PI;8;2;3\r – Odtworzenie kolejnych plików o numerach 8, 2, 3.
Rozkaz PN – odtworzenie pliku o podanej nazwie:
@PN;plik1.mp3\r – po zakończeniu odtwarzania pliku zostanie wysłane potwierdzenie OK lub, w przypadku błędu komunikat ERROR.
Rozkaz VC – regulacja głośności obydwu kanałów lewego i prawego:
@VC;250\r – parametr głośności może przyjąć wartość od 1 do 255. Maksymalna głośność na wyjściach audio obydwu kanałów jest ustawiana gdy parametr wynosi 255. Następnie ze skokiem 0,5 dB głośność jest zmniejszana przy podawaniu mniejszych wartości. Jeśli rozkaz zostanie wysłany bez parametru zostanie zwrócona wartość aktualnie ustawionej głośności.
Rozkaz VB – regulacja balansu pomiędzy kanałem lewym i prawym:
@VB;-4\r – balans jest realizowany przez wyciszanie jednego z kanałów ze skokiem 0,5 dB:
1… 254 wyciszanie kanału prawego,
-1 … -254 wyciszanie kanału lewego,
0 żaden kanał nie jest wyciszony, balans neutralny.
Jeśli rozkaz zostanie wysłany bez parametru, to zostanie zwrócona wartość aktualnie ustawionego balansu.
Rozkaz BR – natychmiastowe przerwanie odtwarzania pliku dźwiękowego: @BR\r
Rozkaz FJ – utworzenie pliku ustawień:
@FJ\r – utworzenie i zapis pliku w formacie JSON w katalogu vox_pliki/vox_param.txt. W pliku zapamiętywane są bieżące ustawienia głośności i balansu. Jeżeli plik istnieje, po resecie jego zawartość jest odczytywana i są odtwarzane ustawienia obydwu parametrów.

Na listingu 1 pokazana została procedura odczytu zawartości 16-bitowego rejestru sterującego, magistralą SCI. Stan wysoki sygnału DREQ informuje o gotowości układu VS1003B. Po ustawieniu stanu niskiego na wyprowadzeniu xCS, można przesłać magistralą SPI z kontrolera sterującego komendę odczytu (wartość 0x03) i bajt adresu odczytywanego rejestru.

Listing 1. Procedura odczytu zawartości 16-bitowego rejestru sterującego magistralą SCI

//odczyt z rejestru 16 bitowego
uint16_t Player1003::ReadSci(uint8_t addr) {
uint16_t res;
uint8_t bufor;

// czekaj na stan wysoki sygnału DREQ
while (HAL_GPIO_ReadPin(dreq_port, dreq_pin) ==GPIO_PIN_RESET);
HAL_GPIO_WritePin(cs_port, cs_pin, GPIO_PIN_RESET); //xCS stan niski
bufor =0x03; //komenda odczytu
SPI_WysylanieDoVS1003B(&bufor, 1); //wysłanie kodu komendy do VS1003B
bufor =addr; //adres rejestru do odczytu
SPI_WysylanieDoVS1003B(&bufor, 1); //wysłanie adresu rejestru SCI
SPI_OdbieranieZVS1003B(&bufor, 1); //odbiór H bajtu
res =(uint16_t)bufor<<8;
SPI_OdbieranieZVS1003B(&bufor, 1); //odbiór L bajtu
res =res + bufor;
HAL_GPIO_WritePin(cs_port, cs_pin, GPIO_PIN_SET); //xCS stan wysoki
return res; //procedura zwraca 16 bitową zwartość rejestru
}

Następnie czytane są dwa bajty ze starszymi i młodszymi bitami rejestru. Na koniec magistrala SCI jest zamykana ustawieniem wysokiego stanu na wyprowadzeniu xCS.

Na listingu 2 został pokazana procedura zapisu do 16-bitowego rejestru magistralą SCI. Po otwarciu magistrali, przesłaniu komendy zapisu (wartość 0x02) i adresu rejestru, wysyłane są bajty ze starszymi i młodszymi bitami danej. Na koniec magistrala powinna zostać zamknięta.

Listing 2. Procedura zapisu do 16-bitowego rejestru sterującego magistralą SCI

//zapis do rejestru 16 bitowego
void Player1003::WriteSci(uint8_t addr, uint16_t data) {
uint8_t bufor;

// czekaj na stan wysoki sygnału DREQ
while (HAL_GPIO_ReadPin(dreq_port, dreq_pin) ==GPIO_PIN_RESET);
HAL_GPIO_WritePin(cs_port, cs_pin, GPIO_PIN_RESET); //xCS stan niski
bufor =0x02; //komenda zapisu
SPI_WysylanieDoVS1003B(&bufor, 1); //wysłanie kodu komendy do VS1003B
bufor =addr; //adres rejestru do zapisu
SPI_WysylanieDoVS1003B(&bufor, 1); //wysłanie adresu rejestru SCI
bufor =data >>8;
SPI_WysylanieDoVS1003B(&bufor, 1); //wysłanie 8 starszych bitów
bufor =0xff & data;
SPI_WysylanieDoVS1003B(&bufor, 1); //wysłanie 8 młodszych bitów
HAL_GPIO_WritePin(cs_port, cs_pin, GPIO_PIN_SET); //xCS stan wysoki
}

Z kolei na listingu 3 została pokazana procedura przesłania poprzez wewnętrzną magistralę SDI fragmentu odtwarzanego pliku MP3 o rozmiarze do 32 bajtów. Tak jak poprzednio należy poczekać na stan wysoki sygnału DREQ i dopiero wtedy można wysłać stan niski na wyprowadzenie xDCS otwierające dostęp do wewnętrznej magistrali SDI. Wtedy rozpoczyna się przesłanie bajtów danych, które są umieszczane w wewnętrznym buforze VS1003B. Po przesłaniu danych należy podać stan wysoki na xDCS zamykając magistralę SDI.

Listing 3. Procedura przesłania poprzez wewnętrzną magistralę SDI fragmentu odtwarzanego pliku MP3 o rozmiarze do 32 bajtów

//przesłanie fragmentu danych pliku MP3
int Player1003::WriteSdi(const uint8_t *data, uint8_t bytes) {
uint8_t i, bufor;

if (bytes >32) return -1; //błąd, za długa transmisja
// czekaj na stan wysoki sygnału DREQ
while (HAL_GPIO_ReadPin(dreq_port, dreq_pin) ==GPIO_PIN_RESET);
HAL_GPIO_WritePin(dcs_port, dcs_pin, GPIO_PIN_RESET); //xDCS stan niski
for (i=0; i<bytes; i++)
{
bufor =*data;
data++;
SPI_WysylanieDoVS1003B(&bufor,1);
}
HAL_GPIO_WritePin(dcs_port, dcs_pin, GPIO_PIN_SET); //xDCS stan wysoki
return 0;
}

Działanie automatu Transvox2

Po podłączeniu zasilania dwukrotnie błyska dioda LED D1 a na wyjście audio jest wysyłany powitalny komunikat „hello”. Jeżeli do gniazda USB płytki J2 podłączony jest komputer z uruchomionym programem terminalowym, odebrany zostanie komunikat z nazwą urządzenia i wersją oprogramowania. Port USB komputera powinien być skonfigurowany jako wirtualny port szeregowy o szybkości transmisji 115200 bez parzystości. Gdy do gniazda J1 dołączony zostanie Pendrive to odpowiedni komunikat powiadomi o jego wykryciu.

Sterowanie za pośrednictwem interfejsu równoległego
Linie interfejsu równoległego są wyprowadzone na złącze J4. Interfejs składa się z linii danych D0...D7 i 3 linii funkcyjnych:
PACT – podanie na linię poziomu niskiego uaktywnia interfejs równoległy;
BUSY – sygnalizacja zajętości. Poziom niski oznacza, że aktualnie jest już odtwarzany plik dźwiękowy i odtwarzanie nowego nie jest możliwe;
SET – zbocze opadające wprowadza numer pliku i inicjuje jego odtwarzanie;
D0...D7 – kodowany binarnie numer pliku do odtworzenia. Linie pracują w logice ujemnej np. kodowanie pliku numer 1 do odtworzenia oznacza ustawienie na liniach sekwencji 11111110. Linie są pociągane do poziomu wysokiego więc sterowanie sprowadza się do zwierania ich do masy. Osiem linii D0...D7 pozwala ustawić numer pliku z zakresu od 1 do 255. Numer 0 pełni funkcję rozkazu @BR\r. Można go wprowadzić nawet gdy linia BUSY sygnalizuje zajętość i ma poziom niski.

Transvox2 będzie poszukiwał w głównym katalogu, podkatalogu o nazwie vox_pliki z plikami dźwiękowymi do odtworzenia. Jeżeli go nie znajdzie zostanie on utworzony automatycznie. Od tego momentu układ jest gotów do pracy i oczekuje na polecenia użytkownika.

Pliki dźwiękowe do odtwarzania w formacie mp3 lub wav trzeba samodzielnie przekopiować do podkatalogu vox_pliki. Pliki mogą mieć długie nazwy ale bez polskich znaków.

Odtwarzanie komunikatów

Transvox2 odtwarza z jakością typową dla formatu MP3 pliki z muzyką, efektami dźwiękowymi i mową. Sterowany przez dodatkowy układ procesorowy może w reakcji na zdarzenie odtwarzać odpowiedni plik z przygotowanym komunikatem, informacją lub ostrzeżeniem. Korzystając z rozkazu @PI można odtwarzać grupowo kilka plików sklejając je ze sobą bez zauważalnych przerw. Wykorzystując około 50 plików MP3 można z dobrą jakością obsłużyć wypowiadanie dowolnej liczby z zakresu od 0 do 999999 uwzględniając niełatwą polską odmianę liczebników.

W przypadku komunikatów do odtwarzania, najprościej je nagrać korzystając z oprogramowania typu text to speech. W internecie można znaleźć witryny które przekształcą wpisany tekst na głosowe nagranie w formacie mp3. Po zapisaniu plików na pendrivie w katalogu o nazwie vox_pliki będą mogły być odtwarzane przez automat Transvox2.

Ryszard Szymaniak
biuro@ars.info.pl

Wykaz elementów:
Rezystory: (SMD0805)
  • R1, R24, R25: 1 kΩ
  • R14: 1 MΩ
  • R10…R13, R18: 100 kΩ
  • R20, R22: 470 Ω
  • R23, R26…R28: 10 Ω
  • R2…R5, R19, R21: 20 Ω
  • R6: 180 Ω
  • R7, R8: 330 Ω
  • R9, R15…R17: 10 kΩ
Kondensatory: (SMD0805)
  • C10: 4,7 µF
  • C1, C4, C6, C7, C11…C14, C19, C23, C26, C29…C31, C33, C38, C40, C42: 100 nF
  • C15…C17, C24, C25, C32: 1 µF
  • C3, C18, C20: 10 µF/16 V tantalowy SMD A
  • C21, C22: 1 nF
  • C27, C28: 33 pF
  • C34, C36: 10 nF
  • C35, C37: 3,3 nF
  • C39, C44: 47 nF
  • C41: 0...10 µF dobierany
  • C43: 220 µF/6,3 V tantalowy SMD typ C
  • C2, C5: 47 pF
  • C8, C9: 15 pF
Półprzewodniki:
  • D1…D3: LED SMD0805
  • U1: MIC2544-1YM (SO8)
  • U2: FT230XS (SSOP16)
  • U3: STM32F401RBT (LQFP64)
  • U4: LM1117-3.3 (SOT223)
  • U5: LP3985-2.8 (SOT23-5)
  • U6: TC1015-2.5 (SOT23-5)
  • U7: VS1003-B (LQFP48)
  • U8: LM386 (SO8)
Inne:
  • J1: gniazdo USB_A
  • J2: gniazdo USB_B_Mini
  • J3: 1×4 goldpiny proste
  • J4: 2×11 goldpiny proste
  • J5: złącze śrubowe 2 pola, raster 3,5
  • J6: gniazdo Jack 3,5 mm, stereo, poziome, SMD (1503 13 VP3 LUMBERG)
  • Y1: 8 MHz kwarc SMD
  • Y1: 12,288 MHz kwarc SMD
Artykuł ukazał się w
Elektronika Praktyczna
lipiec 2021
DO POBRANIA
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik maj 2022

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio maj - czerwiec 2022

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka Podzespoły Aplikacje kwiecień 2022

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna maj 2022

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich maj 2022

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów