
Po kilku tygodniach zmagań udało się ukończyć projekt wzmacniacza wraz ze sterownikiem. Mimo, że podczas realizacji tego projektu nie "odkryłem Ameryki", a wykorzystana technologia ma już swoje lata, to i tak temat wydał mi się być na tyle ciekawy, że postanowiłem go "na nowo" zgłębić, dodając małe drobiazgi jak programowanie pilota czy funkcje "fadeIN" oraz "fadeOut" wykorzystywane podczas pracy wzmacniacza lub sterowanie dwoma parami kolumn. W internecie jest trochę podobnych rozwiązań, jednak nigdzie nie znalazłem dokumentacji, która opisywałaby temat od początku do końca. Gdzieś się znajdzie sam potencjometr, gdzieś indziej selektor, jeszcze w innym miejscu obsługa pilota, ale już z potencjometrem mechanicznym, itd. Oczywiście praktycznie nikt (poza jednym artykułem w EP) nie chcę udostępnić pełnych kodów źródłowych tak, jakby zawierały one jakieś strzeżone tajemnice.

Ponieważ kilka wzmacniaczy już zbudowałem i wiem, że jeśli chcemy zbudować urządzenie praktyczne, to nie składa się on tylko z zasilacza i końcówek mocy, dlatego już jakiś czas temu zbudowałem "skromniejsze" wersje sterowników:
a) Link 1
b) Link 2
Te po kilku miesiącach dość intensywnego używania okazały się być niezawodne i co najważniejsze - zdecydowanie ułatwiające życie.
Dlatego postanowiłem poprawić swój błąd i dodać do sterownika funkcje, których mi brakowało. Jedna z nich i ta najbardziej motywująca do wykonania projektu to zastosowanie potencjometrów cyfrowych zamiast tradycyjnych. Zalet ich zastosowania jest kilka:
- parametry takich potencjometrów są wiele lepsze od najbardziej zaawansowanych potencjometrów analogowych stosowanych w audio;
- podczas projektowania obudowy nie musimy walczyć z prowadzeniem sygnału na panel frontowy (lub wykonywać mechanicznych przedłużek), czym mocno zmniejszamy prawdopodobieństwo zakłócenia sygnału audio;
- dają możliwość sterowania z pilota bez konieczności używania silnika.
Wstęp
Zanim rozpocząłem projektowanie, długo zastanawiałem się, co tak właściwie chcę uzyskać, budując nowy sterownik i jakie nadać mu funkcjonalności? Rozważałem zbudowanie sterowania na Raspberry PI z zainstalowanym Volumio lub stosując jakieś rozwiązanie na innej platformie ARM. Wówczas mnogość bibliotek do sterowania po WiFi czy też przy użyciu pilota, obsługi sieci itd. dawała spore możliwości włącznie z możliwością wbudowania odtwarzacza sieciowego. Przy tych rozważaniach ciężko było jednak określić, co tak właściwie z tego powstanie - czy to będzie wzmacniacz zintegrowany z odtwarzaczem, czy tylko wzmacniacz z sensownym sterowaniem.
Ostatecznie z dwóch powodów zdecydowałem odrzucić koncepcję Raspberry. Pierwszy to "zbyt łatwo", bo właściwie w elektronice już nie byłoby co robić i zostało właściwie samo programowanie (co mnie osobiście nudzi), po drugie sam wzmacniacz jest urządzeniem bardziej uniwersalnym, a Raspberry zawsze można do niego podłączyć, więc postanowiłem zrobić coś "klasycznego" zamiast kombinować.
Wykluła się więc koncepcja budowy "klasycznego" wzmacniacza stereo z kompletnym i funkcjonalnym sterownikiem. Wstępnie powstała idea zbudowania sterownika składającego się z jednego modułu - jednak po kilku próbach i dodatkowych przemyśleniach na temat możliwości ułożenia elementów w obudowie, a także kilku rysunkach i przymiarkach, idealna wydała się być koncepcja zbudowania trzech osobnych współpracujących ze sobą elementów, są to:
- modułu zasilający;
- sterownik wykonawczy "slave";
- panel sterujący "master".
Dodatkową zaletą tego rozwiązania jest to, że każdy z modułów może działać niezależnie w innym projekcie. Zasilacz nie wymaga sterowników, a sterownik może być zasilany dowolnym innym zasilaczem. Panel frontowy "master" można zastąpić czymkolwiek, co komunikuje się po RS232/UART np. Arduino, Raspberry Pi czy nawet zwykły komputer z konsolą tekstową... Wszystko dlatego, że cały czas to Raspberry chodziło mi po głowie.

