Sterownik 12×LED z interfejsem I2C

Sterownik 12×LED z interfejsem I2C

Minimoduł umożliwia sterowanie i kontrolowanie jasności do 12 LED (4×RGB) poprzez magistralę I2C. Pozwala na łatwe łączenie kilku modułów dla uzyskania łańcucha do 48 diod LED z indywidualną regulacją jasności każdej z nich.

Podstawowe parametry:
  • 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.

Rysunek 1. Schemat blokowy układu IS31FL3206

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.

Rysunek 2. Schemat ideowy modułu

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.

Rysunek 3. Schemat płytki PCB wraz z rozmieszczeniem elementów

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).

Listing 1. Wynik sprawdzenia obecności układu IS31FL3206 na magistrali I2C

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.

Listing 2. Skrypt testowy

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

Wykaz elementów:
Rezystory: (SMD0805, 1%)
  • R1: 2,2 kΩ
  • R2, R3: 4,7 kΩ
  • R4: 3,3 kΩ
  • R5: 100 kΩ
Kondensatory:
  • C1, C2: 0,1 µF SMD0805
  • CE1: 10 µF/10 V tantalowy SMD3216
Półprzewodniki:
  • LD PWR: dioda LED SMD0805
  • U1: IS31FL3206 (QFN20)
Inne:
  • 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
Artykuł ukazał się w
Elektronika Praktyczna
sierpień 2021
DO POBRANIA
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje marzec 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów