Sekwencyjny kierunkowskaz dynamiczny

Sekwencyjny kierunkowskaz dynamiczny
Pobierz PDF Download icon
Taki kierunkowskaz jest przez niektórych uważany za zbędny i nieładny gadżet, jednak pomijając sprawę gustu trzeba przyznać, że jego działanie przykuwa uwagę i przez to może się przyczynić do poprawy bezpieczeństwa na drodze, bo jeśli coś zwraca 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ą?. Rekomendacje: kierunkowskaz jest przeznaczony dla miłośników tuningu swoich pojazdów.

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ę).

Kolejnym pomysłem, który przyszedł mi do głowy było użycie typowego mikrokontrolera w funkcji elementu generującego przebieg PWM dla każdej z diod linijki świetlnej, co nie powinno stanowić większego problemu z punktu widzenia oprogramowania. Jednak i w tym wypadku do rozwiązania pozostaje kwestia stałoprądowego zasilania diod LED. Nawet, jeśli przyjąć, że rozwiązanie z tranzystorem MOSFET w funkcji elementu sterującego jest wystarczające, to problematycznym wydaje się umieszczenie 16 takich elementów (powiedzmy, że z tylu elementów będzie składała się nasza linijka świetlna) na małej płytce drukowanej, jakiej oczekiwalibyśmy dla urządzenia tego typu. Pozostało poszukać rozwiązania przeznaczonego specjalnie do takich aplikacji. Tutaj z pomocą przychodzi nam firma Macroblock, która jest producentem szeregu układów-sterowników diod LED. W naszym wypadku idealnym wydaje się być zastosowanie układu MBI5030, który jest 16-kanałowym, specjalizowanym sterownikiem diod LED, charakteryzującym się następującymi, wybranymi cechami funkcjonalnymi:

- 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.

Układ MBI5030 idealnie pasuje do naszych oczekiwań dostarczając rozwiązania „szytego na miarę”. Rozmieszczenie wyprowadzeń układu pokazano na rysunku 1, natomiast w tabeli 1 umieszczono ich szczegółowy opis. Tak, jak wspomniano we wstępie, układ MBI5030 jest swego rodzaju 16-bitowym rejestrem przesuwnym wyposażonym w 16 niezależnych źródeł prądowych oraz grupę wewnętrznych buforów danych, które przechowują nastawy PWM każdego ze źródeł. Schemat blokowy układu pokazano na rysunku 2.

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.

Nie będę w tym miejscu szczegółowo opisywał wszystkich możliwości układu MBI5030, ponieważ stosowne informacje znajdziemy w dokumentacji producenta, a domyślna konfiguracja jest wystarczająca na potrzeby większości zastosowań. Skupię się więc na wymienionych dwóch pierwszych zdarzeniach.

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.

Jak łatwo się domyślić, wyjście SDO służy do kaskadowego łączenia wielu układów MBI5030 tak, ja ma to miejsce w przypadku łączenia „zwykłych” rejestrów przesuwnych. Wejście GCLK, jak wspomniano wcześniej, jest wejściem zewnętrznego sygnału zegarowego generatora PWM (maksymalnie 30 MHz), dzięki któremu możliwe jest w ogóle generowanie przebiegów na wyjściach OUT15…OUT0 sterownika. Częstotliwość sygnału PWM na wyjściu każdego z kanałów obliczamy według wzoru FPWM=FGCLK/216 lub FPWM = FGCLK/212 zależnie od wybranej programowo (rejestr konfiguracyjny) rozdzielczości sygnału PWM (domyślnie 16 bitów). Wejście REXT służy do przyłączenia rezystora ustalającego prąd źródła prądowego każdego z wyjść (maksymalnie 90 mA przy 5 V lub 70 mA przy 3,3 V), którego wartość obliczamy ze wzoru IOUT=(14.213×G)/REXT, gdzie G jest współczynnikiem korekcyjnym (domyślnie równym 1) możliwym do ustawienia z poziomu rejestru konfiguracyjnego.

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).