Sugerowany układ elementów w obudowie
Wspomniałem wcześniej, że ilość modułów wynika z możliwości ułożenia wszystkiego w optymalny sposób w jednej obudowie.
Zacząłem planowanie od potencjalnie najprawdopodobniejszego układu elementów. Na tym etapie pod uwagę brałem, żeby:
- połączenia sygnałowe były możliwie najkrótsze,
- zasilanie końcówek mocy było możliwie najdalej od połączeń sygnałowych,
- wykorzystać radiatory jako ekran oddzielający końcówki od trafo,
- kable sterujące i zasilające nie utworzyły pajęczyny rozlewającej się po całej obudowie,
- była możliwość zamontowania wszystkiego w obudowie RACK2U na ściankach bocznych tak, by pozostawić w środku jak najwięcej miejsca na końcówki mocy, radiatory i trafo,
- prowadzić zasilanie i masy w taki sposób, by nie powstały pętle masy.
Finalnie postanowiłem, że wszystkie elementy układu będą montowane na ściankach bocznych, tym samym pozostawiając w obudowie maksymalną ilość miejsca na transformatory, radiatory i końcówki mocy (oczywiście to nie jest obowiązek). Zamontowanie sterownika na tylnej ściance dodatkowo powoduje, że długość połączeń pomiędzy gniazdami wejściowymi RCA a płytką PCB jest minimalna a krótsze można uzyskać jedynie poprzez montaż RCA na PCB - ja się na to jednak nie zdecydowałem z dwóch powodów: pierwszy to o dziwo słaba dostępność złącz do druku 3x2 dobrej jakości i w rozsądnej cenie, a drugi - ich zastosowanie może wymagać wiercenia "kwadratowych otworów" w obudowie, co też jest zwykle bardzo kłopotliwe, aby uzyskać estetyczny efekt końcowy.
Przykładowe przymiarki w obudowie RACK:


Prowadzenie masy
Sposób prowadzenia masy przedstawia poniższy rysunek. Szczegółowo widać wszystko także na schematach. Jenak ogólnie przed projektowaniem modułów rozrysowałem sobie wszystkie bloki i zacząłem rozprowadzać między nimi masę. Trzeba pamiętać, że w tym projekcie występują trzy różne:
- GND masa analogowa zasilacza końcówek mocy;
- GNDA masa analogowa dla przedwzmacniacza łączy się z masą wejściową złącz RCA;
- GNDD masa cyfrowa dla uC i całej części sterującej - nie łączy się z układami analogowymi.
Na poniższym schemacie widać, że jedyne połączenie mas GND z GNDA występuje w końcówkach mocy, jednak dzięki temu, że w zasilaczu różne masy nie mają punktów wspólnych, uniknęliśmy powstania pętli.
Sygnał głośnikowy choć wraca na płytkę "slave", to nigdzie nie łączy się z pozostałymi masami. Moduł przełączników wyjść jest całkowicie odseparowany od układu (slave).

