Digilent Pmod i STM32 (cz. 1) – PmodLED i PmodALS

PmodALS

Rysunek 5. Moduł PmodALS

PmodALS zawiera dwa układy umożliwiające pomiar natężenia światła widzialnego. Pierwszym z nich jest fototranzystor Vishay Semiconductor’s TEMT6000X01 dokonujący konwersji natężenia światła na odpowiednią wartość prądu kolektora (rysunek 6). Fototranzystor działa w zakresie światła widzialnego (440 nm – 800 nm), natomiast maksimum czułości przypada na długość fali wynoszącą 570 nm. Charakterystyka ta odpowiada czułości ludzkiego oka, dlatego czujnik ten dobrze nadaje się na przykład do kontrolowania jasności wyświetlaczy w zależności od poziomu światła otoczenia.

Rysunek 6. Charakterystyka konwersji światło/prąd kolektora fototranzystora w zestawie PmodALS

Drugim układem jest 8-bitowy przetwornik analogowo-cyfrowy Texas Instruments ADC081S021 umożliwiający odczyt napięcia proporcjonalnego do prądu kolektora fototranzystora, które odkłada się na rezystorze R1 (10kΩ). Układ pomiarowy przedstawiono na rysunku 7.

Rysunek 7. Układ do pomiaru natężenia światła za pomocą fototranzystora i przetwornika analogowo-cyfrowego

Obsługa przetwornika ADC

Przetwornik ADC081S021 ma interfejs SPI umożliwiający odczyt mierzonego napięcia. Posiada on dwa tryby działania – normalny (Normal), a także wyłączony (Shutdown). Pierwszy z nich wykonuje ciągłą konwersję bez oczekiwania na inicjalizację urządzenia przed każdym pomiarem. Zmiana sygnału CS# jest jednocześnie początkiem konwersji oraz odczytu danych. Aby urządzenie przełączyło się w tryb normalny lub pozostało w nim po odczycie danych, sygnał CS# musi pozostać w stanie niskim po odczycie 16 bitów danych przez SPI lub zmienić się na stan wysoki – drugi z tych warunków jest spełniony w przypadku zwykłego odczytu danych przez SPI. Urządzenie można wyłączyć zmieniając stan linii CS# na wysoki pomiędzy drugim i dziesiątym opadającym zboczem linii zegara SCL.

Aby odebrać dane z przetwornika należy odczytać 16 bitów danych. 8-bitowy wynik konwersji jest przesunięty o 4 bity w lewo. Należy pamiętać, że odczyt dotyczy zawsze konwersji rozpoczętej przez poprzednią zmianę sygnału CS#, dlatego do odczytania aktualnej wartości napięcia wymagane są dwie transakcje SPI, pomiędzy którymi musi upłynąć czas potrzebny do wykonania kolejnej konwersji (350 ns od trzynastego narastającego i 50 ns od szesnastego opadającego zbocza zegara).

Moduł PmodALS posiada złącze Pmod SPI typu 2 – jego opis znajduje się w tabeli 10. W nawiasach podano piny mikrokontrolera podłączone do poszczególnych sygnałów złącza (linia MISO nie jest używana).

Tabela 10. Interfejs SPI (6 pinów) – Typ 2

Sygnał Numer pinu
CS (PB0) 1
MOSI 2
MISO (PE14) 3
SCK (PA1) 4
GND 5
VCC 6

Przykład na mikrokontroler STM32

Obsługę modułu PmodALS w przykładzie dla mikrokontrolera STM32L496ZG, a także zestawu deweloperskiego KAmeleon zakodowano w pliku src/PmodALS.c. Konfiguracja SPI wywoływana jest za pomocą funkcji PmodALS_Config, przedstawionej na listingu 4. Funkcja ta konfiguruje SPI1 w trybie tylko do odczytu (linia MISO) dla danych 16-bitowych. Funkcja biblioteczna HAL_SPI_Init wywołuje natomiast funkcję HAL_SPI_MspInit, gdzie konfigurowane są zegary peryferiów i linie GPIO. Zaprezentowano ją na listingu 5. Linie danych (MISO) i zegara SPI (SCK) są obsługiwane sprzętowo, natomiast linia CS jest sterowana programowo.

Przykład jest dostępny w sekcji „Do pobrania”

Przetwornik ADC081S021 pracuje cały czas w trybie Normal, a odczyt danych zrealizowany jest jako zwykła transakcja SPI zaimplementowana w funkcji PmodALS_GetValue (listing 6.). Dzięki temu sygnał CS jest zmieniany na stan wysoki po zakończeniu odczytu danych i przetwornik nie przechodzi do stanu Shutdown. Odczytana 16-bitowa wartość jest przesuwana w prawo o 4 bity tak, żeby otrzymać poziom natężenia światła z zakresu od 0 do 255.

Kod źródłowy funkcji

Listing 4. Konfiguracja SPI

 

Listing 5. Konfiguracja zegarów peryferiów i linii GPIO

 

Listing 6. Fragment funkcji PmodLED_SetLed

W przykładzie dodatkowo konfigurowany jest Timer4 w trybie PWM, którego wyjście podłączone jest do pinu PD12. To wyprowadzenie z kolei steruje niebieską diodą LED-RGB. Wypełnienie sygnału PWM jest zmieniane proporcjonalnie do wartości odczytanej przez przetwornik. Wartość ta jest także wypisywana na port szeregowy LPUART1 podłączony do programatora ST-Link i można ją odczytać po podłączeniu do komputera jako wirtualny port szeregowy. Obsługa PWM, a także portu szeregowego jest zaimplementowana w plikach src/pwm.c i src/serial.c.

Przykład został przygotowany dla środowiska Atollic TrueSTUDIO for STM32 i zestawu deweloperskiego KAmeleon, w oparciu o bibliotekę STM32Cube_FW_L4.

Moduły PmodLED i PmodALS, a także zestaw KAmeleon oraz wiele innych płytek ewaluacyjnych i modułów rozszerzających można znaleźć w ofercie Kamami.pl
 Zachęcamy do przeczytania drugiej części cyklu, w której omówiliśmy moduły PmodHYGRO i PmodOLEDrgbDigilent Pmod i STM32 (cz. 2) – PmodHYGRO i PmodOLEDrgb

Do pobrania

O autorze