- 16 kanałów PWM z wyjściami typu OD o rozdzielczości 8 bitów,
- obciążalność każdego GPIO do 100 mA oraz sumaryczny prąd zasilania aż 1,6 A,
- możliwość pracy z napięciem do 40 V,
- komunikacja i sterowanie poprzez interfejs I2C.
Sercem modułu jest układ PCA9622, strukturę wewnętrzną układu przedstawiono na rysunku 1. PCA9622 wchodzi w skład szerokiej rodziny kontrolerów LED I2C firmy NXP. Jest to konfigurowany przez I2C 16-kanałowy generator PWM. Układ ma możliwość zewnętrznego adresowania wyprowadzeniami A0...A6. Dostępne jest 126 adresów I2C, a kilka adresów magistrali jest zarezerwowane dla sterowania globalnego.
Adres 0x03 zarezerwowany jest dla resetu globalnego, adres 0x70 domyślnie dla globalnego sterowania wszystkimi LED. Ułatwia to oprogramowanie układów wyświetlaczy składających się z kaskady PCA9622, gdyż wszystkie układy, niezależnie od adresu fizycznego reagują na jedną komendę globalną, co znacząco odciąża magistralę I2C od zbędnych transmisji. Możliwe jest także definiowanie pod-adresów grupujących sterowane LED, co ułatwia tworzenie ekranów RGB.
Oprócz indywidualnego sterowania PWM każdego z wyjść, możliwe jest sterowanie grupowe w trybie globalnego PWM (np. dla regulacji jasności wszystkich wyjść LEDx) oraz pracy przerywanej – migania, definiowanej z 8-bitową rozdzielczością i wypełnieniem (np. dla celów sygnalizacyjnych).
Budowa i działanie
Schemat układu został pokazany na rysunku 2. Każde z wyjść może zostać ustawione w stan GND/OD. Wewnętrzny oscylator i programowane dzielniki upraszczają aplikację PCA9622. Układ ma wejście sprzętowe !OE umożliwiające sterowanie buforem wyjściowym podłączone poprzez zworę OE do GPIO4 Raspberry Pi (zwarte wyprowadzenia 2–3). Wejście może zostać podłączone także na stałe do masy (zwarte wyprowadzenia 1–2), aktywując trwale bufory wyjściowe.
Zwory A0, A1 umożliwiają wybór czterech adresów z zakresu 0x68...0x6C. Złącze I2C jest zgodne z Grove 3,3 V i ułatwia podłączenie modułów zewnętrznych. Wyjścia PWM pogrupowane są w dwie 8-bitowe sekcje i wyprowadzone na złącza szpilkowe PWM0...7, PWM8...15.
Strukturę rejestrów konfiguracyjnych zestawiono w tabeli 1. W zależności od potrzeb możliwa jest komunikacja z poszczególnymi rejestrami poprzez adresowanie indywidualne rejestrów, wskazujące na konkretny rejestr, zgodnie z rysunkiem 3. Drugim sposobem jest adresowanie grupowe wszystkich rejestrów pokazane na rysunku 4.
Ostatnim sposobem jest adresowanie grupowe rejestrów PWM po wcześniejszej konfiguracji układu zgodnie z rysunkiem 5.
Odczyt odbywa się podobnie. Dokładniejsze informacje oczywiście zamieszczone są w nocie katalogowej. Najważniejsze bity konfiguracyjne dla podstawowego trybu pracy zestawiono w tabeli 2.
Montaż i uruchomienie
Schemat płytki PCB został pokazany na rysunku 6. Montaż jest klasyczny i nie wymaga opisu, zmontowany układ pokazano na fotografii tytułowej. Poprawnie zmontowany układ nie wymaga uruchamiania. Przed uruchomieniem konieczne jest tylko ustawienie adresu A0, A1, ze zwróceniem uwagi na adresy zarezerwowane i ewentualne kolizje z innymi układami na magistrali I2C.
Przed podłączeniem diod LED lub wyświetlaczy należy sprawdzić warunki pracy układu, tj. maksymalne prądy każdego wyprowadzenia GPIO, sumaryczny prąd wyprowadzenia masy (uwzględniający też prądy I2C) oraz maksymalną traconą w układzie moc.
Szybkiego sprawdzenia modułu najłatwiej dokonać korzystając z bibliotek i2c i konsoli. W celu użycia PCA9622 konieczne jest dodanie obsługi magistrali I2C, czy poprzez raspi-config, czy bezpośrednią edycję pliku config.txt i dodanie wpisu dtparam=i2c_arm=on.
Po ponownym uruchomieniu należy pobrać narzędzia odpowiadające za obsługę I2C poleceniem:
Po zainstalowaniu i restarcie, w pierwszej kolejności sprawdzamy w konsoli prawidłowe działanie I2C, wpisując polecenie:
Efekt powinien być podobny do tego z rysunku 7. Powinno pojawić się urządzenie pod adresem ustawionym zworkami A1, A0 – w modelu 0x6B. Jeżeli nie zmienione zostały adresy globalne powinny być także widoczne 0x03, 0x70. Korzystając z polecenia:
możemy kolejno skonfigurować rejestry PCA w celu sprawdzenia działania układu, pamiętając o ustawieniu programowym lub sprzętowym wejścia !OE w stan niski. Przykładowa konfiguracji rejestrów MODE0 (0x00) ,MODE1 (0x01), GRPPWM (0x12), GRPFREQ (0x13), LEDOUT0 (0x14):
i2cset -y 1 0x60 0x01 0x05
i2cset -y 1 0x60 0x12 0xFF
i2cset -y 1 0x60 0x13 0x00
i2cset -y 1 0x60 0x14 0xFF
Zmieniając wartość rejestru PWM0 (0x02):
zmieniamy wypełnienie sterujące podłączoną do wyprowadzenia LED0. Po pomyślnych testach, moduł można zastosować we własnej aplikacji.
Adam Tatuś, EP
- R1, R2: 4,7 kΩ
- C1: 0,1 μF
- C2: 10 μF
- U1: PCA9222DR (TSSOP32)
- GPIO: złącze IDC40 żeńskie
- I2C: złącze Grove kątowe (110990037)
- PWM07, PWM815: złącze szpilkowe 2×5 2,54 mm kątowe