Moduł zasilania:
Zadania dla tego modułu są dość oczywiste. Jego funkcje to:
- zasilacz symetryczny dla końcówki mocy (50W - 300W);
- zasilacz symetryczny dla elementów toru audio +/- 12V;
- zasilacz dla obsługi części cyfrowej (5V CPU, 12V przekaźniki);
- rozdzielenie napięć oraz masy cyfrowej od analogowej poprzez zastosowanie osobnych układów filtrujących i stabilizujących oraz dwóch dławików, których co do zastosowania w sumie nie jestem przekonany, choć takie rozwiązania sugerowały pewne projekty znalezione w Google;
- możliwość sterowania zasilaniem końcówek mocy poprzez sygnał standBy;
- szybkie odłączanie napięcia 12V dla części cyfrowej;
- soft-start dla obsługi zasilacza końcówek mocy;
- obsługa sygnału "standby", który przy stanie niskim wyłącza zasilanie końcówek mocy (domyślnie wyłączony). Podanie napięcia 5V na pin 1 złącza CN1 powoduje włączenie zasilania. Odpowiedzialne za tą funkcję są T2, R11, P2, D1;
Zasilacz dostarcza napięcia:
- Digital 12V stabilizowane z szybkim odłączaniem po zaniku zasilania. Funkcjonalność ta powoduje natychmiastowe wyłączenie wszystkich przekaźników po zaniku napięcia;
Elementy odpowiadające za szybkie odłączanie to: T1, R8, R9, C10, Dx w ich pobliżu.
- Digital 5V stabilizowane;
- +/- 17V tylko wyprostowane i filtrowane z jednej gałęzi transformatora 2x12V (niewykorzystane w tym projekcie).
Moduł sterownika "slave":
Funkcje:
- selektor wejść [brak,1,2,3] (3 wejścia stereo);
- przedwzmacniacz wejściowy OPA2134A (wskazane użycie na potrzeby potencjometra cyfrowego);
- sterowanie głośnością za pośrednictwem układów CS3310, PGA2311 lub po drobnych zmianach zasilania PGA2310;
- selektor wyjść głośnikowych [brak,A,B,A+B];
- opóźnione załączanie głośników;
- szybkie odłączanie głośników w przypadku zaniku zasilania (zrealizowane na płytce zasilacza, jednak tutaj wykorzystywane);
- w związku z zastosowaniem potencjometrów cyfrowych powstała możliwość realizacji wyciszania sygnału na "ułamek sekundy" podczas przełączania źródeł dźwięku lub kolumn. Zastosowane układy wyposażone są w funkcję MUTE, która podczas aktywacji lub dezaktywacji potrafi wykrywać moment przejścia sygnału przez "0", tym samym wykluczając możliwość powstawania charakterystycznych "stuknięć" podczas zmiany jej stanu - funkcja te jest oprogramowana, jednak ja przy każdej takiej zmianie używam funkcji fadeOut i fadeIn, która daje o wiele przyjemniejszy efekt;
- wyjście słuchawkowe wyprowadzone z końcówek mocy;
- szybkie odłączanie głośników po zaniku zasilania (odłączenie napięcia 12V dla przekaźników);
- podczas przełączania wyjść głośnikowych lub źródła następuje szybkie, ale płynne wygłuszenie do 0, a następnie płynny powrót do ustalonej głośności. Eliminuje to przedostawanie się wszelkich stuknięć i pstryknięć podczas przełączania mechanicznych przekaźników a także stuknięć w przypadku przełączenia się na źródło w momencie, gdy jest w "wysokiej pozycji". Dodatkowo podczas przełączania sterownik czeka około 10ms, aby wyeliminować przedostanie się do wzmacniacza ewentualnych śmieci wynikających z drgań styków;
- gładkie przejście do funkcji mute oraz gładki powrót,
- gładkie przejście do ostatnio ustawionej głośności po włączeniu zasilania;
- gładkie wyciszenie przed przejściem w tryb standby.
Moduł ten może być wykorzystany z modułem zasilania w dowolnym innym projekcie, zastępując moduł "master" własnym modułem działającym w oparciu o Arduino, Raspberry Pi lub jakąkolwiek inną platformę - np. aplikację w komputerze. Możliwości takie powstały dzięki temu, że moduł zarządzany/sterowany jest za pośrednictwem portu szeregowego. W taki też sposób komunikuje się z panelem "master". Komunikacja odbywa się przy użyciu banalnego wręcz protokołu tekstowego.
Na etapie testów, zanim zrobiłem obsługę panel "master" do sterowania, wykorzystałem port szeregowy w komputerze i klasyczny terminal (parametry transmisji to 57600 8N1). Do zasilenia modułu potrzebujemy napięcia +/- 9V oraz 5V. W przypadku zastosowania PGA2310 zalecane jest użycie napięcia +/- 15V i wymiana stabilizatorów na 7812 oraz 7912.
Protokół komunikacji ze "slave":
Format ramki:
~~~~~~~~~~~~~
Komendy oparte o protokół tekstowy. Każdy rozkaz ma długośc 5 bajtów:
[xnn]
[ = początek ramki ( także resetuje znacznik pozycji w odczytywanej ramce )
] = koniec ramki
x - kod rozkazu
nn - wartość w HEX ( cyfry i wielkie litery )
Rozkazy:
~~~~~~~~~~~~~
1. Selekcja wejścia :
[I0x]
Gdzie x = 0,1,2,3 ( 0 wszyskie wyłączone )
2. Selekcja wyjść A,B :
[O0x]
Gdzie x = 0,1,2,3 ( 0 wszyskie wyłączone, 3 A i B włączone )
1 - B
2 - A
3. Ustawianie głosności w obu kanałach z uwzg. balansu
[Vxx]
Gdzie xx = 0..FF ( 0 cisza, FF to maximum )
4. Ustawianie głosności w lewym kanałale
[Lxx]
Gdzie xx = 0..FF ( 0 cisza, FF to maximum )
5. Ustawianie głosności w prawym kanałale
[Rxx]
Gdzie xx = 0..FF ( 0 cisza, FF to maximum )
6. Ustawianie sygnału sterującego stanby
[S0x]
Gdzie x = 0 lub 1 ( 0 - napięcie trafo odłączone, 1 - trafo włączone )
7. Volume Fade to ...
[Fxx]
Gdzie xx = 0..FF ( 0 cisza, 0xFF to maximum )
8. Ustawianie balansu
[Bxx]
Gdzie xx = 0..100 ( 0x00 to 100% kanał lewy, 0x64 to 100% kanał prawy, 0x32 = środek )
9. Ustawianie pinu "extra"
[X0x]
Gdzie x = 0 | 1
Sterownik zwraca :
# - jesli rozkaz wykonany ;
! - jesli błąd odczytu ramki ;
Na płytce slave zrobiłem jeszcze kawałek "płytki uniwersalnej" oraz wyprowadzenie wyjścia EXT. Jeszcze nie wiem, czy to kiedyś wykorzystam, ale niech będzie.

