Autor: Danielus
Redakcja: Dondu
Zobacz inne artykułu z cyklu: Arduiono ... czyli prościej się nie da :-)
W nieniejszym artykule przedstawię prosty mikser audio do automatycznego przełączania sygnałów audio.
Układ został stworzony z myślą o rozwiązaniu uciążliwego problemu przełączania kabli pomiędzy urządzeniami multimedialnymi, np. MP3, tabletem czy telefonem a wzmacniaczem i głośnikami.
Pozwala na automatyczny wybór jednego z 4 wejść w zależności od występowania sygnałów wejściowych.
Regulacja głośności powinna odbywać się za pomocą wzmacniacza. Poziom sygnału z urządzeń multimedialnych powinien być ustawiony na średnią wartość.
Opis
Urządzenie sprawdza w pętli na którym wejściu występuje sygnał audio. Po stwierdzeniu istnienia sygnału układ zatrzaskuje się – zmiana wejścia możliwa jest jedynie po zaniku obecnego sygnału i odczekania ustalonego przez nas czasu. Aktywne wejście sygnalizowane jest przez świecącą diodę LED. Czas oczekiwania powinien wynosić minimum kilka sekund, ponieważ zapobiegnie to niepożądanej zmianie wejścia, np. podczas przejść pomiędzy utworami.Wykaz elementów
rezystory:- R1, R3, R6, R10…13 100k 0,25zł
- R2, R5 1k 0,25zł
- R4 2,2k 0,25zł
- R7, R8 4,7k 0,25zł
- R9 330 0,25zł
- C1 1u 0,70zł
- C2, C3, C4, C10, C11 10u 0,80zł
- C5…9 100n 0,80zł
- IC1 4052 1,00zł
- IC2 LM358 0,50zł
- IC3 ICL7660 3,00zł
- IC4 Attiny 2313 7,00zł
- listwa kątowa goldpin 1,00zł
- 10x gniazdo cinch do druku 8,00zł
- podstawki pod układy scalone (20pin, 16pin, 2x 8pin) 0,59zł
- laminat 90x100mm 1,90zł
Ceny wyznaczone na podstawie cennika jednego z popularniejszych sklepów internetowych. Pod uwagę nie wzięto kosztów wykonania płytki PCB oraz obudowy.
Schemat
Automatyczny przełącznik audio - schemat ideowy |
Układ składa się z kilku bloków, m. in.:
Zasilanie
Automatyczny przełącznik audio - zasilanie układu |
Całe urządzenie zasilane jest napięciem 5V. Wzmacniacz zasilamy napięciem niesymetrycznym, ponieważ interesuje nas jedynie dodatnia część sygnału. Kłopot może stanowić kostka 4052, która wymaga zasilania symetrycznego. Z tego powodu w projekcie użyto układu ICL7660. Połączenie kondensatorów elektrolitycznych o pojemności 10uF pomiędzy nóżkami: 2 i 4 (oznaczenie CAP) oraz 5 i 3, czyli odpowiednio wyjściem i masą układu, pozwala na osiągnięcie napięcia wyjściowego równego wejściowemu ze znakiem minus.
Multiplekser
Automatyczny przełącznik audio - układ multipleksera |
Multiplekser zrealizowany jest na kostce 4052. Układ posiada 4 dwukanałowe wejścia, które mogą być sterowane sygnałem z mikrokontrolera (MUXA i MUXB).
Sterowanie multiplekserem |
Wejście INH zwieramy do masy, dzięki czemu układ zawsze jest aktywny. Detektor pobiera sygnał z wyjścia X, dlatego też na odpowiednich wejściach (X0…3) musimy dać rezystory (R10…13), dzięki czemu w przypadku braku sygnału lub podłączonego kabla, układ nie wzbudza się z powodu zakłóceń. Kondensatory C10 i C11 eliminują (możliwą) składową stałą.
Detektor sygnału
Detektor sygnału |
Detektor sygnału powstał w oparciu o detektor amplitudy. Moduł składa się z 2 wzmacniaczy operacyjnych (LM358), diody oraz kilku kondensatorów i rezystorów. Sygnał pobierany jest z wyjścia multipleksera. Kondensator C1 przepuszcza jedynie składową zmienną. Rezystor R1 zabezpiecza wzmacniacz przed wzbudzaniem w przypadku braku sygnału na wejściu. Powinien mieć stosunkowo dużą wartość, aby nie stanowić znacznego obciążenia. Układ LM358 wraz z rezystorami R2 i R3 stanowi wzmacniacz nieodwracający o sporym wzmocnieniu (około 100). Wzmocnieniu ulega tylko dodatnia część sygnału (ujemna część jest tracona, ze względu na niesymetryczne zasilanie). Na tym etapie, dzięki znacznemu wzmocnieniu, sygnał jest zbliżony do przebiegu prostokątnego.
Automatyczny przełącznik audio - Circuit Simulator |
Jeżeli symulator "wariuje" naciśnij przycisk RESET.
Problem symulatora Circuit Simulator
Następnie w urządzeniu znajduje się detektor amplitudy, który podtrzymuje sygnał w stanie wysokim. Elementy C2 i R4 wyznaczają stałą czasową. Kolejny wzmacniacz LM358 wraz z rezystorami R6 i R5 filtruje zakłócenia, które występują przy braku sygnału, zabezpieczając w ten sposób urządzenie przed niekontrolowanymi zmianami wejść. Na wyjściu wzmacniacza dostaniemy stan wysoki w przypadku wystąpienia wzmocnionego sygnału audio lub stan niski, jeżeli napięcie na wejściu nieodwracającym jest niższe niż wynikające z dzielnika R5 i R6. W rezultacie jest to układ prostego komparatora napięcia.
Napięcie wyjściowe z komparatora w logicznym stanie wysokim nie jest równe napięciu zasilania! Wynika to z budowy samego wzmacniacza. Na szczęście spadek ten nie jest duży i mieści się w normach dla układu procesora wynoszącymi minimum 0.6 napięcia zasilania. Z tego powodu stosowanie układu z wyjściem typu open-collector nie jest konieczne.
Automatyczny przełącznik audio - napięcia |
Płytka PCB
Automatyczny przełącznik audio - widok na układ.Urządzenie zrealizowane jest na 6 PCB – 5 na wejścia oraz wyjście, 1 na układ wykonawczy. W projekcie użyto laminatu jednostronnego, a nadruki naniesiono metodą termotransferu. Z tego powodu w niektórych miejscach musimy wlutować zworki.
Schemat dodatkowy |
Dodatkowe PCB |
Na płytkach odpowiadających za wejście znajdują się rezystory R10…13. Na płytce odpowiadającej za wyjście nie musimy wykonywać dodatkowych otworów pod rezystor.
Płyta główna |
Układ wykonawczy znajduje się na osobnej, największej płytce. Elementy SV1…5 to listwy kątowe typu goldpin. Należy wlutować je najpierw na płytkach z gniazdami cinch, a następnie dopasować na płycie głównej układu.
Odstęp oraz grubość ścieżek jest stosunkowo duża, dodatkowo w projekcie użyto wyłącznie elementów przewlekanych. Z tego powodu wykonanie urządzenia nie powinno sprawić problemu nawet początkującym elektronikom.
Zabezpieczenie płytki PCB |
Całość od strony ścieżek należy pokryć lakierem kopalowym, czyli rozpuszczoną w spirytusie żywicą lub kalafonią, która zabezpieczy płytkę przed zwarciami i korozją, a przy tym pozwoli na bezpieczne wprowadzenie ewentualnych zmian.
Kod programu
Program został napisany w uproszczonym języku C – Arduino.Aby zaprogramować dowolny mikroprocesor AVR (z rodziny ATtiny) w środowisku Arduino IDE musimy pobrać archiwum (kopia) i rozpakować je w folderze: ...\Arduino\hardware\
Po wypakowaniu powstaną pliki i foldery:
\Arduino\hardware\tiny\boards.txt,
\Arduino\hardware\tiny\bootloaders\,
\Arduino\hardware\tiny\cores\.
Dostępne procesory widoczne są w okienku.
Arduino - obsługiwane procesory |
Przed zaprogramowaniem układu musimy wgrać bootloader, który ustala fusebity mikrokontrolera. Po wykonaniu powyższych instrukcji możemy zaprogramować procesor podobnie jak Arduino (należy jeszcze wybrać programator, którym dysponujemy).
Przed napisaniem programu i wgraniu go do procesora musimy sprawdzić, które piny układu odpowiadają pinom platformy Arduino.
ATtiny 2313 - zgodność z Arduino |
Kod programu automatycznego przełącznika audio jest bardzo prosty. Składa się z kliku pętli i instrukcji warunkowych.
/* Automatyczny przełącznik audio autor: Daniel Turbasa data: 18-02-2014 */ int LED = 10; #define MUXA 14 #define MUXB 15 #define WE 9 #define czas 3000 void setup() //konfiguracja wejść oraz wyjść układu { pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); pinMode(MUXA, OUTPUT); pinMode(MUXB, OUTPUT); pinMode(WE, INPUT); } void fMUX() //funkcja badająca stan sygnału wyjściowego { if ( digitalRead(WE) == HIGH ) //dalsza część instrukcji dostępna po wystąpieniu stanu wysokiego { digitalWrite(LED, HIGH); //zapalenie diody LED odpowiedniego wejścia do //pętla nieskończona - stan niski, utrzymujący się dłużej niż czas zadeklarowany w funkcji delay(), wstrzymuje działanie { do {} while ( digitalRead(WE) == HIGH ); //pętla - oczekiwanie mikrokontrolera na wystąpienie stanu niskiego delay(czas); //czas oczekiwania na ponowne pojawienie się sygnału if ( digitalRead(WE) == LOW ) //wyjście z nieskończonej pętli przy stanie niskim { break; } } while(1); digitalWrite(LED, LOW); //zgaszenie diody LED odpowiedniego wejścia } } void loop() //główna pętla programu { do { for(LED = 10; LED < 14; LED++) //pętla wybierająca pin sterujący diodą LED { switch(LED) //wybór wejść multipleksera { case 10: digitalWrite(MUXA, LOW); //sygnał sterujący multiplekserem digitalWrite(MUXB, LOW); //sygnał sterujący multiplekserem break; case 11: digitalWrite(MUXA, HIGH); digitalWrite(MUXB, LOW); break; case 12: digitalWrite(MUXA, LOW); digitalWrite(MUXB, HIGH); break; case 13: digitalWrite(MUXA, HIGH); digitalWrite(MUXB, HIGH); break; default: break; } delay(50); //opóźnienie przełączania fMUX(); //przejście do funkcji sterującej pracą multipleksera } } while(1); }
Zasadę działania programu przedstawia poniższy graf:
Graf algorytmu |
void setup() //konfiguracja wejść oraz wyjść układu { pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); pinMode(MUXA, OUTPUT); pinMode(MUXB, OUTPUT); pinMode(WE, INPUT); }Na samym początku w funkcji setup() konfigurujemy wejścia oraz wyjścia mikrokontrolera.
void loop() //główna pętla programu { do { for(LED = 10; LED < 14; LED++) //pętla wybierająca pin sterujący diodą LED { switch(LED) //wybór wejść multipleksera { case 10: digitalWrite(MUXA, LOW); //sygnał sterujący multiplekserem digitalWrite(MUXB, LOW); //sygnał sterujący multiplekserem break; case 11: digitalWrite(MUXA, HIGH); digitalWrite(MUXB, LOW); break; case 12: digitalWrite(MUXA, LOW); digitalWrite(MUXB, HIGH); break; case 13: digitalWrite(MUXA, HIGH); digitalWrite(MUXB, HIGH); break; default: break; } delay(50); //opóźnienie przełączania fMUX(); //przejście do funkcji sterującej pracą multipleksera } } while(1); }W pętli głównej programu – loop(), zmieniamy kolejno wejścia multipleksera oraz badamy sygnał wyjściowy. Zastosowanie opóźnienia - funkcja delay(50), jest konieczne. W przeciwnym wypadku układ nie działa prawidłowo i występują błędy podczas przełączania. Po każdej zmianie wejścia multipleksera, program wchodzi do funkcji fMUX(), która sprawdza stan logiczny na wyjściu.
void fMUX() //funkcja badająca stan sygnału wyjściowego { if ( digitalRead(WE) == HIGH ) //dalsza część instrukcji dostępna po wystąpieniu stanu wysokiego { digitalWrite(LED, HIGH); //zapalenie diody LED odpowiedniego wejścia do //pętla nieskończona - stan niski, utrzymujący się dłużej niż czas zadeklarowany w funkcji delay(), wstrzymuje działanie { do {} while ( digitalRead(WE) == HIGH ); //pętla - oczekiwanie mikrokontrolera na wystąpienie stanu niskiego delay(czas); //czas oczekiwania na ponowne pojawienie się sygnału if ( digitalRead(WE) == LOW ) //wyjście z nieskończonej pętli przy stanie niskim { break; } } while(1); digitalWrite(LED, LOW); //zgaszenie diody LED odpowiedniego wejścia } }Funkcja fMUX() sprawdza stan sygnału wyjściowego po zmianie wejścia multipleksera.
W przypadku pojawienia się stanu wysokiego zapala się dioda LED odpowiedzialna za dane wejście, a układ „zatrzaskuje się” do czasu pojawienia się stanu niskiego na wyjściu. Po zmianie stanu, procesor oczekuje krótką chwilę (określoną w funkcji delay()) na pojawienie się stanu wysokiego. Jeżeli nastąpi zmiana, układ ponownie zatrzaskuje się. Przez ten czas dane wejście cały czas jest aktywne. Utrzymujący się stan niski prowadzi do wyjścia z pętli, wygaszenie diody oraz przejście do dalszego sprawdzania sygnału z wejść multipleksera w głównej pętli układu.
Do pobrania
Schemat układu oraz płytki PCB zrobione w programie Eagle oraz kod programu można pobrać tutaj (kopia).Dodatkowe wyposażenie
Ze względu na zastosowanie gniazd audio typu cinch, konieczne jest zaopatrzenie się w przejściówki typu mini-jack -> cinch.Automatyczny przełącznik audio - dodatkowe wyposażenie |
Możliwości zmian
Nieużywane piny mikrokontrolera możemy wykorzystać dokładając obsługę przycisku, który niezależnie zmieniałby kanały. Pozwoli to na wybór konkretnego wejścia, a urządzenie będzie pełniło funkcję prostego miksera audio.Ponieważ detektor pobiera sygnał z wyjścia multipleksera, urządzenie ma charakter zatrzasku – zmiana wejść możliwa jest jedynie po całkowitym wygaszeniu sygnału z aktywnego wejścia.
Aby była możliwość zmiany źródła sygnału podczas, gdy jest on aktywny, detektor musiałby pobierać informacje bezpośrednio z wejść urządzenia. Można to zrealizować na dwa sposoby. Poprzez zwielokrotnienie detektorów, co niestety wiąże się ze znacznym wzrostem elementów oraz kosztów lub poprzez dodanie drugiego multipleksera, działającego w sposób ciągły i sprawdzającego aktualny stan wyjść.
Szkic schematu ulepszonego przełącznika mógłby wyglądać tak:
Automatyczny przełącznik audio - ulepszony schemat |
Komentarz
Urządzenie choć proste, pozwoliło mi zdobyć dużo doświadczenia i wiedzę dotyczącą projektowania urządzeń elektronicznych. Podczas projektowania używałem prostego symulatora układów elektronicznych, który wyeliminował część problemów, bez ponoszenia żadnych kosztów i zmarnowanych elementów.Już po wykonaniu układu natrafiłem na problemy podobne do opisanych w tym artykule. Wymusiło to stosowanie wielu rezystorów 100k, które zwierają wejścia do masy w przypadku braku sygnału.
Podsumowując – prezentowany przeze mnie artykuł ukazuje jedynie wierzchołek góry lodowej. Na wykonanie całego urządzenia potrzeba było wielu godzin spędzonych na rozmyślaniach, szkicach, konsultacjach, projektowaniu, testowaniu i wprowadzaniu ewentualnych poprawek. Nie uważam tego czasu za stracony, jednocześnie mam nadzieję, że układ przypadnie Wam do gustu i znajdzie się osoba chcąca wykonać to urządzenie dla siebie :-)
Pozdrawiam,
Daniel Turbasa
gil-59.blogspot.com
Zobacz inne artykułu z cyklu: Arduiono ... czyli prościej się nie da :-)
Na symulacji pierwszy wzmacniacz jest "do góry nogami" i całość się zatrzaskuje w jednym stanie przez dodatnie sprzężenie zwrotne ;)
OdpowiedzUsuńWszystko jest OK. Pierwszy układ to wzmacniacz nieodwracający - sygnał podajesz na "+", rezystory odpowiadające za wzmocnienie do "-". Po prostu wzmacniacz jest odwrócony, ale połączenia są ok. Jeżeli chodzi o zatrzaskiwanie to aby w pełni pokazać działanie układu, należałoby za źródłem dać klucz, który będzie symulował występowanie sygnału lub jego brak.
UsuńSam mówisz, ze sygnał idzie na + a sprzężenie jest do - a na symulacji jest dokładnie odwrotnie. Nie mówię o schemacie bo tam jest ok tylko o symulacji.
UsuńRacja - na obrazku ze strzałkami jest błąd. Wzmacniacz jest odwrócony i pracuje w konfiguracji komparatora z histerezą (o ile dobrze pamiętam). Natomiast na samej symulacji, którą sprawdzałem (aplet Java) wszystko jest OK.
UsuńSama symulacja również jest z niepoprawnie podłączonym wzmacniaczem operacyjnym. Za błąd przepraszam i zwracam honor kamaloo :) Stosowne poprawki przesłałem do redakcji.
UsuńWitam,
OdpowiedzUsuńCzy byłaby szansa, żeby zakupić ten układ (zaprogramowany kontroler i może płytka). Chociaż płytkę mogę zrobić sam, elementy także.
Pozdrawiam
Maciej Piotrowski