Cyfrowy aparat fotograficzny na STM32 z optycznym sensorem CCD

Moduł kamery cyfrowej można wykorzystać do budowy prostego aparatu rejestrującego zdjęcia czyli obrazy statyczne o różnej rozdzielczości. W projekcie zastosowano moduł kamery cyfrowej oparty na matrycy MT9D111/MT9D131. Sterownikiem jest mikrokontroler z rodziny STM32F2x7/STM32F4x7. Ustawienia i funkcje aparatu można kontrolować za pośrednictwem rozkazów przesyłanych portem szeregowym UART oraz poprzez zmianę poziomu na linii sterującej. Pozwala to zastosować aparat jako urządzenie peryferyjne sterowane przez inny system mikroprocesorowy. Zarejestrowane zdjęcia gromadzone są na karcie SD. Do ustawiania parametrów aparatu opracowany został specjalny program komputerowy fotoARSET3.


Część sprzętowa aparatu

Na rysunku 1 pokazano schemat elektryczny aparatu. Przyjęte rozwiązanie stanowi kompromis pomiędzy chęcią osiągnięcia jak najlepszych parametrów a prostotą konstrukcji i niskimi kosztami wykonania. Urządzenie składa się z następujących bloków funkcjonalnych:

  • modułu kamery dołączanego do gniazda JP9,
  • mikrokontrolera sterującego pracą całości U4,
  • bufora pamięci RAM U5,
  • karty SD dołączanej do gniazda SD2 stanowiącą pamięć masową dla zdjęć.

 

Fot. 1. Schemat elektryczny aparatu

Fot. 1. Schemat elektryczny aparatu

 

Dodatkowo system został wyposażony w pamięć EEPROM U6 do przechowywania ustawień aparatu. Komunikacja z urządzeniami zewnętrznymi odbywa się poprzez gniazdo JP2. W przypadku dołączania aparatu do komputera, dla linii RxD i TxD gniazda JP2-7/8 wymagany jest dodatkowy zewnętrzny konwerter albo TTL-USB (np. z układem FT232) albo TTL-RS232 (np. z układem typu MAX3232). Bezpośrednie połączenie z innym układem mikroprocesorowym zasilanym napięciem 3,3…5 V nie wymaga żadnego konwertera.

Na stykach gniazda JP2-1,2 wyprowadzone zostały linie zasilania aparatu. Do prawidłowej pracy potrzebne jest napięcie od 4,5 do 9 V przy wydajności prądowej zasilacza nie gorszej niż 100 mA.

Napięcie zasilania jest stabilizowane układami U3 i U1. Pierwszy stabilizator dostarcza zasilania 3,3 V między innymi dla mikrokontrolera, pamięci RAM i karty SD. Drugi wytwarza napięcie 2,8 V potrzebne dla modułu kamery. Ponieważ stabilizatory 2,8 V są trudniej dostępne jako alternatywę przewidziano możliwość użycia stabilizatora 2,5 V. Zastosowanie rezystora R10 zwiększa napięcie wyjściowe do 2,8 V. Stosując stabilizator o napięciu 2,8 V trzeba zewrzeć rezystor R10.

Dodatkowo na styku JP2-2 wyprowadzona została linia mikrokontrolera pełniąca funkcje przycisku spustowego w klasycznym aparacie. Po podaniu na tę linię stanu niskiego aparat wykona zdjęcie z aktualnie ustawioną rozdzielczością.

Na gnieździe JP4 wyprowadzono linie portu JTAG, który może służyć do zapisu do pamięci mikrokontrolera lub do debugowania własnych wersji oprogramowania.

Zapis oprogramowania do mikrokontrolera STM32F można także przeprowadzić wykorzystując port szeregowy UART. W tym celu przed włączenie zasilania należy zewrzeć zworę Z1.  Dokładny opis wykorzystania portu UART do programowania pamięci Flash mikrokontrolera można znaleźć w jego dokumentacji technicznej na stronie producenta. Po zakończeniu programowania za pośrednictwem portu UART zwora Z1 powinna zostać usunięta.

Dla prawidłowej pracy aparat potrzebuje dostępu do aktualnego czasu i daty. Wykorzystywany jest w tym celu wewnętrzny zegar RTC mikrokontrolera. Do jego działania potrzebny jest układ dodatkowego rezonatora X2, C31, C32 oraz bateria podtrzymująca BT1 3 V.