Moduł sterownika "master":
"Master" to nic innego jak "panel frontowy". Zanim powstał ostateczny koncept mnożyły się różne pomysły związane z tym, czy powinny być guziki, pokrętła, czy może sam pilot, a jeśli guziki, to ile, jakie i z jakimi funkcjami itd... Jak sygnalizować stan wejść itd...
Finalnie zdecydowałem, że na froncie wzmacniacza będzie tylko jedno pokrętło i wyświetlacz LCD. Trochę minimalistycznie, ale nie znaczy to, że skromnie, jeśli chodzi o funkcjonalność. Zastosowałem enkoder z przyciskiem, a tak "zaawansowane pokrętło" daje możliwości realizacji każdej funkcji, jaką sobie tylko wymyślimy. Ja, choć koła ponownie nie odkryłem, to wymyśliłem to sobie tak:
- po włączeniu wzmacniacza do 230V uruchamia się on w trybie "stanby";
- naciśnięcie przycisku enkodera powoduje przejście to trybu "pracy";
- w trybie pracy naciskanie przycisku enkodera powoduje przechodzenie między kolejnymi opcjami menu;
- wyłączenie wzmacniacza następuje przez przytrzymanie przycisku przez ~1,5s (przejście w tryb standby);
- moduł obsługuje także piloty w standardzie RC5. Przytrzymanie przycisku enkodera podczas podłączania zasilania wywołuje tryb "programowania" pilota.
Dodatkowe ciekawe funkcje to:
- płynne zwiększanie głośności po włączeniu wzmacniacza;
- płynne zmniejszanie głośności przed przejściem w tryb stanby;
- możliwość ustalenia limitu głośności;
- możliwość ustawienia poziomu minimalnej głośności. Ta opcja może wydawać się dziwna, ale przy zastosowanych potencjometrach, które mają tłumienie na poziomie -96dB nabiera to sensu - ponieważ jak ktoś zostawi nam wzmacniacz na tym poziomie, to dłuuugo poczekamy, trzymając przycisk "volume+", zanim usłyszymy coś w głośnikach.
- funkcja mute także z płynnym wyciszaniem i wzmacnianiem;
- ustawianie balansu;
- *** ustawianie limitu głośności (przydatna funkcja przy dzieciach);
- *** funkcja sleep.
Struktura menu sterownika i funkcje przycisku enkodera:
..0..Wejście.w.tryb.programowania.pilota.poprzez.przyciśnięcie.i.przytrzymanie.enkodera.podczas.włączania.zasilania.
.
..1.."ON".gdy.w.trybie.standby.-.naciśnięcie.włącza.wzmacniacz.
..
..2.."OFF".przytrzymanie.przycisku.~2.sek..przejście.do.trybu.standby.
..
..3.."Volume".:
.....┌────────────────┐
.....│Volume..........│
.....│-42dB...........│
.....└────────────────┘
..4.."Balance".:
.....┌────────────────┐
.....│Balance:........│
.....│L:.30%...R:.70%.│
.....└────────────────┘
..
..5.."Source:".:
.....┌────────────────┐.....┌────────────────┐.....┌────────────────┐.....┌────────────────┐
.....│Source..........│.....│Source..........│.....│Source..........│.....│Source..........│
.....│off.............│.....│AUX.1...........│.....│AUX.2...........│.....│AUX.3...........│
.....└────────────────┘.....└────────────────┘.....└────────────────┘.....└────────────────┘
.....
..6.."Speakers:"
.....┌────────────────┐.....┌────────────────┐.....┌────────────────┐.....┌────────────────┐
.....│Speakers........│.....│Speakers........│.....│Speakers........│.....│Speakers........│
.....│off.............│.....│A...............│.....│B...............│.....│A+B.............│
.....└────────────────┘.....└────────────────┘.....└────────────────┘.....└────────────────┘
.....
..7.."Sleep:".(.planowana.)
.....┌────────────────┐
.....│Sleep:..10.min..│
.....│-[----O-------]+│
.....└────────────────┘
..8.."Max.volume".(.planowana.)
.....┌────────────────┐
.....│Max.volume......│
.....│-[----O-------]+│
.....└────────────────┘
Funkcje 7 i 8 były od początku zaplanowane. Niestety nie udało mi się ich jeszcze "wcisnąć" do kodu z powodu braku pamięci.
Skompilowany kod już zajmuje ponad 4050 bajtów, a MCU ma dostępne 4096.
Oczywiście pozostało jeszcze sporo miejsc, które można zoptymalizować, więc jak tylko uda się zmniejszyć kod o dodatkowe 200 bajtów, to dorobię te funkcje.
Na początku projektu bardzo chciałem zmieścić się w 2kB i prawie się udało... Jednak wówczas komunikaty na wyświetlaczu byłyby jeszcze bardziej ubogie, kody pilota musiałyby być zaszyte w kodzie no i nie wszystkie jego funkcje byłyby dostępne, zostałyby tylko: volume, power, selekcja wejść.
Ogólnie o samym programie.
Po włączeniu zasilania wykonywana jest funkcja init() - na wyświetlaczu LCD pojawia się napis powitalny, następuje zainicjowanie portu szeregowego, wyświetlacza, wczytanie konfiguracji z eeprom oraz przejście do trybu standby. W trybie standby procesor wciąż działa, jednak wyłączony jest wyświetlacz LCD oraz zasilanie końcówek mocy. Działają procedury odczytu pilota oraz enkodera. Po wykryciu naciśnięcia przycisku enkodera lub kodu "power-on" z pilota następuje przejście do trybu pracy - odpowiada za to funkcja action_on(). Na tym etapie wykonywane są następujące czynności:
- włączenie podświetlenia wyświetlacza (u mnie bez znaczenia bo wykorzystałem wyświetlacz typu OLED);
- ponownie wczytywana jest konfiguracja z eeprom;
- następuje włączenie zasilania końcówek mocy;
- po 1s włączenie ostatnio aktywnego źródła;
- po 200ms włączenie ostatnio aktywnych głośników;
- po 100ms następuje płynne zwiększanie głośności zapamiętanej w momencie ostatniego wyłączania wzmacniacza.
Powyższa procedura skutecznie zabezpiecza przed dostaniem się do głośników niepożądanych dźwięków wynikających z rozruchu elektroniki wzmacniacza.
Po zakończeniu procedury "startowej" program pozostaje w pętli głównej, w której wyłapywane są zdarzenia związane ze zmianami pozycji enkodera lub rozpoczęcia transmisji z pilota. Poszczególne fragmenty kodu zostały oznaczone odpowiednim komentarzem. Wyłapane zdarzenia wykonują różne rozkazy, które mogą mieć wpływ na stan struktury z konfiguracją oraz zmiennych odpowiedzialnych za bieżącą pozycję w menu.
W pętli głównej znajduje się także fragment kodu odpowiedzialnego za odświeżanie zawartości LCD.
To, co widzimy na wyświetlaczu, nie jest wynikiem bezpośrednich zmian stanu wzmacniacza i zdarzeń, które zaszły.
Zawartość ekranu odświeżana jest "niezależnie" od rejestrowanych przez program zdarzeń. To, co pokazuje się na ekranie, wynika jedynie ze stanu zmiennych statusowych oraz bieżącej pozycji menu. Nie chcę się bardziej rozpisywać na temat kodu, bo wg mnie nie jest on skomplikowany. Więcej szczegółów na temat jego działania znajdziemy w samym kodzie, a jeśli ktoś ma pytania, to postaram się odpowiedzieć.
Istotna jest jeszcze sama procedura przejścia do trybu standBy. Jest nieco podobna do startowej, a odpowiada za nią funkcja action_off(), w której wykonywane są czynności:
- zapisanie konfiguracji do eeprom;
- wyświetlenie napisu "goodbye";
- płynne wyciszenie wzmacniacza do "0";
- po 300ms odłączenie głośników;
- po 200ms odłączenie wejść;
- po 200ms odłączenie zasilania końcówek;
- po 500ms wywołanie menu "standby", w którym następuje wyłączenie podświetlenia LCD.
BUDOWA
Zasilacz
Prace rozpocząłem od budowy modułu zasilania. Sporą część miałem już gotową ze swoich poprzednich projektów, jednak trzeba było dodać nowe funkcjonalności, takie jak:
- obsługa trybu standby,
- rozdzielenie masy analogowej od masy cyfrowej,
- dla bezpieczeństwa zwiększyć odległości pomiędzy i od ścieżek 230V.
Początkowa koncepcja zakładała użycie osobnych transformatorów dla części cyfrowej i analogowej po to, by w trybie standby zostawić jedynie zasilanie części cyfrowej z małego transformatora o minimalnej mocy. Nawet powstała taka wersja modułu, ale niestety została rozlutowana...



Przyczyną problemów z zasilaniem z dwóch transformatorów był układ cs3310, który okazał się być bardzo wybredny, czym mocno pokrzyżował moje plany. Niestety do właściwych wniosków doszedłem dopiero po spaleniu dwóch cs3310. Po wnikliwej analizie dokumentacji doszukałem się "Note 3" z gwiazdką i małym druczkiem, który informował, że układ MUSI mieć podane najpierw zasilanie analogowe, a później cyfrowe, a w innym przypadku... zjara się z efektem dymnym włącznie. Przy pierwszych podłączeniach dziwiła mnie występująca losowo wysoka temperatura układu, ale początkowo tłumaczyłem to innymi błędami i zaniedbaniami. Fakty były jednak takie, że zasilacze startowały "nierównomiernie" i raz włączało się dobrze, a raz źle (standby miałem na stałe wyłączone). Nie zmieniało to jednak faktu, że wyłączenie zasilania analogowego musiałem wykluczyć. Rozwiązaniem byłoby rozbudowanie modułu o sterowanie napięciem cyfrowym dla części analogowej, ale stwierdziłem, że to przesada, bo przecież i tak nie będę tego zasilał z baterii, więc walka o 1W czy 2W w trybie standby wydała się być zbędna.
Skoro już tak się stało, postanowiłem zrezygnować z osobnego zasilacza dla części cyfrowej i rozdzielić mądrze zasilanie z jednego transformatora +/-12V. Wstępnie myślę, że przyjęta koncepcja się sprawdza i przynajmniej w części gwarantuje blokowanie cyfrowego "śmietnika" przed dostaniem się do części analogowej.








