Przedstawiam projekt wyświetlacza zrealizowanego na 64 diodach SMD, sterowanych mikrokontrolerem Atmega64A. Już wcześniej miałem okazję budować podobne konstrukcje, więc bazując na doświadczeniach i wadach rozwiązań poprzednio zastosowanych, starałem się, aby ta wersja była mocno dopieszczona.
Poprzednie wersje
Pierwsza wersja powstała na płytce uniwersalnej z użyciem diod przewlekanych, dyfuzyjnych. Z uwagi na raster płytki, odległość między diodami wynosiła 2,54 mm, co przekładało się na `przerwy` między okręgami. Ponadto diody były zwykłe (z taniej półki), więc w świetle dnia świeciły słabo, jednak z uwagi na matowe obudowy jakość światła była dobra.
Kolejna wersja oparta była już o własnoręcznie zaprojektowane PCB (zmniejszyłem przerwy), jednak i tak efekt nie był zadowalający. Zastosowane ultrajasne diody wcale nie były rozwiązaniem problemu - ich przezroczyste obudowy sprawiały, że najlepszy kąt świecenia był podczas patrzenia na wprost, ponadto światło ze świecącej diody odbijało się w sąsiednich.
Obecna wersja – szczegóły techniczne
Obecna wersja jest oparta na diodach SMD – są to bardzo jasne diody, kąt świecenia jest niemal 180”. Z uwagi na ich rozmiar przerwy między diodami zostały ograniczone prawie do minimum, co przy zapaleniu wszystkich diod daje wrażenie zapalonego całego koła, a nie współśrodkowych okręgów (tak ma być).
Zatrzaski zamiast rejestrów przesuwnych
Kolejnym nowatorskim (mojego autorstwa) pomysłem jest sterowanie diod poprzez zatrzaski 574. Wszystkie zatrzaski mają wspólne wejścia, a dane zatrzaskuje się w porcjach po 8 bitów (a nie po 1, jak w przypadku zastosowania rejestru przesuwnego 595). Natomiast ich zbocza zegarowe są sterowane rejestrem przesuwnym 595. Takie połączenie diod angażuje jedynie 10 wyjść mikrokontrolera, ponadto w przypadku chęci połączenia większej liczby diod ilość wyprowadzeń pozostaje taka sama. Gdyby do sterowania diod użyć rejestrów przesuwnych 595, ustawienie stanu na wszystkich diodach wymagałoby 64 przesunięć, a tak jest dużo mniej wymaganych rozkazów.
Diody i ich nowatorskie połączenie
Prąd diod ograniczony jest przez rezystory 180R, co daje ok. 16 mA. Gdyby wszystkie były zapalone, pobierałyby z zatrzasku prąd 8 * 16 = 128 mA, co mogłoby go uszkodzić (maksymalny dozwolony sumaryczny prąd 80mA). Połączenie połowy diod w jedną stronę, a połowy w drugą w obrębie jednego zatrzasku sprawia, że przy wszystkich zapalonych diodach 64 mA wypływa z zatrzasku przez VCC, a drugie 64 mA wpływa przez GND. Minusem jest zapalanie części diod innym stanem logicznym, co jednak można łatwo `przełknąć`- wystarczy operacja XOR przed wystawieniem danych przez mikrokontroler.
Silnik
Kluczowym elementem jest silnik – pochodzi z dysku twardego (trójfazowy bezszczczotkowiec – BLDC). Sterowanie takim silnikiem wymaga generowania trzech pseudosinusoid, przesuniętych w fazie o 120 stopni. Niestety takie naiwne podejście jest niewystarczające, gdyż przy każdym oporze silnik będzie gubił kroki – potrzebna jest informacja zwrotna na temat położenia wirnika. Można to realizować albo poprzez czujniki Halla, albo poprzez analizę napięcia na trzecim, nieaktywnym w danym cyklu uzwojeniu (tzw. back EMF).
Do sterowania dyskiem wystarcza tani układ TDA5144 – niepotrzebne są żadne zewnętrzne komponenty oprócz paru kondensatorów. Jest on funkcjonalnie identyczny z układem TDA5140A, ale posiada podwyższony maksymalny prąd (do 2 A).
Układ ten spełnia swoje zadanie rewelacyjnie – silnik obraca się bardzo szybko i ma ogromny moment obrotowy, niczym kolarz startujący w wyścigu Tour de France.
Za analizowanie położenia śmigła odpowiada fototranzystor ze świecącą na niego ciągle diodą podczerwoną. Jest ona przysłaniana przez metalową blaszkę (umocowaną do konstrukcji), gdy śmigło przechodzi w pionowym położeniu.
Zasilanie
Jedną z największych trudności przy tego typu konstrukcjach jest dostarczenie zasilania do wirującego śmigła. Najprostszy wariant polega na zamocowaniu baterii, która jednak zwiększa jego masę, a ponadto wymaga ciągłej wymiany.
Innym (teoretycznie najlepszym) rozwiązaniem jest przekazywanie prądu przez indukcję – np. za sprawą umocowanej na śmigle zwojnicy, w której indukuje się prąd podczas obrotów w zmiennym polu magnetycznym (magnesy przymocowane do konstrukcji). Tego typu rozwiązaniem nigdy wcześniej się nie zajmowałem, ale wątpię, aby potrafiło wytworzyć ok. 1000 mA prądu, potrzebnego do działania układu.
Zastosowanym przeze mnie rozwiązaniem jest przekazywanie energii poprzez metalowe blaszki, ocierające się o izolowany korpus silnika (szczotki). Konstrukcja silnika owinięta jest taśmą izolacyjną, na którą nawinięty jest metalowy paseczek, o który ociera się blaszka.
Przez dłuższy czas zastanawiałem się, z czego wykonać owy paseczek, aby:
• był odporny na ścieranie,
• można było go łatwo skleić w kształt pierścienia,
• w łatwy sposób dało się doczepić do niego drucik, z którym połączymy zasilanie na śmigle.
Wcześniej myślałem o wykorzystaniu folii aluminiowej, jednak jest ona łatwościeralna, a przylutowanie się do niej bez specjalnego topika nie jest możliwe. Dziś dostałem olśnienia – w tej sytuacji rewelacyjnie sprawia się pasek miedzianej plecionki, używanej do rozlutowywania. Można bez problemu zlutować jej końce w pierścień czy przylutować kabelek.
Drugi biegun energii (masa) z reguły można doprowadzić w prosty sposób korzystając z tego, że silnik jest metalowy, a wirnik ma stały kontakt ze statorem (przez łożyska). Stator ma więc galwaniczny kontakt z wirnikiem. Jednak w tym modelu silnika widocznie zastosowano izolujący smar, gdyż połączenia nie ma. Wymusiło to konieczność zainstalowania takiego samego rozwiązania dla masy jak dla VCC (druga szczotka).
Pozostałe podzespoły
Na śmigle zainstalowany jest mocny kondensator (1000 uF) niwelujący chwilowe przerwy w dostawie prądu (słaby kontakt blaszki). Znajdziemy też odbiornik podczerwieni – wykorzystywany do przesyłania komend do śmigła (np. zmiana wyświetlanego obrazu) oraz zegar czasu rzeczywistego (PCF8563), aby aktualny można było pobierać z niego bieżący czas (przy wyświetlaniu aktualnej godziny).
Wyważenie śmigła
Śmigło powinno być doskonale wyważone – tzn. jego masa równo rozłożona względem środka. Środek został tak dobrany, aby leżał na najniżej położonej diodzie, dzięki czemu można wyświetlać obraz będący idealnym kołem. Ponieważ od strony diod śmigło jest znacznie dłuższe niż po przeciwnej stronie, konieczne było jego dociążenie z krótszej strony – przymocowana została ciężka blaszka (zbyt ciężka), której rozmiar stopniowo zmniejszałem, wiercąc w niej otwory. Efektem jest idealnie wyważone śmigło, które przy dużych obrotach (2300/min) nie wpada w żadne wibracje. Testy wyważenia polegały na wyrobieniu na środku śmigła malutkiego wgłębienia, po czym umieszczeniu go na igle w tym wgłębieniu. Celem była likwidacja przechyłu w jakąkolwiek stronę.
Drewniana obudowa
Kluczowym elementem jest też drewniana konstrukcja całości, zapewniająca ochronę przed przypadkowym dotknięciem oraz nadająca estetyczny kształt. Jej wykonanie (z paneli podłogowych) zajęło mi cały bity dzień. Ponadto umiejscowienie śmigła w delikatnej wnęce sprawia, że nawet w bardzo jasnym świetle całość wyświetla bardzo dobrze widoczny obraz. Z przodu przed przypadkowym dotykiem ochrania szybka z pleksi.
Tytułem podsumowania...
Szczerze muszę przyznać, że jest to pierwsza konstrukcja w moim wykonaniu w oparciu o elementy SMD i z przyjemnością stwierdzam, że ich montaż w porównaniu do przewlekanych odpowiedników jest przyjemnością, chociażby za sprawą braku konieczności wiercenia otworów. Najwięcej problemów sprawiło przylutowanie Atmegi64A z uwagi na gęsty raster wyprowadzeń. Nigdy wcześniej nie miałem też do czynienia z tym procesorem. Dla chcących pójść moją ścieżką podpowiem, że do programowania zamiast linii MISO/MOSI wykorzystujemy PDO/PDI. Ponadto konieczne jest wykasowanie fusebitu ATmega103 Compatibility Mode Selected by a Fuse, gdyż z nim mikrokontroler zachowuje się dość dziwacznie.
Samo PCB zostało wykonane metodą termotransferu (laminarka). Atmega64A została wybrana jedynie z powodu dużej liczby pamięci Flash (możliwość zapisania sporej ilości grafik) oraz RAM (bufor ekranu). Co do liczby wymaganych wyprowadzeń - śmiem twierdzić, że z powodzeniem podołałaby Atmega8.
Całość (silnik razem z diodami) pobiera ok. 2 A prądu, dlatego zmuszony byłem zastosować mocny i wydajny zasilacz 9 V 4A. Motorek rozpędza się do prędkości ok. 2200 obrotów / minutę, jednak po parunastu sekundach zwalnia na chwilę, potem przyspiesza, zwalnia. Trochę zdziwiony myślałem, że może silnik się przegrzewa, jednak po minucie pracy silnik jest naprawdę ledwo ciepły, natomiast układ TDA5144.. parzy. Koniecznością okazało się zainstalowanie na nim radiatora odprowadzającego ciepło. Po tej operacji układ steruje silnikiem dość stabilnie.
Jedyny problem z tym silnikiem jest taki, że jego ilość obrotów nie jest ograniczona od góry konstrukcją silnika do okrągłej liczby (jak np. w silnikach synchronicznych), lecz ograniczają ją po prostu opory powietrza. Przekłada się to na fakt, że obroty silnika oscylują w granicach 2200 (czasem jest 2190, czasem 2210). Nie jest to zjawisko korzystne dla wyświetlacza, gdyż przez to okres obrotu nie jest stały i obraz delikatnie drga. Mój pierwszy wyświetlacz zbudowany na silniku pompki od pralki (z uzwojeniem zwartym) osiągał maksymalne obroty 1200 i było to równiutko tyle.
Całość sterowana jest własnoręcznie opracowanym pilotem opartym na Attiny13 (4 przyciski).
Fajne? Ranking DIY