Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega328 - sterowanie jasnością 8 taśm LED

tom_ex 22 Paź 2015 13:14 1272 20
  • #1 22 Paź 2015 13:14
    tom_ex
    Poziom 15  

    Witam,

    Projektuje niewielki układ oparty o Atmegę 328. Jego zadaniem będzie płynne przygasanie/rozjaśnianie każdej z 8 krótkich taśm LED, aby wytworzyć coś w rodzaju efektu narastającej fali. Taśmy zasilane są napięciem 12V, uC 5V.

    Najprostszym rozwiązaniem byłoby wykorzystanie PWM i mosfetów, ale taśmy muszą działać niezależnie od siebie. Myślałem zatem o osobnym wielokanałowym kontrolerze PWM sterowanym np. przez I2C.

    Pytanie, czy nie ma prostszych rozwiązań? Zauważyłem dedykowane kontrolery taśm LED, ale ich cena bywa niekiedy bardzo dużo, tzn. ok 40 zł. Może znajdzie się coś tańszego? Może jakieś inne podejście?

    Dzięki za wszelką pomoc.

    0 20
  • #3 22 Paź 2015 13:28
    tom_ex
    Poziom 15  

    szczywronek napisał:
    Mega328 to dosyć "potężny" mikrokontroler jak na sterowanie diodami, co on ma jeszcze robić w tym projekcie?

    Zdaje sobie sprawę z tego faktu. To w tej chwili jedyny uC, który posiadam z PWM. Zostawmy to na razie. :)

    szczywronek napisał:
    Sygnały PWM można generować na piechotę - poczytaj o "programowym pwm".

    Wiem o tym, ale to też nie rozwiązanie. Dostaję więcej PWM'ów, ale mosfetów nadal 8.

    0
  • #4 22 Paź 2015 13:29
    excray
    Poziom 39  

    W zasadzie to już sam sobie odpowiedziałeś na własne pytanie. Możesz wykorzystać gotowy sterownik w stylu: SN3218A, TLC5940, SC620 czy ISL97677. Możesz zaopatrzyć sie w uC z większą ilością wyjść PWM, albo możesz zrealizować PWM programowo. Możesz też oczywiście zaopatrzyć się w inteligentne LEDy - WS2812.

    0
  • #5 22 Paź 2015 14:04
    tom_ex
    Poziom 15  

    excray napisał:
    W zasadzie to już sam sobie odpowiedziałeś na własne pytanie. Możesz wykorzystać gotowy sterownik w stylu: SN3218A, TLC5940, SC620 czy ISL97677. Możesz zaopatrzyć sie w uC z większą ilością wyjść PWM, albo możesz zrealizować PWM programowo. Możesz też oczywiście zaopatrzyć się w inteligentne LEDy - WS2812.


    No nie do końca. Moje pytanie brzmiało, czy nie da się tego zrobić prościej. Wielokanałowy kontroler PWM nadal wymusza konieczność 8 mosfetów.

    Inaczej zapytam - czy nie znacie konkretnego modelu sterownika LED sterowanego poprzez I2C z napięciem wyjściowym 12V? Oczywiście w przystępnej cenie.

    0
  • #6 22 Paź 2015 14:42
    tmf
    Moderator Mikrokontrolery Projektowanie

    Pomyśl - masz osiem taśm, na każdej ileśtam LEDów, załóżmy, że jeden pobiera jakieś 60 mA max, to już przy 10-LEDach daje 600 mA. Razy 8 daje to 4,8 A do przełączania. Myślisz, że są gotowce na takie prądy? Najprościej byłoby zastosować WS2812 - nie są istotnie droższe niż zwykłe LEDy, a łączysz je bezpośrednio z MCU i masz o wiele większe możliwości sterowania.

    0
  • #7 22 Paź 2015 14:57
    tom_ex
    Poziom 15  

    tmf napisał:
    Pomyśl - masz osiem taśm, na każdej ileśtam LEDów, załóżmy, że jeden pobiera jakieś 60 mA max, to już przy 10-LEDach daje 600 mA. Razy 8 daje to 4,8 A do przełączania.

    Nie jest tak źle. Przyznaję, w pierwszym poście nie byłem zbyt precyzyjny. Każda z taśm jest dość krótka tzn. ok. 6 ledów, 120 mA.
    Ok, mój błąd. 600mA nie będzie, ale na pewno znacznie więcej niż 120mA.

    0
  • #8 22 Paź 2015 16:38
    tmf
    Moderator Mikrokontrolery Projektowanie

    Przy tej ilości diod naprawdę weź WS2812B. Różnica w cenie w stosunku do zwykłej taśmy przy tych małych ilościach jest bez znaczenia. A jeśli musi być inaczej - kup tanie MOSFETy logic level w SOT23 i po sprawie. Prościej tego chyba nie zrobisz. ATMega spokojnie się wyrobi robiąc programowo 8 kanałów PWM.

    0
  • #9 22 Paź 2015 16:46
    tom_ex
    Poziom 15  

    tmf napisał:
    A jeśli musi być inaczej - kup tanie MOSFETy logic level w SOT23 i po sprawie. Prościej tego chyba nie zrobisz. ATMega spokojnie się wyrobi robiąc programowo 8 kanałów PWM.

    Dzięki, tak też zrobię.

    Co do uC, docelowo wykorzystam posiadany Attiny13. Z tego co wyczytałem, wystarczającą częstotliwością PWM do ledów jest 200 Hz, zatem też powinien się wyrobić.

    0
  • #11 22 Paź 2015 17:03
    tom_ex
    Poziom 15  

    szczywronek napisał:
    Wyrobić się wyrobi. Tylko nóżek nie starczy :)

    Haha, słusznie. :)

    0
  • #12 22 Paź 2015 17:04
    tmf
    Moderator Mikrokontrolery Projektowanie

    Bardziej bybym skłonny przyjąć jako dolną granicę 300-400 Hz. Przy niższych częstotliwościach czasami widać interferencję z innymi źródłami światła, np. lampami fluorescencyjnymi, ew. przy szybkich ruchach widać, że coś jest nie tak. Oczywiśćie i dla 400 Hz procek się wyrobi bez problemu. A ATTiny13 to chyba tylko do sterowania jednej taśmy (za mało pinów IO)?

    0
  • #13 22 Paź 2015 17:06
    tom_ex
    Poziom 15  

    Zastanawiam się, czy i tak nie będę wykorzystywać ekspandera, więc liczba pinów może nie być jednak problemem.

    0
  • #15 22 Paź 2015 21:30
    BlueDraco
    Specjalista - Mikrokontrolery

    Ekspander i PWM? Coś przestrzeliłeś. Czy jest jakiś istotny powód, dla którego nie chcesz do tego celu użyć mikrokontrolera z ośmioma wyjściami PWM? Płytkę z STM32F103 możesz kupić za 12 zł. 8 MOSFETśw w SOT23 to też nie majątek ani miejsca za dużo nie zajmą (np. moje ulubione IRLML6344).
    Inne dobre rozwiązanie to WS2812, jak już pisali Koledzy. Co prawda ATmega jest za wolna, żeby sensownie nimi sterować, ale do tak prostego zadania jak Twoje jakoś wystarczy.

    0
  • #16 22 Paź 2015 21:58
    tmf
    Moderator Mikrokontrolery Projektowanie

    BlueDraco napisał:
    Inne dobre rozwiązanie to WS2812, jak już pisali Koledzy. Co prawda ATmega jest za wolna, żeby sensownie nimi sterować, ale do tak prostego zadania jak Twoje jakoś wystarczy.


    Z tym to akurat się nie zgodzę. Wykorzystując USART bez problemu można sterować ilością tych diod ograniczoną tylko wymaganą częstotliwością odświeżania. Policzenie efektów też nie jest za bardzo obciążające, IMHO użyty procek nie odgrywa tu kompletnie roli.

    0
  • #17 22 Paź 2015 22:17
    BlueDraco
    Specjalista - Mikrokontrolery

    Jeśli dobrze liczę, UART musiałby pracować na 2.4 Mbit/s, czyli musimy w niego wepchnąć 240 KB/s. Na AVR przerwaniami tego nie popędzisz, czyli transmitujemy w pętli bez przerwań, a potem liczymy. Nawet trudnawo w tym złapać czas rzeczywisty.

    A ja będę miał na choince 576 szt. WS2812B. :)

    0
  • #18 22 Paź 2015 22:29
    tmf
    Moderator Mikrokontrolery Projektowanie

    Masz rację, że na na zwykłej ATMega będzie to upierdliwe, ale możliwe. Nie przeczę, że na innych prockach będzie to wygodniejsze.
    Ja w tym roku też robię oświetlenie na WS2812B, mam 50 metrów taśmy, popędzać to będzie XMEGA, tak jak tu opisałem:
    http://mikrokontrolery.blogspot.com/2011/03/Diody-WS2812B-sterowanie-XMega-cz-3.html
    tyle, że z dodatkowo 8 MB SDRAM na efekty. Może zrobimy jakiś mały konkurs?
    BTW, czym je planujesz zasilić? W twoim przypadku to 34 ampery, ja mam jeszcze więcej :) Póki co idzie to na zasilaczach z PC, ale na zewnątrz ich nie wystawię...

    0
  • #20 22 Paź 2015 22:59
    BlueDraco
    Specjalista - Mikrokontrolery

    Z zasilaniem nie jest tak źle - żeby nie oślepnąć w pomieszczeniu, używam jasności od 0 do 30 (powyżej nie daje się wytrzymać), a w animacjach świeci najwyżej 1/5 wszystkich diod. 288 diod zasilałem przez USB lub z ładowarki do telefonu, do 576 użyję zasilacza 3A.

    Efekty mam bardzo spokojne, bo nie lubię, jak mi coś za bardzo miga - błędne ogniki z modulacją świeczki, wspinające się i zjeżdżające robaczki, płynie rozjaśniające się i ścemniające punkciki i najbardziej dynamiczny - fajerwerki z "ogonami". Do tego antyaliasing i realistyczna kinematyka. Pędzę to z SPI bez DMA, tylko na przerwaniach, żeby nie marnować 3x więcej pamięci na zakodowane dane. Mam 100 ramek animacji na sekundę, wszystko liczone na bieżąco na STM32F0 lub F4.

    0
  • #21 22 Paź 2015 23:07
    tmf
    Moderator Mikrokontrolery Projektowanie

    Masz jakieś video? Chętnie bym zobaczył efekty, bo szukam inspiracji.
    Moja instalacja będzie na zewnątrz, stąd mocy dam trochę więcej. Z tym marnowaniem pamięci nie jest tak źle - można przekodować fragment i puścić przez DMA, a w tym czasie transkodować kolejny. Niemniej ja się zdecydowałem na inne rozwiązanie - skoro i tak mam pamięć zewnętrzną to czemu nie dać jej tyle, żeby nie trzeba było kombinować i dlatego mam 8 MB SDRAM :) Wystarczy na długie efekty, a po jednorazowym przeliczeniu i zapełneniu pamięci po prostu DMA będzie sobie to na około przerzucało przez UART do WSów.

    0