Na schemacie należy zwracać uwagę na opisy masy, ponieważ występują GND, GNDA i GNDD - sposób ich łączenia ma ogromne znaczenie.
Moduł slave
Kolejnym etapem była budowa sterownika "slave". Tutaj właściwie po pokonaniu problemów z zasilaniem CS3310 żadnych niespodzianek nie było. Powstały jedynie 2 wersje PCB różniące się nieco układem złącz, ponieważ w wersji pierwszej kabel łączący z zasilaczem musiałby być skręcony o 90 stopni. Kilka niespodzianek spotkało mnie także podczas testowania samego układu. Pierwsza to dość spore wzmocnienie samego potencjometru cyfrowego, które pod znakiem zapytania stawia wstępne wzmacnianie sygnału na OPA. W sumie do końca nie wiem, czy wartości wzmocnienia mam dobrze dobrane, bo nie potrafiłem się zdecydować, jakie maksymalne zakresy napięcia wejściowego przyjmować... 0,3V RMS czy może 0,7V? Wikipedia podpowiada, że https://en.wikipedia.org/wiki/Line_level
Dla domowego audio to 0,316V RMS, jednak po kilku testach urządzeń takich jak laptopy, tablety i player MP3, dochodzę do wniosku, że normy te wszyscy ignorują.
Finalnie wiedząc, że sam potencjometr może wzmocnić sygnał o 31dB, zdecydowałem o możliwości podpięcia źródła, które daje sygnał do 0,5V RMS.
Teraz kilka słów o samym układzie.
Za selektorem wejść znajdują się dwa filtry - pierwszy górnoprzepustowy (C1+R3) przepuszcza nam sygnał powyżej 3Hz i jednocześnie odfiltrowuje ewentualną składową stałą. Zaraz za nim jest filtr dolnoprzepustowy (C4+R5), przepuszcza nam pasmo poniżej ~100kHz, aby odfiltrować ewentualne szumy oraz śmieci pochodzące z wejścia wzmacniacza.
Następny jest wzmacniacz operacyjny (może być TL072 lub OPA2134 ), którego zadaniem jest dopasowanie napięcia wejściowego tak, aby było bardziej optymalne dla potencjometru cyfrowego. Tutaj producenci zalecają, aby regulacji dokonywać na sygnałach "możliwie największych", ponieważ w ten sposób sygnał wyjściowy zawiera mniej szumów. Ja w swoim układzie zastosowałem wzmocnienie 2x.
Potencjometr, podobnie jak wzmacniacz operacyjny, obstawiłem kilkoma kondensatorami blokującymi i zapobiegającymi ewentualnym wzbudzeniom.
Ich brak zdecydowanie wpływa na poprawność i stabilność układu, w szczególności kapryśny jest potencjometr, który źle "obstawiony" zaczyna "pływać" lub dawać niesymetryczny sygnał (prototyp na płytce stykowej była porażką).
Podczas testów modułem slave sterowałem z PC poprzez terminal portu szeregowego.
W module można zamiennie stosować wzmacniacze operacyjne OPA2134 z TL072 - osobiście w warunkach prototypowych nie słyszę szczególnej różnicy - zobaczymy w praktyce.
Ostatecznie sterownik zadziałał, diody zamigały, przekaźniki pstrykały, więc można było zabrać się za budowę kolejnego elementu.








