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.

Konwerter PWM -> analog -> WS281x

Marek_Ertew 22 Kwi 2017 12:36 6222 0
  • Konwerter PWM -> analog -> WS281x
    Konwerter powstał z potrzeby chwili. Po pozytywnych wrażeniach z taśmami RGB i systemem MiLight postanowiłem zaszaleć i kupiłem taśmę typu WS2811 12V. O ile sterowanie taśmą (uC + soft) nie stanowi dla mnie problemu, to niestety przejechałem się na pilocie. Poniższy projekt stanowi prowizoryczne obejście tego problemu. Oczywiście całość będzie działać z dowolnym sterownikiem taśm LED z wyjściem PWM, MiLight podaję jako przykład.

    Krótki wstęp teoretyczny:

    Spoiler:
    Ekosystem MiLight zawiera 3 podstawowe piloty:
    1. Mono / CCT - regulacja jasności i temperatury światła białego
    2. RGB / RGBW - wybór odcienia i jasności (bez nasycenia) lub jasności światła białego
    3. RGB + CCT - wybór temperatury i jasności światła białego lub odcienia i jasności RGB lub możliwość miksowania biały + RGB.

    Każdy pilot ma dedykowane odbiorniki (sterownik taśm LED i żarówki) jednak pewne kombinacje pomiędzy sterownikiem a pilotem są dozwolone. O ile odbiorniki RGB+CCT działają wyłącznie z pilotem 3, to eksperymenty pokazują że odbiorniki RGB i RGBW bezproblemowo działają z pilotami 2 i 3, a pilot 3 daje znacznie większe możliwości sterowania niż dedykowany pilot 2.

    Ponieważ ceny obu pilotów są zbliżone, wybrałem pilot który daje większe możliwości.


    Dlaczego nie użyję pilota MiLight i odbiornika 2.4GHz?
    W internecie krąży kilka niezależnych projektów opisujących protokół i schemat ramki danych w systemie MiLight. Większość z nich opiera się na Arduino (AVR) i układach radiowych nRF24L01. Niestety wszystkie projekty obsługują stary standard RGBW a nikomu jeszcze nie udało się rozszyfrować nowego protokołu RGB+CCT.
    Oczywiście w najbliższym czasie planuję zająć się hakowaniem tego nowego protokołu. Tymczasem stworzyłem obejście problemu w postaci tego konwertera. Urządzenie pobiera sygnał z wyjść sterownika RGB i przekazuje go dalej na taśmę RGB typu WS2811 lub WS2812.


    Zasada działania:
    -> Kontroler taśmy RGB posiada 3 wyjścia typu otwarty dren. Wraz z rezystorem 270Ω podciągającym do 5V tworzą 3 wyjścia zbliżone do standardu TTL.
    -> Rezystor 2k7 i kondensator 22µF tworzą prosty filtr dolnoprzepustowy wygładzający sygnał.
    -> Co kilkadziesiąt milisekund mikrokontroler odczytuje 3 sygnały analogowe i po niewielkiej obróbce wysyła je do układów WS281x umieszczonych na taśmie LED.




    Żeby taśma 'pikselowa' odróżniała się od klasycznej RGB, w każdym kroku sygnał jest przesuwany o jeden piksel dalej a odczytane wartości trafiają na początek taśmy. W połączeniu z opóźnieniem generowanym przez obwód RC daje to dodatkowy efekt dynamiczny.

    Oto schemat oraz kod programu, napisany na szybko w Arduino.

    Konwerter PWM -> analog -> WS281x



    Edytuj
    Kod: c
    Zaloguj się, aby zobaczyć kod



    Prezentacja prototypu:
    Konwerter PWM -> analog -> WS281x Konwerter PWM -> analog -> WS281x Konwerter PWM -> analog -> WS281x Konwerter PWM -> analog -> WS281x
    Oraz film demonstrujący działanie konwertera - porównanie z taśmą RGB i odbiornikiem RGBW.

    https://filmy.elektroda.pl/93_1492617607.mp4


    Możliwości rozwoju:
    -> Dodanie buforów wejściowych umożliwiających jednoczesne podłączenie do sterownika zwykłej taśmy RGB 12/24V i konwertera.
    -> Przeróbka programu tak by odczytywał wygnały PWM zamiast uśrednionych wartości analogowych.
    -> Dodanie odbiornika 2.4GHz i obsługi pilotów MiLight RGBW, a w przyszłości może RGB+CCT.
    -> Miniaturyzacja urządzenia i przesiadka na mniejszy mikroprocesor np. ATTiny85 na płytce Digispark lub Trinket.


    Ostatnią modyfikację chciałem wykonać ale odpuściłem ponieważ nie mam w zapasach gołego procesora ATTiny85 a płytka prototypowa którą dysponuję ma tylko jeden wolny kanał ADC (jeden zabiera reset, pozostałe dwa są zepsute przez rezystory i diody zenera przyłączone do USB).


    Fajne!