- odtwarzanie pojedynczego pliku WAV zapisanego na karcie microSD sformatowanej w systemie FAT32,
- rozpoczęcie odtwarzania po podaniu na zacisk wejściowy impulsu napięcia 3…30 V,
- wyjście monofoniczne o poziomie sygnału regulowanym potencjometrem,
- obsługa plików 8- i 16-bitowych, mono- i stereofonicznych, próbkowanych z częstotliwością 8…48 kHz,
- wbudowany prosty przetwornik cyfrowo-analogowy typu PWM,
- niski pobór prądu w stanie spoczynku: do 230 μA,
- pobór prądu podczas odtwarzania: około 30 mA,
- zasilanie napięciem stałym 4,5…18 V (lub 2,7…3,6 V z pominięciem wbudowanego stabilizatora).
Drzwi, które samoczynnie witają klientów, witryna z czujnikiem ruchu, która fotokomórką wykrywa obecność zainteresowanego człowieka lub prosta instrukcja głosowa, uruchamiana wciśnięciem przycisku – te i inne aplikacje znane z codziennego użytku, które zostały zautomatyzowane elektroniką, wymagają odtwarzania komunikatów głosowych. W latach dziewięćdziesiątych służyły do tego układy z serii ISD, które odeszły już w zapomnienie. To nawet lepiej, bo oferowana przez nie jakość była… taka, jaką udało się wtedy uzyskać. Dzisiaj mamy do dyspozycji znacznie pojemniejsze i tańsze nośniki danych, co umożliwia odtwarzanie dźwięków o zdecydowanie lepszej jakości.
Dzięki temu, że nośnikiem pliku dźwiękowego jest zwykła karta microSD, którą dzisiaj można kupić dosłownie za kilkanaście złotych, można ów dźwięk wygodnie edytować na komputerze, tablecie lub smartfonie, po czym wgrać na kartę jak każdy inny, zwykły plik. To wygodne rozwiązanie, ponieważ pliki WAV są obsługiwane przez wszystkie systemy operacyjne, również te mobilne. Nie jest potrzebna jakakolwiek konwersja do formatu binarnego czy innego, odczytywanego przez bardzo proste systemy mikroprocesorowe.
Zadanie tego układu jest skrajnie proste: po podaniu napięcia na wejście rozpoczyna się odtwarzanie zapisanego pliku. Jeżeli wejście jest aktywowane stale, odtwarzanie przebiega w pętli tak długo, jak długo na wejściu jest obecne napięcie. Po zakończeniu odtwarzania układ wraca do stanu spoczynku. Dlatego można go zaadaptować do bardzo wielu zastosowań, ponieważ nie wymaga od użytkownika jakiegokolwiek dodatkowego działania.
Budowa
Schemat ideowy omawianego układu znajduje się na rysunku 1. Głównym podzespołem zawiadującym jego pracą jest niewielki mikrokontroler typu ATtiny85 z 8-bitowym rdzeniem AVR, taktowanym sygnałem o częstotliwości 16 MHz, dla którego wzorcem jest wewnętrzny generator RC o częstotliwości oscylacji 8 MHz. Wbudowany układ PLL służy do podwojenia częstotliwości dla rdzenia oraz do uzyskania sygnału o częstotliwości aż 64 MHz na potrzeby generowania sygnału PWM. Ten zaś służy do realizacji przetwarzania cyfrowo-analogowego.
Skąd decyzja o wyborze właśnie takiego mikrokontrolera? Po pierwsze jego pamięć Flash pomieści przeszło 6 kB programu. Po drugie jest wyposażony w 512 bajtów pamięci RAM, co jest konieczne przy odczytywaniu bloków z karty SD, które to przychodzą w pakietach po 256 bajtów – wartość ta jest charakterystyczna dla użytej darmowej biblioteki Petit FatFs. Po trzecie układ ma dosyć unikatową – jak na ośmiobitowe, małe mikrokontrolery – możliwość taktowania licznika sygnałem o częstotliwości aż 64 MHz, przez co można generować z jego użyciem sygnał PWM o częstotliwości 250 kHz i rozdzielczości 8 bitów (64 MHz/256=250 kHz), co jest w zupełności wystarczające do odtworzenia sygnału spróbkowanego z częstotliwością 48 kHz lub niższą. Ze względu na niewielką liczbę konfigurowalnych wyprowadzeń (ATtiny85 ma ich zaledwie pięć) nie jest możliwe podanie zewnętrznego sygnału zegarowego stabilizowanego rezonatorem kwarcowym, lecz w tak prostym zastosowaniu wbudowany generator RC jest całkowicie wystarczający.
Mikrokontroler nawiązuje połączenie z kartą microSD poprzez standardowy interfejs SPI, co jest bardzo wygodne z uwagi na jego niewielką liczbę wyprowadzeń. Użyte w tym projekcie złącze karty microSD ma metalową obudowę, która została solidnie połączona z masą układu, a to ze względu na fakt, że w testach pierwszego prototypu okazało się, że regularne odczytywanie danych z karty SD powodowało powstawanie przydźwięku w wytwarzanym sygnale audio. Dopiero zaekranowanie samej karty oraz ścieżek łączących ją z mikrokontrolerem, co zostało zrealizowane poprzez użycie płytki dwustronnej z wylewką masy na jednej stronie, zniwelowało ten przykry odsłuchowo efekt praktycznie do zera.
Z uwagi na wymaganą w tym projekcie oszczędność linii mikrokontrolera, wejście wyzwalające odtwarzanie zostało podłączone do jednej z linii interfejsu SPI, która podczas spoczynku ma stan wysoki, wymuszony przez wbudowany w mikrokontroler rezystor podciągający do dodatniej linii zasilania. Tranzystor T1, który wchodzi w nasycenie po podaniu zewnętrznego impulsu wyzwalającego, nadaje tej linii stan niski za pośrednictwem rezystora R2. W ten sposób, po rozpoczęciu odtwarzania, dalsza obecność impulsu wejściowego nie zaburza współpracy na linii karta microSD – mikrokontroler, ponieważ rezystor ten obciąża ją jedynie prądem o wartości około 1 mA, co jest całkowicie akceptowalne. Po zakończeniu odtwarzania wyprowadzenie znów przyjmuje stan wysoki.
Napięcie zasilające układ wymusza tutaj karta microSD, ponieważ toleruje ona wartości z przedziału 2,7…3,6 V. Na szczęście takie same wartości akceptuje również mikrokontroler, więc nie ma tutaj konfliktu interesów i oba te podzespoły mogą się komunikować bez potrzeby translacji poziomów napięcia. W celu uzyskania stabilizowanego napięcia o wartości 3,3 V, na płytce został dodany stabilizator LDO typu LP2950-33 (US2). Pobiera on jedynie 50 μA prądu spoczynkowego, co jest bardzo dobrym wynikiem, choć przy zasilaniu bateryjnym każdy mikroamper staje się cenny. Stabilizator może okazać się zbyteczny, kiedy mamy do dyspozycji takie właśnie napięcie – montaż US2 można pominąć, zwierając przy tym kroplą spoiwa lutowniczego pola SJ1.
Na sam koniec została rzecz najciekawsza, przynajmniej z mojego punktu widzenia, czyli dolnoprzepustowy filtr odtwarzający sygnał akustyczny z generowanego przez mikrokontroler przebiegu PWM. Zadowalająca charakterystyka, godząca kompromis między zapewnieniem szerokiego pasma przenoszenia a minimalizacją poziomu szumu, generowanego przez prostokątny sygnał nośny o częstotliwości 250 kHz, została uzyskana w toku obliczeń i eksperymentów. Przyjęto, że wariantem optymalnym będzie dwuczłonowy filtr RC (R5-C6 i R6-C7), obciążony potencjometrem regulującym głośność, za którym będzie się znajdowała jeszcze jedna pojemność, zwierająca składowe o najwyższych częstotliwościach. Z uwagi na miniaturyzację oraz założenie, że ma to być realizacja budżetowa, zrezygnowano z filtrów aktywnych, zawierających wzmacniacze operacyjne. Warto dodać, że tak utworzony sygnał analogowy będzie miał niezerową składową stałą – jego wartość chwilowa zawsze będzie nie mniejsza niż 0 V, co bywa przydatne w sterowaniu niektórych wzmacniaczy. Założyłem, że w razie potrzeby użytkownik może wstawić kondensator w torze sygnału i gotowe.
Schemat symulacyjny owego filtru został utworzony w programie LTspice – rysunek 2 – i uwzględnia podstawowe parametry pasożytnicze wyjścia mikrokontrolera.
Potencjometr P1 ustalający głośność został tutaj ustawiony w połowie. Wykreślony przebieg charakterystyki znajduje się na rysunku 3, na którym dodatkowo zaznaczono częstotliwość sygnału PWM (250 kHz) i odpowiadające jej tłumienie. Z wykresu można odczytać, że tłumienie w zakresie częstotliwości akustycznych jest niemal stałe i zaczyna wzrastać dopiero powyżej ok. 8 kHz. Tłumienie 6 dB, odpowiadające dwukrotnemu spadkowi amplitudy, zaczyna się przy częstotliwości 20 kHz, co oznacza, że całe pasmo akustyczne będzie odwzorowane możliwie wiernie. Trzeba przy tym cały czas mieć na uwadze, że zastosowano tutaj bardzo prosty, ośmiobitowy przetwornik PWM równie prostym filtrem, a całość ma służyć do odtwarzania komunikatów informacyjnych (tudzież powitalnych melodyjek), nie zaś do audiofilskiego odsłuchu. Częstotliwość nośna jest tłumiona o 40 dB, co odpowiada spadkowi stukrotnemu – ten parametr również uważam za bardzo dobry jak na tak prosty układ.
Montaż i uruchomienie
Układ został zmontowany na dwustronnej płytce drukowanej o wymiarach 37 mm × 48 mm. Jej wzór ścieżek oraz schemat montażowy przedstawia rysunek 4. Wszystkie otwory montażowe zostały umieszczone w odległości 3 mm od krawędzi płytki i mają średnicę 3,2 mm.
Montaż proponuję rozpocząć od przylutowania złącza J1, które jest jedynym podzespołem montowanym nie dość, że powierzchniowo (SMD), to na dodatek po przeciwnej stronie niż pozostałe elementy. Ten proces ułatwi fakt, że złącze wyposażono w dwa kołki centrujące, które wchodzą w dedykowane im otwory na płytce, przez co można łatwo ustalić jego położenie przed przylutowaniem. Na początek proponuję przylutować dwie metalowe „łapki” po bokach złącza, regulując tym samym położenie wyprowadzeń (umieszczonych na jego tylnej krawędzi) względem pól lutowniczych na płytce drukowanej. Kiedy mamy pewność, że złącze tkwi już nieruchomo, a jego wyprowadzenia są na środku dedykowanych pól lutowniczych, można je przylutować, do czego wystarczy zwykłe spoiwo lutownicze i kalafonia. Całość powinna wyglądać jak na fotografii 1.
Montaż przewlekany proponuję rozpocząć od elementów o najmniejszej wysokości obudowy, czyli rezystorów. Pod układ scalony US1 proponuję zastosować podstawkę, aby ułatwić jego programowanie i wymianę w razie uszkodzenia. Zmontowany układ można zobaczyć na fotografii 2.
Na etapie uruchamiania konieczne jest zaprogramowanie pamięci Flash mikrokontrolera dostarczonym wsadem oraz zmiana wartości jego bitów zabezpieczających. Oto ich nowe ustawienia:
Low Fuse=0xF1
High Fuse=0xDE
Szczegóły są widoczne na rysunku 5, który zawiera widok okna konfiguracji tychże bitów z programu BitBurner. W ten sposób zostanie uruchomiony wbudowany generator RC z układem PLL powielającym jego częstotliwość oraz Brown-Out Detector, który wprowadzi mikrokontroler w stan zerowania, jeżeli jego napięcie zasilające spadnie poniżej 1,8 V. To znacznie zmniejsza ryzyko zawieszenia się mikrokontrolera podczas uruchamiania.
Poprawnie zaprogramowany układ jest gotowy do działania po włożeniu karty microSD do złącza J1 oraz po podłączeniu zasilania do zacisków złącza J2 (VCC i GND). Powinno to być napięcie stałe, dobrze filtrowane, najlepiej stabilizowane, z przedziału 4,5…18 V. Pobór prądu wynosi 230 μA w stanie spoczynku i około 30 mA w trakcie odtwarzania. Można zredukować pobór prądu w stanie spoczynku o 50 μA, czyli do około 180 μA, poprzez wylutowanie stabilizatora US2 i zwarcie jego wejścia z wyjściem poprzez nałożenie kropli spoiwa lutowniczego na pola lutownicze SJ1 – trzeba wtedy pamiętać o konieczności zasilania układu napięciem z przedziału 2,7…3,6 V. Dlatego jego źródłem nie może być akumulator litowo-jonowy, którego napięcie po naładowaniu przekracza 4 V.
Wejście wyzwalające (IN) akceptuje napięcie z przedziału 3…30 V. Prąd wejściowy wynosi od około 0,25 mA przy 3 V do około 3 mA przy 30 V. Większe wartości tego napięcia nie są wskazane z uwagi na wytrzymałość termiczną rezystora R4.
Eksploatacja
Na karcie microSD, sformatowanej w systemie FAT32, powinien się znajdować jeden plik o dowolnej nazwie i z rozszerzeniem *.wav. Jeżeli będzie ich więcej, odczytywany będzie tylko pierwszy, a reszta zostanie przez układ pominięta. Plik powinien być umieszczony w katalogu głównym karty, nie zaś w folderze. Parametry tego pliku:
- kodowanie PCM lub LPCM (Linear-PCM),
- próbkowanie z przedziału 8…48 kHz,
- rozdzielczość 8 bitów lub 16 bitów (ale nie 24 bity),
- zapis monofoniczny (1 kanał) lub stereofoniczny (2 kanały),
- próbki 16-bitowe zapisane ze znakiem (signed) lub 8-bitowe bez znaku (unsigned).
Taki plik może mieć dowolny czas trwania. Jego odtwarzanie rozpocznie się po podaniu na wejście IN napięcia wyzwalającego. W czasie odtwarzania nie jest możliwe zatrzymanie ani przewinięcie odtwarzania, jedynie wyłączenie zasilania zatrzyma działanie odtwarzacza.
Po odtworzeniu pliku układ wraca do stanu spoczynku. Jeżeli napięcie wyzwalające będzie obecne w chwili zakończenia odtwarzania, układ rozpocznie działanie na nowo, od razu po zakończeniu poprzedniego.
Michał Kurzela, EP
- R1, R3, R4: 10 kΩ
- R2, R5, R6: 3,3 kΩ
- P1: potencjometr montażowy 10 kΩ (jednoobrotowy, leżący)
- C1, C3, C4: 100 nF (raster 5 mm, MKT)
- C2, C5: 100 μF/25 V (raster 2,5 mm)
- C6: 1 nF (raster 5 mm, monolityczny)
- C7: 3,3 nF (raster 5 mm, MKT)
- C8: 330 pF (raster 5 mm, monolityczny)
- Kondensator elektrolityczny 100 μF/16 V (opis w tekście)
- T1: BC546 (TO92)
- US1: ATtiny85-20PU (DIP8)
- US2: LP2950-33 (TO92, opis w tekście)
- J1: 112I-TA01
- J2: ARK3/500
- J3: ARK2/500
- Jedna podstawka DIP8