W trakcie swojej długoletniej przygody z techniką mikroprocesorową wielokrotnie podejmowałem wyzwanie konstruowania urządzeń związanych z szeroko rozumianą motoryzacją. Przecież jakby na to nie patrzeć, jest to dziedzina, którą interesuje się niemal każdy i która to jest świetną platformą do implementacji różnego rodzaju nowinek technologicznych. Jedną z takich nowinek, choć słowo to może nie do końca jest tutaj na miejscu, jest stosowane przez jednego z czołowych producentów motoryzacyjnych, rozwiązanie nazywane kierunkowskazami dynamicznymi. Niby nic nadzwyczajnego i przez niektórych uważane za zbędny i nieładny gadżet, jednak pomijając sprawę gustu, o którym, jak mawia przysłowie „się nie dyskutuje”, trzeba przyznać, że przykuwa uwagę a to, z kolei, może się przyczynić do wymiernego wzrostu poziomu bezpieczeństwa, bo skoro coś przykuwa uwagę to trudno to przeoczyć. Mowa o kierunkowskazach, które złożone są z linijki diod LED, w której poszczególne diody są zaświecane sekwencyjnie tworząc „falę świetlną”.
Dla przyzwoitości należy wspomnieć, iż nie jest to rozwiązanie innowacyjne, ponieważ światła kierunkowskazu załączane w sposób sekwencyjny stosował na przełomie lat 60-tych i 70-tych ubiegłego wieku amerykański producent spod znaku Mercury w modelu Cougar oraz Ford w modelu Thunderbird. Co ciekawe, w tamtym okresie było to rozwiązanie czysto mechaniczne. Nie znosząc więc nudy, postanowiłem skonstruować takie urządzenie. Na rynku, który jak wiadomo nie znosi „próżni”, jest wiele ofert „przeróbki” oryginalnych kierunkowskazów na wersję sekwencyjną. Niestety, nie są one zbyt atrakcyjne cenowo. Pora na urządzenie niedrogie, proste w konstrukcji i uniwersalne w stosowaniu.
Trzeba przyznać, że rozwiązaniem, które na samym początku przyszło mi do głowy było zastosowanie typowego, szeregowego rejestru przesuwnego, taktowanego przebiegiem o ustalonej częstotliwości, którego wyjścia poprzez elementy kluczujące (dla przykładu tranzystory MOSFET) bezpośrednio sterowałyby diodami LED. Rozwiązanie bardzo proste, jednak problem w tym, że aby zapewnić odpowiednią widzialność kierunkowskazów należy zastosować diody LED mocy, a te z kolei wymagają do zasilania źródeł prądowych. Uniemożliwia to zasilanie diod LED wprost z dodatniego bieguna zasilania przez zwykłe tranzystory MOSFET, ponieważ w takim rozwiązaniu nie możemy zapewnić stałego prądu zasilającego diodę w miarę wzrostu temperatury jej struktury, co wcześniej czy później doprowadziłoby do jej zniszczenia. Inną sprawą jest fakt, że typowy rejestr przesuwny zapewniłby wyłącznie możliwość „zwykłego” zaświecania/gaszenia sterowanej diody nie pozwalając, dla przykładu, na kontrolowanie jasności jej świecenia w celu uzyskania bardziej realistycznego efektu „fali świetlnej” (dzięki zastosowaniu „płynnego” przechodzenia światła z diody na diodę).
- Wbudowany, 16-bitowy, szeregowy rejestr przesuwny.
- 16 wyjściowych źródeł stałoprądowych z regulacją PWM (maksymalny prąd 90 mA/kanał).
- 16- lub 12-bitowa rozdzielczość przebiegów PWM.
- Regulacja prądu wyjściowego za pomocą zewnętrznego rezystora REXT oraz programowo, przy użyciu rejestru konfiguracyjnego.
- Zastosowanie technologii scrambled-PWM, która zmniejsza zjawisko migotania, dzięki dzieleniu czasu załączenia kanału na wiele krótszych impulsów.
- Wbudowany mechanizm opóźnień między załączaniem poszczególnych wyjść dla zmniejszenia zjawiska udaru prądowego.
- Wykrywanie rozwarcia/zwarcia na każdym kanale LED.
- Wbudowane zabezpieczenie temperaturowe z funkcją alarmu.
- Niezależne wejście sygnału zegarowego generatora PWM.
- Napięcie zasilania 3…5 V.
Sterowanie pracą takiego układu, jak każdego rejestru przesuwnego, polega na podaniu na wejście danych SDI kolejnych bitów 16-bitowego słowa danych reprezentującego wartość wypełnienia kolejnego kanału PWM (począwszy od bitu MSB), a na wejście DCLK sygnału zegarowego o maksymalnej częstotliwości 30 MHz. W odróżnieniu jednak on „normalnego” rejestru przesuwnego wprowadzono tutaj dodatkowe wejście LE, którego zachowanie determinuje znaczenie przesłanego słowa. Stanem spoczynkowym wejścia LE jest logiczne „0”. Wystąpienie logicznej „1” na wejściu LE w zależności o czasu jej trwania (w taktach zegara sygnału DCLK) oraz miejsca jej wystąpienia (w odniesieniu do zakresu przesyłanych bitów) determinuje sposób zachowania się układu MBI5030. Dostępnych jest 5 możliwości:
- odebranie sygnału „data latch”,
- odebranie sygnału „global latch”,
- żądanie odczytu konfiguracji układu,
- zapis konfiguracji układu,
- odczyt rejestru błędów.
Zgodnie z tym, co napisano wcześniej, układ MBI5030 ma 16 kanałów PWM o rozdzielczości 16-bitowej, z czego wynika, że dla przesłania ustawień wszystkich kanałów jest konieczne przesłanie 16 słów 16-bitowych „zajmujących” 256 taktów zegara DCLK. Aby umożliwić jednoczesną zmianę ustawień wszystkich kanałów PWM sterownik MBI5030 wyposażono w grupę 16 wewnętrznych buforów danych, które przechowują ustawienie każdego z kanałów PWM. Przesłaniu nastaw PWM kanałów OUT15 do OUT1 powinien towarzyszyć sygnał data latch, który powoduje każdorazowe przepisanie wartości rejestru przesuwnego do odpowiedniego bufora danych, a przesłaniu nastaw PWM kanału OUT0 powinien towarzyszyć sygnał global latch, który powoduje przepisanie wartości rejestru przesuwnego do bufora danych kanału OUT0 i przepisanie wartości wszystkich buforów danych do rejestrów sterujących generatora PWM, a co za tym idzie – wprowadzenie „w życie” przesłanych ustawień. W ten sposób zmiana ustawień wszystkich kanałów PWM następuje w jednej chwili, nie licząc automatycznego mechanizmu opóźnień między załączaniem poszczególnych wyjść. Przebiegi sygnałów sterujących dla przypadku data latch i global latch pokazano na rysunku 3.
To tyle, jeśli chodzi o niezbędny opis naszego sterownika LED. Pora na przedstawienie schematu urządzenia, który to pokazano na rysunku 4. Jest to nieskomplikowany system mikroprocesorowy, którego „sercem” jest mikrokontroler ATtiny10 w 6-wyprowadzeniowej obudowie SOT-23. Jest on odpowiedzialny za sterowanie pracą układu MBI5030, w tym dostarczając zewnętrznego sygnału taktującego generator PWM (wyjście CLKO mikrokontrolera) o częstotliwości GCLK=8 MHz, co zapewnia uzyskanie przebiegu PWM o częstotliwości ok.122 Hz. Generowanie przebiegu na wyjściu CLKO jest możliwe po ustawieniu odpowiedniego bitu konfigurującego mikrokontrolera.
Słowo komentarza należy się sekcji zasilania, której budowa, z uwagi na dość duży sumaryczny prąd diod LED (rzędu 0,8 A) wymagała gruntownego przemyślenia. Ostatecznie zdecydowałem się na rozdzielenie napięcia zasilania mikrokontrolera i sterownika MBI5030 (w naszym wypadku 5 V) od napięcia zasilającego diody LED VLED. Pierwszy z zasilaczy, z uwagi na niewielki pobór mocy, wykonałem przy użyciu zwykłego stabilizatora liniowego serii 78M05 w jego typowej aplikacji, która nie wymaga komentarza. Drugi, czyli ten o stosunkowo dużym prądzie wyjściowym, wykonałem z zastosowaniem scalonej przetwornicy step-down pod postacią układu A8498 firmy Allegro MicroSystems w jego typowej aplikacji. Zastosowanie takiego rozwiązania pozwoliło na osiągnięcie wysokiej sprawności (rzędu 86%) a co za tym idzie niewielkich strat mocy w postaci wydzielanego ciepła. Pewnej uwagi wymagał jednak dobór wartości napięcia wyjściowego tej części zasilacza, jako że jest to napięcie zasilające grupę diod LED. Dobór wartości tegoż napięcia najlepiej ilustruje rysunek 5. Wynika z niego, że wartość napięcia zasilającego diody LED obliczamy ze wzoru VLED=VDS+Vf+VDrop, gdzie:
- VDS – minimalne napięcie na wyjściu układu MBI5030 zapewniające stabilizację prądu wyjściowego, odczytane z charakterystyki VDS = f(IOUT).
- Vf – napięcie przewodzenia zastosowanych diod LED.
- VDrop – spadek napięcia na dodatkowym elemencie ograniczającym prąd (rezystor lub dioda Zenera, w naszym przypadku równy 0).
fx=65535(x/255)^1/lambda, dla g=0,45.
Na koniec przedstawię zawartość funkcji main(), która oprócz ustawienia właściwości zasobów sprzętowych mikrokontrolera, jak porty wejścia/wyjścia czy preskaler zegara taktującego, odpowiedzialna jest wyłącznie za generowanie efektu „fali świetlnej”. Efekt taki uzyskano zwiększając wartość wypełnienia przebiegu PWM dla kolejnych kanałów sterownika MBI5030 w taki sposób, że wypełnienie kanału n+1 zwiększane jest od momentu, gdy wypełnienie kanału n osiąga poziom równy 25% (dobrany eksperymentalnie). Czas pomiędzy poszczególnymi krokami regulacji dobrano w taki sposób by cały proces przebiegu „fali świetlnej” zajmował około 0,8 sekundy. Funkcję main pokazano na listingu 6.
Schemat montażowy sekwencyjnych kierunkowskazów pokazano na rysunku 6. Zaprojektowano zwarty, dwustronny obwód drukowany przeznaczony do montażu powierzchniowego. Z uwagi na dość duży prąd szczytowy przetwornicy zasilającej diody LED mocy zadbano o odpowiednie prowadzenie sygnałów krytycznych oraz masy zasilania. Warto podkreślić, iż nieodpowiednie prowadzenie ścieżek zasilających anody diod LED mogłoby doprowadzić do powstania dość dużych indukcyjności pasożytniczych, co przy sterowaniu PWM w konsekwencji doprowadziłoby do powstawania przepięć mogących uszkodzić sterownik MBI5030. Dociekliwym Czytelnikom polecam lekturę dokumentacji firmy Macroblock opatrzoną tytułem „Application note for 8-bit and 16-bit LED Drivers – Overshoot”. Montaż rozpoczynamy od przylutowania wszystkich diod LED oraz kondensatora C3 od strony BOTTOM obwodu drukowanego. Następnie przechodzimy na stronę TOP, gdzie w pierwszej kolejności montujemy wszystkie półprzewodniki. Pewnej uwagi jak i wprawy wymaga wlutowywanie układu sterownika diod LED MBI5030 z powodu dość dużego zagęszczenia jego wyprowadzeń. Najłatwiejszym sposobem montażu takich elementów jednocześnie niewymagającym posiadania specjalistycznego sprzętu jest użycie typowej stacji lutowniczej, dobrej jakości cyny z odpowiednią ilością topnika oraz cienkiej plecionki rozlutowniczej, która umożliwi usunięcie nadmiaru cyny spomiędzy wyprowadzeń. Jakość montażu sprawdzamy pod lupą korzystając z miernika pozwalającego sprawdzić ciągłość połączeń. Wspomniana kontrola będzie znacznie łatwiejsza, jeśli zmontowana płytkę sterownika przemyjemy alkoholem izopropylowym. Następnie montujemy kondensatory ceramiczne i rezystory, kondensatory elektrolityczne, a na samym końcu dławik L1.
Poprawnie zmontowany z użyciem zaprogramowanego mikrokontrolera kierunkowskaz nie wymaga jakichkolwiek regulacji i powinien działać tuż po włączeniu zasilania. Warto jednak podkreślić, że programowanie mikrokontrolera naszego urządzenia wymaga zachowania stosownej kolejności wykonywanych czynności. W pierwszej kolejności należy zaprogramować pamięć Flash mikrokontrolera a dopiero później ustawić bity konfiguracyjne. Wynika to z faktu, iż po ich ustawieniu zostanie zablokowane wejście RESET mikrokontrolera niezbędne przy programowaniu za pomocą programatora ISP. Na fotografii 7 przedstawiono wygląd zmontowanej płytki drukowanej urządzenia widzianej od góry, a na fotografii 8 od spodu.
Robert Wołgajew, EP