Moduł DALI wykorzystujący mikrokontroler LPC1112

Kontrola minimalnego i maksymalnego poziomu mocy

Zaprogramowanie poziomu minimalnego powyżej lub maksymalnego poniżej rzeczywistego poziomu mocy ustawi nowy poziom minimalny lub maksymalny na zadaną wartość. Programowanie minimalnego poziomu poniżej lub maksymalnego powyżej rzeczywistego poziomu mocy nie zmieni faktycznej mocy łuku.

Wymuszenie poziomu poniżej poziomu minimalnego lub powyżej maksymalnego spowoduje, że statecznik będzie pracował na poziomie minimalnym lub maksymalnym.

Poziomy mocy ‘0’ i ‘255’ pozostaną niezależne od minimalnego i maksymalne poziomu.

Czas zanikania i tempo zanikania

Niektóre rozkazy kontroli mocy korzystają z rzeczywistego czasu przejścia, by zmienić jasność do wymaganego poziomu. Stała czasu przejścia może przyjmować wartości od 0 do 15, co przekłada się na określone czasy w sekundach (rysunek 3).

Niektóre rozkazy kontroli mocy korzystają z czasu przejścia, by w ciągu 200 ms zmienić jasność do nowego poziomu. Stała tempa zanikania może przyjmować wartości od 1 do 15, co odpowiada określonej liczbie zmian poziomów w ciągu sekundy (rysunek 3).

Rys. 3. Czas zanikania i tempo zanikania

Rys. 3. Czas zanikania i tempo zanikania

 

Sceny od 1 do 16

Stateczniki mogą mieć 16 predefiniowanych poziomów oświetlenia (przechowywanych w pamięci Flash / EEPROM) nazywanych scenami (scenes). Rozkaz GO TO SCENE jest wykorzystywany do przejścia do poziomu mocy statecznika przechowywanego w scenie od 1 do 16 z wykorzystaniem obecnego czasu przejścia. Jeśli statecznik nie należy do sceny, poziom mocy lampy pozostaje niezmieniony. Jeśli lampa jest wyłączona, ta komenda ją zapali.

Warstwa fizyczna statecznika z mikrokontrolerem LPC1112

Opisana tu jednostka podrzędna DALI oparta jest na mikrokontrolerze NXP LPC1112 z rdzeniem ARM Cortex M0 (rysunek 4). Komunikacja pomiędzy statecznikiem a światem zewnętrznym odbywa się za pomocą tylko dwóch sygnałów (Tx oraz Rx), co pozwala statecznikowi na dwukierunkową komunikację z siecią systemu DALI. Optyczny interfejs cyfrowy zapewnia skuteczną izolację wysokiego napięcia pomiędzy wejściami DALI a stopniem wyjściowym lampy.

Rys. 4. Uproszczony schemat blokowy modułu <em>slave</em> DALI” src=”/wp-content/uploads/artykuly/Modul_DALI_wykorzystujacy_mikrokontroler_LPC1112/rys4_4.do_artykulow.png”></a></p>
<p style=Rys. 4. Uproszczony schemat blokowy modułu slave DALI

 

Mikrokontroler wykorzystuje licznik CT32B i wyjście układu do generacji sygnał PWM o zmiennym cyklu pracy, który reprezentuje natężenie światła lampy. Sygnał PWN jest doprowadzany do kontrolera UBA2014, by zmienić natężenie światła. Do odbioru komend DALI wykorzystywany jest licznik ogólnego przeznaczenia CT32B0 i wejście CAP0 (P1.5). Pin CAP0 jest również dołączony do pinu P2.6. Jest to potrzebne do programowego wykrywania zbocza (narastającego/opadającego). Przy wysyłaniu ramki zwrotnej przez moduł podrzędny DALI także wykorzystywany jest licznik CT32B0 kontrolujący wyprowadzenie ogólnego przeznaczenia P2.0, gdy DALI wysyła sygnał.

W tym przykładowym zastosowaniu, LPC1112 pracuje z zegarem 2 MHz, uzyskanym z wbudowanego oscylatora RC 12 MHz. Jeśli nie trwa aktywna komunikacja DALI, LPC1112 przejdzie w tryb uśpienia. W tej sytuacji średni pobór prądu jest mniejszy, niż 1,3 mA.

Oprogramowanie statecznika

Wysyłanie i odbieranie ramek  DALI zostało zaimplementowane w pliku dali_drv.c. Implementacja komunikacji używa przerwań od licznika Timer0. Przesłanie pojedynczego bitu wymaga dwóch przerwań. Logiczne ‘1’ jest wysyłane poprzez wymuszenie stanu niskiego na linii w jednym okresie, a następnie wysokiego w następnym okresie. Przy przesyłaniu ‘0’ jest dokładnie przeciwnie. Znacznik pozycji wykorzystywany do śledzenia transmisji informuje, który bit jest aktualnie transmitowany.

Dekodowanie odebranych wiadomości DALI jest realizowane poprzez wykrywanie zboczy sygnału i mierzenie czasu pomiędzy nimi. Używając licznika układu LPC1112 jest to łatwe do osiągnięcia, ponieważ wyprowadzenie licznika potrafi wygenerować przerwanie zarówno przy narastającym, jak i opadającym zboczu. Nie występują oddzielne przerwania dla narastających i opadających zboczy, jak również nie jest możliwe odczytanie poziomu logicznego na wyprowadzeniu wejściowym. Z tego powodu wejście jest również dołączone do pinu GPIO.

Przykładowe oprogramowanie modułu podrzędnego DALI zostało napisane w języku C i skompilowane przy użyciu darmowej wersji demonstracyjnej Keil uVision (ARM7 RealView, 4.12).  Struktura oprogramowania jest następująca:

  • Inicjalizacja: dla mikrokontrolera LPC1112 użyte zostały standardowe kody konfiguracyjne środowiska Keil (CCLK = IRC / 6 = 2 MHz) – startup_LPC11xx.s i system_LPC11xx.c
  • Stos modułów slave DALI:
    • Sterownik DALI: wykorzystuje Timer0 do wysyłania ramek nadawczych i odbioru ramek zwrotnych (plik dali_drv.c).
    • Rozkazy DALI: do dekodowania i wykonania otrzymanych rozkazów DALI (plik dali_cmd.c)
  • Aplikacja:
    • Program główny: zarządza trybem uśpienia, sprawdza i zeruje flagi zdarzeń transmisji DALI oraz inicjuje akcje (plik main.c)
    • Statecznik: zmienia poziomy przyciemnienia, przelicza wymaganą jasność oświetlenia lampy na współczynnik wypełnienia PWM. Wykorzystuje licznik SysTick Timer i CT32B1 do generacji sygnału wyjściowego PWM (plik ballast.c).
    • Flash: zajmuje się przechowywaniem parametrów jednostki podrzędnej DALI, takich jak maksymalne/minimalne poziomy światła, adresy i sceny (plik flash.c).

Artykuł opracowano na podstawie noty aplikacyjnej AN10960 firmy NXP.

Do pobrania

O autorze