- umożliwia niezależne sterowanie do 12 LED w trybie prądowym (wspólna anoda),
- prąd wszystkich diod LED jest określany wartością tylko jednego rezystora,
- pozwala na indywidualną płynną regulację jasności metodą PWM,
- zmiany jasności następują dla wszystkich LED jednocześnie (bez chwilowych wyświetleń fałszywych kombinacji kolorów przy współpracy z diodami RGB).
Moduł zawiera specjalizowany kontroler LED typu IS31FL3206 firmy ISSI. Umożliwia on niezależne sterowanie do 12 LED w trybie prądowym, z indywidualną płynną regulacją jasności PWM. Prąd wszystkich LED określany jest wartością tylko jednego rezystora. Struktura wewnętrzna IS31FL3206 została pokazana na rysunku 1.
Komunikacja z układem odbywa się poprzez interfejs I2C z możliwością wyboru jednego z czterech adresów. Umożliwia to bezpośrednie sterowanie łańcuchem do 48 diod LED. Układ ma rejestry pośrednie, do których zapisywana jest indywidualna wartość PWM oraz rejestr odświeżania, co umożliwia jednoczesne zmiany jasności wszystkich LED, bez chwilowych wyświetleń fałszywych kombinacji kolorów przy współpracy z diodami RGB.
Budowa i działanie
Schemat modułu został pokazany na rysunku 2. Układ U1 steruje do 12 LED (w przypadku pasków lub diod RGB muszą mieć wspólne anody), prądem ustalonym poprzez wartość R4, zgodnie z uproszczonym wzorem I=76/R4. W modelu wynosi ok. 20 mA, a maksymalnie, dla R1=2 kΩ, może wynosić 38 mA dla każdej z LED. Prąd może zostać dodatkowo skalowany programowo ze współczynnikiem 1, 11:12, 9:19, 7:12.
Regulacja jasności odbywa się w 256 krokach z możliwością wyboru częstotliwości 3,6 kHz i 24 kHz. Wyjścia OUT1...12 pogrupowane są po 6 sygnałów (2×RGB) i wyprowadzone na złącza J1, J2 wraz z zasilaniem i magistralą I2C. Rozstaw złącz jest zgodny z płytkami prototypowymi. Dodatkowo magistrala dostępna jest na złączach I2C, I2C1 co ułatwia podłączenie modułu z zestawami uruchomieniowymi. Na złącze J2 wyprowadzony jest sygnał SDB (Shutdown) aktywny stanem niskim, wyłączający układ U1. Zwory A6C...A6F umożliwiają wybór jednego z czterech adresów bazowych magistrali I2C: 0x6C...0x6F, jednocześnie może być wlutowana tylko jedna zwora.
Montaż i uruchomienie
Moduł został zmontowany na dwustronnej płytce drukowanej, której schemat wraz z rozmieszczeniem elementów został pokazany na rysunku 3.
Konfiguracja układu odbywa się przez rejestry, których adresację i funkcję zestawiono w tabeli 1.
Pierwszym rejestrem, który należy zapisać jest Shutdown Reg (0x00), znaczenie bitów rejestru jest następujące:
D7...D1=0, bez znaczenia, D0: SSD=1 praca, SSD=0 programowe wyłączenie (shutdown);
Rejestry PWM (0x04...0x0F):
ustalają indywidualną wartość PWM (256 kroków) dla każdego wyjścia OUT1...OUT12;
Rejestr Update (0x13):
zapis wartości 0x00 aktualizuje stan wyjść OUT1...OUT12 zgodnie z wartościami zapisanymi w rejestrach 0x04...0x0F, 0x17...0x22;
Rejestr LED Control (0x17...0x22), określa krotność prądu LED:
D7, D6 = 0, bez znaczenia,
D5...D0:
0x10: Iout = Imax (R4),
0x11: Iout = 11/12 Imax,
0x12: Iout = 9/12 Imax,
0x13: Iout = 7/12 Imax,
0x00: Iout = 0;
Rejestr Global Control Reg (0x26):
D7...D1 = 0,
D0: G_EN = 0 praca, G_EN = 1 wyłączenie wszystkich LED;
Rejestr Out Frequency (0x27) określa częstotliwość PWM:
D7...D1 = 0,
D0: OFS = 0 - 24 kHz, OFS=1 – 3,6 kHz;
Rejestr Reset (0x2F):
zapis 0x00 przywraca wartości domyślne we wszystkich rejestrach układu.
Dla szybkiego sprawdzenia działania modułu można użyć Raspberry Pi i bibliotekę i2ctools. Przed podłączeniem modułu zwieramy sygnał SDB i VCC (złącze J2 pin 11 i 12) aktywując układ U1. Po wlutowaniu zwory adresowej (domyślnie A6C), poleceniem i2cdetect -y 1 sprawdzamy obecność układu na magistrali (listing 1).
pi@raspberrypi:~$ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: 03 -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- 41 -- -- -- -- -- -- -- 49 -- -- -- -- -- --
50: 50 51 52 53 54 55 56 57 -- -- -- -- -- -- -- --
60: 60 -- -- -- -- -- -- -- -- -- -- -- 6c -- -- 6f
70: 70 -- -- -- -- -- -- --
Do wyjść modułu należy podłączyć LED (anody do VCC, "+"). Prosty skrypt testowy FL3206.py dla Raspberry Pi, ustawi różną jasność świecenia każdej z LED i po pięciu sekundach wyłączy układ. Skrypt wymaga instalacji biblioteki smbus. Zawartość FL3206.sh została pokazana na listingu 2.
import smbus
import time
from time import sleep
print "\nIS31FL3206 LED Test"
# Get I2C bus
bus = smbus.SMBus(1)
# IS31FL3206 Reset
print "IS31FL3206 Reset"
bus.write_byte_data(0x6c, 0x2F, 0x00)
# IS31FL3206 0x6C config
print "IS31FL3206 Turn On"
bus.write_byte_data(0x6c, 0x00, 0x01)
# IS31FL3206 PWM Freq (24kHz)
print "IS31FL3206 PWM Freq 24kHz"
bus.write_byte_data(0x6c, 0x27, 0x00)
# IS31FL3206 Led1-12 PWM
print "IS31FL3206 PWM LED Set"
bus.write_byte_data(0x6c, 0x04, 0xFF)
bus.write_byte_data(0x6c, 0x05, 0x7F)
bus.write_byte_data(0x6c, 0x06, 0x3F)
bus.write_byte_data(0x6c, 0x07, 0x0F)
bus.write_byte_data(0x6c, 0x08, 0x88)
bus.write_byte_data(0x6c, 0x09, 0x44)
bus.write_byte_data(0x6c, 0x0A, 0x22)
bus.write_byte_data(0x6c, 0x0B, 0x11)
bus.write_byte_data(0x6c, 0x0C, 0x00)
bus.write_byte_data(0x6c, 0x0D, 0x20)
bus.write_byte_data(0x6c, 0x0E, 0x40)
bus.write_byte_data(0x6c, 0x0F, 0x80)
# IS31FL3206 Led1-12 CTRL (Iout=Imax)
print "IS31FL3206 LED Current Set Imax"
bus.write_byte_data(0x6c, 0x17, 0x10)
bus.write_byte_data(0x6c, 0x18, 0x10)
bus.write_byte_data(0x6c, 0x19, 0x10)
bus.write_byte_data(0x6c, 0x1A, 0x10)
bus.write_byte_data(0x6c, 0x1B, 0x10)
bus.write_byte_data(0x6c, 0x1C, 0x10)
bus.write_byte_data(0x6c, 0x1D, 0x10)
bus.write_byte_data(0x6c, 0x1E, 0x10)
bus.write_byte_data(0x6c, 0x1F, 0x10)
bus.write_byte_data(0x6c, 0x20, 0x10)
bus.write_byte_data(0x6c, 0x21, 0x10)
bus.write_byte_data(0x6c, 0x22, 0x10)
# IS31FL3206 Global CTRL (LEDxx = On)
print "IS31FL3206 LED Global On"
bus.write_byte_data(0x6c, 0x26, 0x00)
# IS31FL3206 Update
print "IS31FL3206 LED Update"
bus.write_byte_data(0x6c, 0x13, 0x00)
time.sleep(5)
# IS31FL3206 Reset
print "IS31FL3206 Reset"
bus.write_byte_data(0x6c, 0x2F, 0x00)
bus.close()
print"\nQuit\n"
Jeżeli wszystko działa poprawnie można układ zastosować we własnej aplikacji.
Adam Tatuś, EP
- R1: 2,2 kΩ
- R2, R3: 4,7 kΩ
- R4: 3,3 kΩ
- R5: 100 kΩ
- C1, C2: 0,1 µF SMD0805
- CE1: 10 µF/10 V tantalowy SMD3216
- LD PWR: dioda LED SMD0805
- U1: IS31FL3206 (QFN20)
- A6C, A6D, A6E, A6F: zwora SMD0402
- I2C: złącze EH 4 piny kątowe
- I2C1: złącze JST 1 mm 4 piny
- J1: listwa SIP 10 pinów, 2,54 mm
- J2: listwa SIP 12 pinów, 2,54 mm