Moduł master
Ostatni etap budowy sterownika to wykonanie modułu "master", czyli panelu sterowania. Jak wcześniej pisałem po długich przemyśleniach całość sterowania postanowiłem umieścić pod jednym enkoderem z przyciskiem, a odpowiednie komunikaty wyświetlać na LCD2x16. Inną, też ciekawą koncepcją było zastosowanie diod sygnalizujących wybór wejść, wyjść oraz głośności lub balansu... Niestety problem był z ładną i czytelną prezentacją tych dwóch ostatnich. Rozważałem jakieś linie diodowe na całą szerokość wzmacniacza albo wskaźniki analogowe, ale finalnie chyba poszedłem na łatwiznę.
Do panelu frontowego poza sygnałem RX, TX oraz zasilaniem digital doprowadzony jest także sygnał audio (przez rezystory 10k) po to, by wykonać np. wskaźnik wysterowania, diodę przesterowania albo clip.
W tym projekcie jednak postanowiłem tego nie wykorzystywać ale w przypadku wykorzystania sterownika w końcówce estradowej zapewne jakiś wskaźnik wysterowania dodam.
Ponieważ moduł master do pracy wykorzystuje wewnętrzną pamięć eeprom, należy pamiętać, aby podczas programowania ustawić fuse bity:
BODLEVEL2 = 1
BODLEVEL1 = 0
BODLEVEL0 = 0
Włączenie trybu BOD zapobiega kasowaniu lub "zaśmiecaniu" pamięci eeprom podczas włączania lub wyłączania sterownika, a należy pamiętać, że w tej pamięci zapisujemy także ustawienia głośności, więc przy odpowiedniej dozie pecha, gdy wzmacniacz uruchomi się na 100% głośności, możemy narazić się na przykrą niespodziankę, o ile nawet nie uszkodzenie kolumn lub samego wzmacniacza.