Dla ustalonego rezystorem REXT prądu wyjściowego o natężeniu 50 mA/kanał odczytana wartość napięcia VDS wynosi ok. 0,8 V, co dla napięcia przewodzenia szeregu trzech diod LED rzędu 7,8 V daje napięcie zasilania diod LED wynoszące 8,6 V. Właśnie taka wartość została ustalona na wyjściu naszej przetwornicy, a do jej ustawienia służy dzielnik rezystorowy R2/R3, który określa wartość napięcia wyjściowego zgodnie ze wzorem VLED=0,8 V×(1+R2/R3). Oczywiście, bazując na nocie układu MBI5030, można by było przyjąć do obliczeń wyższą wartość napięcia VDS (maksymalnie 17 V), aby mieć większy zapas, jeśli chodzi o potrzebę zapewnienia stabilizacji prądu wyjściowego źródeł prądowych, jednak odbiłoby się to niekorzystnie na mocy traconej w układzie sterownika diod LED, a co za tym idzie, na ilości wydzielanego ciepła. W związku z powyższym przyjęto wartość napięcia wyjściowego przetwornicy równą 8,6 V. Warto także podkreślić, iż w projekcie zastosowano wysokiej jakości, markowe, ultra-jasne, pomarańczowe diody LED produkcji firmy Cree, które przy prądzie przewodzenia 50 mA osiągają światłość około 9000 mcd.

To tyle, jeśli chodzi o opis naszego urządzenia, w związku z czym pora na przedstawienie szczegółów implementacji programowej obsługi sterownika MBI5030. Na początek przedstawię zawartość niewielkiego pliku nagłówkowego związanego z obsługą przedmiotowego układu. Wspomniany kod zamieszczono na listingu 1. Dalej, na listingu 2 pokazano funkcję odpowiedzialną za wysłanie 16-bitowego słowa do układu MBI5030 z rozróżnieniem jego rodzaju z zakresu data latch lub global latch (o czym pisano wcześniej). Kolejna, funkcja służy do wysłania nastaw wszystkich 16 kanałów PWM sterownika LED, a którą to zaprezentowano na listingu 3. Jej argumentem jest wskaźnik do tablicy złożonej z 16 elementów 8-bitowych. Uważny Czytelnik zastanowi się w tym miejscu, dlaczego 8-bitowych, skoro rozdzielczość każdego kanału wynosi 16-bitów? Odpowiedź jest nader prosta. Celowo ograniczyłem rozdzielczość każdego kanału PWM, ponieważ 8-bitowa rozdzielczość zapewniająca 256 poziomów jasności diody LED jest moim zdaniem w zupełności wystarczająca w takim zastosowaniu. Poza tym, nie bez znaczenia jest fakt, że nasz niewielki mikrokontroler ATtiny10 ma wbudowaną niewielką pamięć RAM mieszczącą zaledwie 32 bajty, więc stosowanie tablicy 16-bitowej byłoby wręcz niemożliwe. Warto w tym miejscu podkreślić, iż funkcja z list. 3 nie uwzględnia tzw. korekcji Gamma, czyli korekcji jasności diody LED biorącej pod uwagę właściwość ludzkiego wzroku i nieliniowy sposób, w jaki ludzkie oko postrzega światło widzialne. W implementacji naszego urządzenia jest to praktycznie bez znaczenia, jednak dość często wymaga uwzględnienia, gdyż w przeciwnym wypadku przy małych poziomach jasności będziemy obserwowali znaczące różnice w jasności diody LED dla kolejnych wartości wypełnienia przebiegu PWM, zaś dla większych wartości praktyczny brak różnicy jasności. Aby uwzględnić korekcję Gamma należy liniowy ciąg wartości wejściowych (0…255) „przetworzyć” według następującej zależności (korzystamy tutaj z 16-bitowej rozdzielczości kanałów PWM)

fx=65535(x/255)^1/lambda, dla g=0,45.

Mikrokontrolery AVR mają zbyt małą moc obliczeniową, aby tego typu równania obliczać „w locie”, więc warto wygenerować stosowną tablicę wartości i bezpośrednio odczytywać potrzebne dane. Dla funkcji, jak wyżej przykładową tablicę zamieszczono na listingu 4. Aby została wspomniana korekta była wykonywana, funkcja przeznaczona do wysłania nastaw wszystkich 16 kanałów PWM sterownika LED wymaga modyfikacji – zmienioną funkcję pokazano na listingu 5.

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

Artykuł ukazał się w
Elektronika Praktyczna
listopad 2017
DO POBRANIA
Pobierz PDF Download icon

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik kwiecień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje kwiecień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna kwiecień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów