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

Sterownik pasków diodowych na WS281x

bizongod 09 Maj 2016 15:06 8310 13
  • Sterownik pasków diodowych na WS281x

    Dzień dobry!

    Chciałbym opisać mój projekt sterownika do układów WS281x, czyli coraz bardziej popularnych pasków diodowych (i nie tylko) z indywidualnie, szeregowo sterowanymi diodami.

    Do wykonania samego projektu skłoniła mnie potrzeba sterowania takimi paskami, które kupiłem u chińczyka. Materiały do urządzenia są wdrodze, stąd jeszcze dział DIY Początkujący/Niedokończone.

    Cechy sterownika:
    1) 2 kanały sterujące, umożliwiające sterowanie do 1024 diod z odświeżaniem 30fps każdy (w/g noty katalogowej WS2812B)
    2) komunikacja ze światem po USB i/lub RS485
    3) możliwość zapisania efektów w pamięci QSPI lub na karcie microSD
    4) zegar RTC z podtrzymywaniem bateryjnym
    5) sterowanie pilotem IR
    6) sterowanie trzema przyciskami
    7) możliwość podłączenia wyświetlacza OLED 0,96" lub 1,3"
    8) czujnik natężenia światła otoczenia
    9) mikrofon z przedwzmacniaczem
    10) wyjście przekaźnikowe do odłączania głównego zasilacza LED
    11) możliwość zasilania z pasków diodowych, USB lub zewnętrznego zasilacza 5V
    12) oparty na STM32L476RET6

    Rozwinięcie cech:
    1) Do wygenerowania odpowiednich przebiegów do sterowania WS281x (czyli zgodnie z ich notą katalogową) został wykorzystany sprzętowy interfejs SPI wraz z układem formującym na elementach RC i tranzystorze NPN.
    Sama idea jest oparta na pomyśle ze strony Link a rozwinięta o bufor ostatecznie kształtujący przebieg. Dodatkowo został dostosowany do sterowania napięciem 0/3,3V, wyjście 0/5V.

    Schemat z symulacji w spice oraz przebiegi:
    Sterownik pasków diodowych na WS281x Sterownik pasków diodowych na WS281x Sterownik pasków diodowych na WS281x





    2) Zastosowany mikrokontroler posiada sprzętowy interfejs USB, który można wykorzystać do komunikacji z PC. Szczegóły zależą już od oprogramowania. Może być to np klasa CDC, czyli emulacja portu szeregowego, lub tez MSC, czyli dostęp jak do dysku i zapis bezpośrednio efektów na kartę microSD lub pamięć QSPI. Jako alternatywny sposób zdalnego sterowania po kablu można użyć interfejsu RS485.

    3) Efekty mogą być zapisywane na karcie microSD lub pamięci QSPI, do wyboru.
    Karta microSD jest o tyle dobra, że można wgrać dane na komputerze.
    Natomiast alternatywą jest pamięć QSPI, czyli pamięć SPI, z tym, że przesył danych możliwy jest za pomocą 4 linii danych.
    Footprint na PCB umożliwia montaż zarówno układów w obudowie SO-8 208mil i WSON-8. Przykładowo pamięć S25FL256SAGNFI001 za niecałe 20zł oferuje 32MB przestrzeni. Oba typy pamięci również są sprzętowo obsługiwane przez zastosowany mikrokontroler. Możliwe jest zaimplementowanie FatFs w oprogramowaniu.
    Sterownik pasków diodowych na WS281x

    4) Ponownie, zaproponowany mikrokontroler posiada sprzętowy zegar RTC, który potrzebuje do działania jedynie kwarcu 32kHz, opcjonalnie potrzymywanie bateryjne. Umożliwia to wykonanie, np. zegara na wspomnianych diodach.

    5) Do sterowania na odległość możliwe jest użycie pilota na podczerwień.
    Sygnał IR odbierany jest za pomocą układu TSOP34836, po czym kierowany jest na timer skonfigurowany w trybie capture. AN3174
    Sterownik pasków diodowych na WS281x

    6) Lokalnie można sterować przewidzianymi do tego celu trzema przyciskami typu TACT, więcej opisu chyba nie trzeba. :D
    Sterownik pasków diodowych na WS281x

    7) Jako ciąg dalszy lokalnego interfejsu użytkownika przewidziany jest gotowy moduł wyświetlacza OLED. Pasuje zarówno tańszy model o przekątnej 0,96" jak i droższy 1,3". Sterowanie po I2C.
    Sterownik pasków diodowych na WS281x

    8) Układ umożliwia pomiar natężenia oświetlenia otoczenia. Do tego został wykorzystany fototranzystor TEPT4400, którego sygnał mierzony jest za pomocą wewnętrznego ADC mikrokontrolera. Możliwe jest przez to np. sterowanie jasnością diod w zależności od ilości światła w pomieszczeniu.
    Sterownik pasków diodowych na WS281x

    9) Jako kolejne "wejście" użyto mikrofonu, wraz z przedwzmacniaczem zrealizowanym na wzmacniaczu operacyjnym LMV321. Sygnał kierowany jest również na kanał ADC mikrokontrolera. Ta opcja umożliwia np. stworzenie kolorofonu. :)
    Sterownik pasków diodowych na WS281x

    10) W celu obniżenia poboru prądu w trybie "uśpienia" za pomocą wbudowanego przekaźnika możliwe jest odłączenie z sieci głównego zasilacza do diod. W ten sposób można wyeliminować jego straty "jałowe".
    Sterownik pasków diodowych na WS281x

    11) Sam sterownik jest zasilany napięciem 5V. Możliwy jest pobór prądu ze strony pasków diodowych, portu USB jak i zewnętrznego zasilacza. Każde wejście odseparowanie jest diodą.
    Sterownik pasków diodowych na WS281x

    12) STM32L476RET6 został wybrany, gdyż zawiera w sobie wszystkie potrzebne peryferia, głównie interfejsy QSPI, MMC/SD i USB. Dodatkowo ma sporo pamięci Flash i kosztuje koło 30zł.


    Kompletny schemat:
    Sterownik pasków diodowych na WS281x

    Płytka drukowana ma wymiary 5cm x 10cm. Layout PCB:
    Sterownik pasków diodowych na WS281x



    Szkielet oprogramowania, czyli wstępna konfiguracja peryferiów, sprawdzenie
    przypisania pinów itd. zostało zrobione w programie CubeMX.
    Sterownik pasków diodowych na WS281x

    Oprogramowanie planuje pisać w SW4STM32 od AC6, czyli gcc + Eclipse.
    Jako programatora/debuggera użyję płytki Nucleo.

    Aktualny stan projektu:
    1) Wykonany projekt schematu i PCB
    2) Zweryfikowane użycie wyprowadzeń i peryferiów mikrokontrolera
    3) Wygenerowany szkielet oprogramowania
    4) PCB zlecona do wykonania

    Wkrótce ciąg dalszy... :)

    Pozdrawiam,
    Karol

    PS. Zamówiłem kilka PCB więcej. Jeśli ktoś byłby zainteresowany proszę o PW :)


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • TermoPasty.pl
  • #2 10 Maj 2016 05:34
    rb401
    Poziom 34  

    bizongod napisał:
    Do wygenerowania odpowiednich przebiegów do sterowania WS281x (czyli zgodnie z ich notą katalogową) został wykorzystany sprzętowy interfejs SPI wraz z układem formującym na elementach RC i tranzystorze NPN.


    Tak się zastanawiam czy jest sens stosowania tego dodatkowego układu sprzętowego a nie istniejących rozwiązań programowych np. transmisji SPI z prędkością x3 i kodowanie na trójkach bitów lub innych koncepcji ( tak jak patrzę na tematy STM32 + WS2811 to widzę że raczej idzie się w koncepcję TIM+DMA+GPIO z możliwością jednoczesnego sterowania kilkoma paskami).
    Owszem, ten konwerter z SPI na tranzystorze ciekawy, oszczędza trochę pamięci i trochę upraszcza program, ale przy możliwościach i zasobach jakie posiada L476RE to wydaje się całkiem niepotrzebną komplikacją hardware.
    Szczególnie jeśli reszta projektu wydaję się być dość ambitna i ciekawa.

  • #3 10 Maj 2016 08:51
    bizongod
    Poziom 11  

    Witaj!
    Rozważałem różne warianty kodowania danych dla WS281x.
    Przy metodzie TIM+DMA+GPIO sterujesz na raz 16 lub ewentualnie 8
    pinów na raz (transfer DMA jest 1- lub 2-bajtowy). Wtedy albo blokuje się
    niektóre peryferia (czasem akurat to co jeszcze jest potrzebne), albo trzeba
    MCU o dużo większej liczbie pinów. Ponad to dochodzi poprzesuwanie bitów, co
    albo jest zrobione od razu przy danym efekcie w pamięci lub programowo w
    locie. Można też tu coś pokombinować, tylko czy warto..
    Przy sterowaniu SPI x3 (lub x4) dochodzi zwiększenie zużycia pamięci RAM
    x3 lub x4 oraz również zamiana kolejności bitów. Choć z drugiej strony L476RE ma
    akurat pamięci dużo :)
    Ja wybrałem rozwiązanie sprzętowe. Upraszcza ono oprogramowanie do zupełnego
    minimum. Nie ma co ukrywać, tranzystor i parę elementów RC to koszt prawie
    zerowy, a miejsca na PCB też było dość.
    Ponad to wydajność mikrokontrolera wole zostawić np. do FFT kolorofonu :)

    Pozdrawiam,
    Karol

  • TermoPasty.pl
  • #5 11 Maj 2016 02:48
    bizongod
    Poziom 11  

    No faktycznie.. No to mamy pierwszy błąd.
    Trzeba będzie jakoś drucikiem i nożykiem się poratować.
    Dzięki za informacje :)

    Pozdrawiam,
    Karol

  • #6 20 Maj 2016 02:42
    androot
    VIP Zasłużony dla elektroda

    Porównywałeś notę WS2811 i WS2812B? Są całkiem inne timingi. Dla 1 logicznej na magistrali dla WS2811 jest wypełnienie ok. 50% (czyli ten układ RC zadziała), a dla WS2812B 65% (czyli może być niepoprawnie dekodowany stan).

    Zmodernizowałem trochę ten układ:
    Sterownik pasków diodowych na WS281x Sterownik pasków diodowych na WS281x


    Zamiast schmitta jest układ na 2 tranzystorach, ale na to nie zwracaj uwagi.

  • #7 22 Maj 2016 15:31
    bizongod
    Poziom 11  

    Dzięki za analizę i propozycję rozbudowy :)

    Podczas projektowania zastanawiałem się nad tą kwestią i
    zgodnie z notą katalogową mamy:

    Code:
    T0H 0 code ,high voltage time 0.4us ±150ns
    
    T1H 1 code ,high voltage time 0.8us ±150ns
    T0L 0 code , low voltage time 0.85us ±150ns
    T1L 1 code ,low voltage time 0.45us ±150ns


    Logiczne 0 to dość prosta rzecz, natomiast dla
    logicznej 1 przyjmijmy korzystne wartości skrajne:
    T1H 1 code ,high voltage time 0.8us -150ns = 0.65us
    T1L 1 code ,low voltage time 0.45us +150ns = 0.6us
    Mamy więc wypełnienie 0,65us / (0,65us + 0,6us) = 52%
    Jest to wartość (jak sadzę) gwarantowana, przy jakiej
    transmisja będzie przebiegała prawidłowo.

    Z tego co w necie znalazłem, to te układy dość dobrze
    tolerują odchylenia od szybkości transmisji, więc mam
    nadzieję, że te 2% też zniosą.

    Spodziewam się, że w przyszłym tygodniu dotrą PCB, to się
    przekonam, puki co trudno osądzać, a dodatkowych wątpliwości
    dorzuca np. zapis w nocie katalogowej
    TH+TL=1.25µs±600ns
    , który nijak jest spójny z podanymi wcześniej danymi.

  • #8 26 Maj 2016 19:01
    bizongod
    Poziom 11  

    I oto przyszły płytki drukowane:

    Sterownik pasków diodowych na WS281x Sterownik pasków diodowych na WS281x

    A po niecałych dwóch godzinach roboty taki efekt:

    Sterownik pasków diodowych na WS281x

    I razem z wyświetlaczem OLED:
    Sterownik pasków diodowych na WS281x

    Niestety, jak słusznie zauważył kolega androot, trzeba było drutem zamienić
    linie SCK i MOSI:
    Sterownik pasków diodowych na WS281x

    Teraz czas na uruchamianie i oprogramowanie.

    cdn :)

    Pozdrawiam,
    Karol

  • #9 26 Maj 2016 20:10
    androot
    VIP Zasłużony dla elektroda

    bizongod napisał:

    Niestety, jak słusznie zauważył kolega androot, trzeba było drutem zamienić
    linie SCK i MOSI:


    Lepiej znaleźć błąd i go poprawić niż mieć ładne płytki i nie działający układ :)
    Z tymi czasami to wiem, że też powinno działać, ale nie lubię tak być na granicy.

  • #10 26 Maj 2016 23:11
    piwek1985
    Poziom 16  

    Wydaje mi się czy kolega lutował za pomocą pasty do lutowania rozpływowego? Jeśli tak to jakiej? Bo ja używam Amtecha NC-31 Sn42/Bi58

  • #11 27 Maj 2016 00:16
    bizongod
    Poziom 11  

    Nie, do małych ilości płytek używam
    topnik RMA7 + cyna ołowiowa + hot air

    I następuje ciąg dalszy:
    - MCU działa
    - OLED działa -> biblioteka u8glib
    - przekaźnik działa (no raczej ;) )
    - i najważniejsze - sterowanie WS2812B też działa :)
    - pilot działa, okazało się, że ten co mam jest w standardzie NEC ;)
    - DMA do wysyłania danych do diod działa
    - FatFs do pamięci QSPI działa, na razie testy na pamięci 8MB
    - USB działa
    - klasa CDC działa
    - klasa MSC z pamięcią QSPI działa
    - timer 'startujący' wysłanie ramki też działa

    Na dowód załączam filmik, nieco kiepskiej jakości, ale widać :)


    W międzyczasie zrobiłem zestaw do 'wyspy' na suficie,
    2x 240 diod :) I sterownik daje radę :)

    Sterownik pasków diodowych na WS281x
    Sterownik pasków diodowych na WS281x Sterownik pasków diodowych na WS281x Sterownik pasków diodowych na WS281x Sterownik pasków diodowych na WS281x Sterownik pasków diodowych na WS281x

    Teraz mam problem, żeby obie klasy działały jednocześnie.
    Może ktoś ma z tym doświadczenie?

  • #12 09 Cze 2016 00:11
    bizongod
    Poziom 11  

    Po kilku wieczorach spędzonych na zamontowaniu pasków i
    grzebaniu w oprogramowaniu urodziły się trzy pierwsze
    efekty, oto one:







    Załączam też aktualną wersję oprogramowania.
    Na razie nieco nabałaganione, ale z czasem.. :)

  • #13 21 Cze 2016 13:02
    mongoł2000
    Poziom 18  

    Co do STM32, to bardzo sprytnie można wykorzystać I2S + DMA do maksymalnie szybkiego sterowania taśmą. O ile SPI ma skokową predkośc wysyłania danych, to I2S ma prawie płynną co pozwala osiągnąć najlepszy możliwy efekt ustawiając czas samplowania jako czas trwania bitu w komunikacji dla WS281x :)

  • #14 21 Cze 2016 21:47
    bizongod
    Poziom 11  

    Użycie I2S na pewno by rozdzieliło zegary rdzenia i taktowania magistrali.
    Nie wiem/nie sprawdzałem natomiast na ile elastyczne jest ustawianie DMA i
    długości słowa w tym trybie.
    Na pewno użycie SPI+DMA jest super wygodne i proste - i działa :)