Końcówki mocy
W tej części nie wykażę się wcale, ponieważ nie znam się na tym na tyle, aby samodzielnie wykonać końcówkę, która choć odrobinę byłaby inna niż schematy już dostępne w sieci, a co bardziej prawdopodobne - raczej bym coś spierniczył niż ulepszył. W związku z tym postanowiłem skorzystać z rozwiązań, które inni i mądrzejsi przemyśleli za mnie, więc zakupiłem gotowe KIT'y na tranzystorach MOSFET. Cóż więcej napisać, poza tym, że trzeba było je przykręcić do radiatora...
Wybrałem je, bo mam już z nimi doświadczenie i w sumie w swoich wzmacniaczy DIY nie miałem okazji używać lepszych.







Obudowa
Wstępnie kusił mnie zakup gotowej obudowy stalowej lub aluminiowej - to w dużym stopniu przyspieszyłoby zakończenie prac. Problem był tylko jeden. Metalowa obudowa do niczego mi nie pasuje, więc chcąc zrobić coś, co jednak stanie się meblem, na który będę patrzeć pewnie kilka lat, musiałem wybrać drewno. Stąd taki, a nie inny "design".








Raspberry PI
Ponieważ od początku kusiło mnie wykorzystanie Raspberry PI, to postanowiłem zrobić dla niego osobny moduł niezależny od wzmacniacza. Właściwie nie ma tutaj co wiele pisać, bo jedyne, co zrobiłem to transformatorowy zasilacz stabilizowany. Cały moduł zasilany jest z wzmacniacza, a wyjście na wzmacniaczu, z którego jest pobierane zasilanie; wyłącza się w trybie standby wzmacniacza. Dlatego nie dodawałem dodatkowego mechanizmu włączania/wyłączania modułu.




Koniec ... ?
Finalnie wszystko prezentuje się jak na poniższych zdjęciach:




Ogólne parametry wzmacniacza
- Moc 2x55W przy 4Ohm ;
- zastosowane trafo 2x24V 150W
Do zrobienia jeszcze pozostało:
- wymiana transformatora na lepszy, bo obecny z firmy elstyk.com buczy nawet na jałowym podłączeniu do sieci. Rozumiem, że transformator nie był bardzo drogi, ale to przykre, że firmy sprzedają "badziewie" po minimalnych kosztach z tandetnym rdzeniem albo oszczędzając na kilku zwojach drutu. Rozumiałbym, gdyby to jeszcze było do oświetlenie, ale kupiłem to z firmy z Lublina, która od lat sprzedaje kity audio;
- wypolerowanie obudowy, jednak muszę poczekać, aż dobrze lakier wyschnie - dam mu 2 - 3 tygodnie. Teraz niestety przy próbie polerowania jeszcze się łuszczy...
UWAGI
- kod źródłowy MASTER obecnie obsługuje wyświetlacze typu OLED i zakomentowany został kod odpowiedzialny za włączanie i wyłączanie podświetlania. Odpowiedzialna jest za to funkcja lcd_backlight();
- wszystkie projekty PCB i schematy przygotowane w KiCad;
- oprogramowanie na uC napisane w cpp (projekt Atmel Studio);
- biblioteki sterowania LCD czy pilotem ze względu na optymalizację zawierają absolutne minimum funkcjonalności. Nie zawierają np. kodu inicjującego piny mikrokontrolera ponieważ operacja ta wykonywana jest jednorazowo w funkcji init();
- Niestety wyświetlacz LCD nie jest w 100% kompatybilny z OLED jeśli nie korzystamy z linii "READY". OLED wymaga dłuższych czasów podczas wysyłania rozkazów. Biblioteka, którą załączyłem obsługuje obydwa rodzaje, a czasy zostały dobrane eksperymentalnie.
Wnioski
- Nie wiem, dlaczego się uparłem na robienie tego na attiny.

- Sklejka brzozowa nawet po oszlifowaniu i polakierowaniu wygląda jak sklejka. Trochę żałuję, że nie pofornirowałem.
Wszystkie schematy, płytki PCB oraz kod źródłowy dodaję w załącznikach.



Cool? Ranking DIY