Rezystory R7-R9 służą do dopasowania sygnałów synchronizacji obrazu przesyłanych z modułu do mikrokontrolera. Ich obecność ma szczególne znaczenie przy dłuższych liniach łączących moduł z układem aparatu. Z przeprowadzonych doświadczeń wynika, że połączenie (dla każdej linii) nie powinno być dłuższe niż 10 cm.

Diody LED służą do sygnalizacji stanu kamery w szczególności faktu wykonywania zdjęcia, jego konwersji i zapisu na kartę SD.

Schemat z rysunku 1 nie wymaga wykonywania specjalnej płytki drukowanej. Można wykorzystać dowolną płytę ewaluacyjną, o ile zaznaczone na schemacie porty mikrokontrolera będą się łączyć z odpowiednimi wyprowadzeniami pozostałych elementów takich jak moduł, pamięć, karta SD itd.

 

Oprogramowanie sterujące mikrokontrolera

Oprogramowanie sterujące mikrokontrolera pełni dwie podstawowe funkcje:

  • steruje modułem kamery CCD,
  • utrzymuje komunikację z urządzeniami zewnętrznymi poprzez port UART.

Sterowanie modułem kamery cyfrowej także z grubsza można podzielić na dwa etapy:

  • programowanie parametrów pracy,
  • obsługę przechwytywania danych obrazu.

Programowanie parametrów sprowadza się do zapisu odpowiednich wartości w wewnętrznych rejestrach modułu. Odbywa się to poprzez wydzieloną 2-przewodową magistralę. Jest to magistrala I2C obsługująca także dostęp do pamięci EEPROM. Wybór urządzenia z którym ma się komunikować mikrokontroler następuje przez wysłanie adresu identyfikującego odbiorcę danych.

Przechwytywanie danych obrazu odbywa się w sposób narzucony przez budowę modułu. Po rejestracji zdjęcia (pojedynczej klatki) moduł w sposób ciągły wysyła osobną magistralą dane obrazu linia po linii i piksel po pikselu. Do ich przechwycenia mikrokontroler wykorzystuje swoje wewnętrzne specjalnie do tego przeznaczone układy. Są to:

  • interfejs DCMI,
  • mechanizm sprzętowego przesyłu danych DMA,
  • interfejs zewnętrznej pamięci RAM.

Oprogramowanie mikrokontrolera musi tylko zainicjować działanie tych mechanizmów a potem wyłączyć gdy wszystkie dane zostaną przechwycone. Ponieważ są to interfejsy sprzętowe mikrokontrolera można kontrolować ich działanie badając ustawienia wewnętrznych rejestrów. Dzięki temu w czasie przechwytywania danych obrazu oprogramowanie może równolegle wykonywać inne zadania.

Dane obrazu są na bieżąco przesyłane z modułu w krótkim czasie i dużej ilości. W zastosowanym formacie R5G6B5 dla zapisania informacji każdym pikselu potrzeba 2 bajtów. Dane małego obrazka o formacie 160×120 to 160 · 120 · 2 = 38 400 bajtów. Dla obrazu formatu VGA będzie to 640 · 480 · 2 = 614 400 bajtów. Ponieważ zapis na karcie SD jest relatywnie wolny przechwytywane dane powinny być przejściowo umieszczane w buforze czyli pamięci RAM U5. Zastosowana pamięć ma pojemność 524288 bajtów natomiast aparat pozwala zarejestrować dużo obszerniejszy obraz w formacie VGA. Jest to możliwe dzięki pewnej sztuczce na którą pozwala wykorzystanie wewnętrznych mechanizmów mikrokontrolera STM32F2x7. Dzięki temu, że przechwytywanie danych odbywa się automatycznie można je równolegle partiami przesyłać z bufora RAM do zapisu na kartę SD. I tak zanim w pamięci RAM dane końca obrazu nadpiszą dane początku te są już umieszczone w pliku na karcie SD.

 

Komunikacja z urządzeniami zewnętrznymi

Do ustawiania parametrów aparatu i komunikacji z urządzeniami zewnętrznymi wykorzystywane są rozkazy serwisowe i polecenia sterujące. Format poleceń został opracowany jako jednolity interfejsu dla urządzeń typu ARS3. Polecenia i rozkazy przesyłane są do urządzenia poprzez port UART. Na pracę aparatu wpływa także zmiana poziomu linii sterującej wyprowadzonej na styk gniazda JP2-2. Po zwarciu linii do masy aparat wykona zdjęcie z aktualnie ustawioną rozdzielczością.

 

Oprogramowanie sterujące fotoARSET3

Dla ułatwienia sterowania aparatem bez konieczności ręcznego wpisywania poleceń sterujących opracowany został specjalny program. Umożliwia on zmianę nastaw urządzenia, wykonywanie i konwersję zdjęć, przeglądanie katalogów na karcie SD.

W obecnej wersji 1-03-5-9 program fotoARSET3 składa się z dwóch zakładek. Na pierwszej bezpośrednio otwieranej po uruchomieniu („Ustawienia” – rysunek 2) najważniejszym elementem jest przycisk automatycznego wyszukiwania dołączonego urządzenia. Dopiero gdy program nawiąże połączenie z aparatem podłączonym do któregoś z portów komputera możliwe są dalsze działania. Fakt odnalezienia i nawiązania połączenia z urządzeniem sygnalizowany jest komunikatem i wyświetleniem najważniejszych parametrów urządzenia.

 

Rys. 2. Wygląd zakładki „Ustawienia”

Rys. 2. Wygląd zakładki „Ustawienia”

 

Jeżeli do pamięci Flash mikrokontrolera aparatu zostało wpisane nowe oprogramowanie, po nawiązaniu połączenia należy w następnej konieczności użyć przycisku „Ustawienia standardowe”. Dzięki temu do pamięci EEPROM aparatu zostaną wpisane ustawienia początkowe gwarantujące jego właściwe funkcjonowanie. Przycisku tego należy użyć także wtedy gdy na skutek błędnych nastaw aparat przestanie funkcjonować poprawnie.

Na zakładce znajdują się ponadto pola i przyciski pozwalające:

  • przydzielić urządzeniu wybraną nazwę własną,
  • zmienić szybkość transmisji portu szeregowego UART,
  • zsynchronizować czas zegara RTC aparatu z czasem systemowym komputera.

Na zakładce znajduje się także przycisk pozwalający bezpośrednio przejść do opcji związanych z funkcjami foto aparatu.

Na zakładce „Foto” (rysunek 3) umieszczone zostały elementy służące do wykonywania zdjęć oraz przeglądania i edycji zdjęć zgromadzonych w katalogach pamięci masowej.

Po naciśnięciu klawisza z ikoną aparatu układ rejestruje zdjęcie, zapisuje je na karcie SD a dane miniatury przesyła portem szeregowym do wyświetlenia przez program fotoARSET3. Rozmiar zdjęcia przed jego wykonaniem wybierany jest z listy rozwijanej zawierającej wszystkie dostępne rozmiary zdjęć.

 

Rys. 3. Wygląd zakładki „Foto”

Rys. 3. Wygląd zakładki „Foto”

 

Zawartość katalogu pamięci masowej na karcie SD wyświetlana jest w formie drzewa. We właściwym  podkatalogu dnia tygodnia zapisywane jest każde wykonane zdjęcie jako plik danych surowych z rozszerzeniem .RAW. Po dwukrotnym kliknięciu lewym przyciskiem myszy na nazwie zdjęcia zostaje ono przesłane do wyświetlenia przez program fotoARSET3. Można wybrać format w jakim zdjęcie zostanie przesłane posługując się polem wyboru oznaczonym jako „Format importu pliku RAW”. Po wybraniu formatu importu i dwukrotnym kliknięciu na nazwę zdjęcia zostanie ono najpierw przez aparat przekonwertowane a następnie nowo utworzony plik wysłany portem UART. Zależnie od wybranych formatów konwersja może trochę trwać a oprogramowanie może pytać o to czy kontynuować oczekiwanie czy przerwać konwersję.

Odczytany plik zdjęcia można zapisać na dysku komputera. Możliwe jest także usuwanie pojedynczych plików z pamięci karty SD korzystając z przycisku z ikoną kosza.

Szybszym i wygodniejszym sposobem manipulacji plikami zdjęć jest wyjęcie karty z gniazda aparatu i podłączenia jej poprzez czytnik kart do komputera. Program fotoARSET3 pozwala na odczyt plików z karty, konwersję pliku zdjęcia na inny format (np. z RAW na JPG) i zapis na dysku komputera.

Na zakładce „Foto” mogą być dostępne inne elementy regulujące tryb pracy modułu kamery. Liczba tych elementów i sposób działania zależy od wersji oprogramowania aparatu.

Ryszard Szymaniak, ARIES

www.arskam.com

Do pobrania

Autor: