Podstawą projektu elektronicznego jest schemat, więc na jego przykładzie omówię możliwie szczegółowo ideę funkcjonowania projektu APL3. Kolejne rozdziały odpowiadają stronom schematu, więc czytając artykuł, najwygodniej będzie wyświetlić schemat jako pdf z poniższego linku na drugim monitorze, lub mieć przed sobą wydrukowany na kartce.
Widok płytki głównej
Pierwsza strona przedstawia wizualizację projektu, dzięki której łatwiej jest wyobrazić sobie, jak będzie wyglądał finalny produkt już w chwili jego powstawania. Pokazane są dwie zewnętrzne z wszystkich 4 warstw płyty głównej. Na dłuższych bokach są umieszczone niebieskie złącza modułów zewnętrznych (w rzeczywistości będą białe, ale producent udostępnia bibliotekę tylko z niebieską wersją). Nie znalazłem miejsca na płytce, aby opisać ich funkcję, ale będzie można to zrobić na widocznej tutaj ramce nad płytką, której zadaniem jest utrzymanie modułów wewnętrznych w swoich gniazdach, aby nie wypadły przy większym przeciążeniu, np. twardszym lądowaniu, czy starcie z katapulty.

Po prawej stronie płytki jest złącze 3×18 do podłączenia dwóch odbiorników PPM lub S-Bus z funkcjonalnością diversity, 8 szybkich 400 Hz kanałów PWM dla regulatorów wirnikowca oraz 8 standardowych 50 Hz wyjść na serwomechanizmy. Z ich lewej strony są dwa niebieskie (w rzeczywistości białe) złącza zasilania, takie jak w Pixhawku z tą różnicą, że APL3 można zasilić bezpośrednio z pakietu 2-8S. Każde złącze ma 2 dedykowane piny, które mogą pracować jako wejścia analogowe do podłączenia czujnika prądu i napięcia, aby monitorować pakiet, albo wejścia te mogą być przełączone zworą na magistralę I2C, po której kontroler komunikuje się z managerem baterii wbudowanym w pakiet. Ponieważ manager jest przewidziany późniejszym etapie projektu, początkowo będę korzystał z analogowego czujnika prądu. Na dole jest żółte złącze XT30 do zasilania serw. Ono jest w ramach eksperymentu, tak trochę na siłę i jest w kolizji ze skrajnym segmentem ramki, bo nie jestem pewien sensowności tego rozwiązania i traktuję je jako alternatywę do przetestowania, a nie standard. W wirnikowcach nie będzie ono potrzebne, ale w płatowcach przy dużej liczbie serw dostarczanie energii jedną wtyczką taką jak w serwie to może być stanowczo za mało, stąd dodatkowe złącze. Na górze częściowo schowany pod ramkę jest transformator separujący Ethernetu.
Z lewej strony na przedzie płytki od góry jest złącze USB typu C, które być może da radę pełnić funkcję wejścia zasilania przy pracy na biurku (czyli kilka pierwszych lat życia) i jest standardowym złączem komunikacyjnym USB Full Speed (12 Mb). Poniżej jest gniazdo kart micro SD z pełną 4-bitową magistralą i przełączalnym napięciem IO miedzy 3,3 V i 1,8 V, co powinno umożliwić obsługę takich prędkości transferu, aby móc zapisywać na kartę obraz w jakości HD. Poniżej jest złącze na taśmę elastyczną do kamery z interfejsem DCMI. Do tej pory udało mi się uzyskać poprawną pracę z kamerami opisanymi w artykule: Porównanie możliwości obliczeniowych mikrokontrolerów Cortex-M7. Na samym dole lewej strony jest LED RGB statusu.
W centralnej części płytki oprócz wielu układów scalonych, które omówię, opisując kolejne bloki funkcjonalne, są 4 pary gniazd dla modułów wewnętrznych. W gnieździe nr 3 jest obsadzony moduł inercyjno-pneumatyczny zawierający z lewej dwa 3-osiowe magnetometry, w środku dwa 3 osiowe żyroskopu i akcelerometry, z prawej dwa czujniki ciśnienia a na dole różnicowy czujnik ciśnienia do pomiaru prędkości. Jest renderowany jako półprzezroczysty, aby nie przykrywał tego, co jest pod nim.
Na dolnej warstwie płytki widać główne układy scalone: centralnie 208-nóżkowy mikrokontroler, po prawej pamięci: pojemna, ale dosyć wolna dynamiczna, nie za duża, ale szybka i bardzo droga statyczna oraz duża pamięć Flash jako magazyn komunikatów audio, obrazów, opcjonalnego kodu zewnętrznego, gdyby 2 MB wewnętrznego Flash okazało się za mało. Wszystkie te pamięci mają 16-bitową magistralę danych, a ich pojemność jest o wiele większa, niż jest dostępne w kontrolerze. Zewnętrzne pamięci są konieczne, aby umożliwić zapis obrazu z kamery w pełnej rozdzielczości i ewentualną jego obróbkę. Na płytce jest jeszcze jedna pamięć Flash (U25) o magistrali 4-bitowej w 8-nóżkowej obudowie. Zajmuje o wiele mniej miejsca, chociaż jest 4-krotnie wolniejsza od tej 16-bitowej. W pierwszej wersji projektu wstawiłem obie, bo trudno mi ocenić balans między ich zaletami i wadami. To może pokazać tylko praktyka użytkowania. Potencjalnie w bardziej wyspecjalizowanych wersjach będzie można z jednej z nich zrezygnować.
Na dole jest gniazdo na baterię CR1612 do podtrzymania zegara czasu rzeczywistego. Chodzi o to, żeby nawet wyłączony autopilot utrzymywał aktualny czas i zaraz po włączeniu mógł założyć plik logu o nazwie zawierającej czas jego powstania. Tak nazwanymi logami zarządza się o wiele łatwiej niż logami z kolejnymi numerami. Dodatkowo nie wykluczam takiej funkcjonalności, że bezzałogowiec poleci gdzieś, wyląduje, ustawi sobie „budzik” na daną godzinę i wejdzie w stan obniżonego poboru mocy albo wprost się wyłączy. Gdy przyjdzie czas pobudki, zegar go obudzi i będzie mógł kontynuować misję. To są bardzo odległe wizje, ale nie chciałbym odciąć się od możliwości skorzystania z takiej funkcjonalności.
Schemat blokowy
Ta część schematu odgrywa rolę bardziej techniczną niż użytkową. Chodzi o to, że trudno jest narysować duży projekt na jednym arkuszu papieru, bo to musiałby być format gdzieś w okolicach A2 lub nawet A1 i ewentualne wydrukowanie go staje się nie lada problemem. Dlatego projekt dzieli się na mniejsze bloki funkcjonalne rysowane na typowych formatach papieru (tutaj A4 i A3) i na schemacie blokowym łączy się je ponownie w całość.
Tutaj jest największy blok zawierający mikrokontroler z najprostszymi peryferiami jak kwarce, bateria czy reset i do niego podłączone są wszystkie inne bloki. Część boków łączy się ze sobą. Połączenia między blokami są widoczne na schematach jako żółte bloki nazywane portami z jednym ostrym końcem określającym kierunek przepływu danych.
Mikrokontroler
To jest serce całego urządzenia. Większość nóżek jest podłączona przez porty do innych bloków funkcjonalnych i tam je omówię. Oprócz tego są 3 magistrale:
- DCMI_D[0..7] po lewej stronie to 8-bitowa magistrala danych do kamery cyfrowej. Kamera ma możliwość wysłania od 8 do 12 bitów danych, co na początku wydaje się atrakcyjne, bo mamy większą dynamikę koloru, ale użycie więcej niż 8 bitów podwaja zapotrzebowanie na pamięć i dwukrotnie spowalnia cały transfer, co drastycznie studzi zapał głowy, rozpalonej dużą dynamiką. Do ewentualnej obróbki obrazu, jego dynamikę i tak trzeba redukować, a do bicia rekordów jakości obrazu ten kontroler jest za słaby. Tutaj do dyspozycji mamy jeden rdzeń pracujący maksymalnie na 480 MHz a najrozsądniejszy kontroler do obróbki obrazu, jaki do tej pory znalazłem ma 2 rdzenie po 1500 MHz każdy. W obecnej chwili nie czuję się na siłach, aby zaprojektować urządzenie pracujące na takiej prędkości, więc z pokorą przyjmuję to, że możliwości wizyjne APL3 nie będą przełomem na rynku, ale będę zadowolony, jeżeli w ogóle będą dostępne.
- FMC_A[0..23] na samej górze. FMC to skrót od „Flexible Memory Controller”. Jest wspólna magistrala adresowa łącząca mikrokontroler z trzema dużymi układami pamięci. Większość portów kontrolera pełniących funkcje magistrali jest połączonych do niej bezpośrednio, ale kilka (od A0 do A5 i A15) jest podłączonych przez oporniki 33 Ω. To jest wynik analizy „Signal integrity” projektu płytki drukowanej. Niektóre ścieżki są dłuższe od innych i analiza pokazuje potencjalne problemy takie jak dzwonienie na linii. Szeregowe oporniki mają za zadanie stłumić te problemy do akceptowalnego poziomu.
- FMC_D[0..16] analogicznie jak powyżej jest to wspólna 16-bitowa magistrala danych. Kilka jej bitów również przechodzi przez szeregowe oporniki.
Gdzieś w połowie wysokości schematy są dwa kwarce: 25 MHz do taktowania obu rdzeni i potencjalnie również układu sterownika PHY Ethernetu (gdyby tak sienie dało, to przy PHY jest miejsce na drugi, taki sam kwarc), oraz kwarc „zegarkowy” do taktowania RTC kontrolera. Oba kwarce są w możliwie najmniejszych obudowach, jakie są w miarę szeroko dostępne. Chodzi o to, że gdyby nie dało się kupić tego wybranego rezonatora, to można znaleźć inny w tej samej obudowie. Na rynku można znaleźć jeszcze mniejsze obudowy, ale to oprócz wspomnianej dostępności wiąże się z większym kosztem. Niby koszt jest niewielki, ale ziarnko do ziarnka i robi się drogo.
Po prawej na dole jest układ resetu. Może już troszkę staroświecki MCP100 w obudowie SOT23, ale jest sprawdzony i mam ich trochę w magazynie. Czasami jako obwód resetu stosuje się połączenie opornika podciągającego do napięcia zasilania i kondensatora do masy, ale taki obwód ma dużą rezystancję wewnętrzną, a w naszym projekcie do resetu jest podłączonych kilka układów i moduły wewnętrzne. Na etapie projektu trudno ocenić jak sumarycznie wszystkie te wejścia obciążą obwód i jak to wpłynie na jego pracę. Może to skrócić czas pozostawania w resecie, a to wpłynąć na wiele innych procesów. Coś się może nie zdążyć zainicjować, czyli jest to źródło potencjalnych problemów i analogowy obwód RC nadaje się jedynie do prostych, budżetowych rozwiązań. Układ aktywny jest znacznie bardziej odporny na obciążenie.
Innym aspektem jest odporność na zakłócenia elektromagnetyczne. Pewnie każdy, kto to czyta, widział taką „elektroniczną strzelbę na drony”, będącą wielopasmowym generatorem z anteną Yaga lub nawet baterią anten. Nie znam szczegółów, ale domyślam się, że takie urządzenie oprócz zagłuszania sygnału GPS albo jego spoofowania polegającego na sztucznym obniżeniu wskazania wysokości, zakłóceniu typowych kanałów sterowania RC, może jeszcze emitować jakieś wysokoenergetyczne impulsy, które w wysokoimpendancyjnym obwodzie analogowym mogłyby wygenerować aktywny sygnał RESET, a to zwykle źle wpływa na bezpieczeństwo lotu ;-) Scalony generator resetu powinien być na to bardziej odporny, a przynajmniej mam taką nadzieję.
Poniżej resetu jest sygnał BOOT0 określający pamięć, z której kontroler czyta program po starcie. Domyślnie ma to być wewnętrzny Flash, czyli podłączenie do masy, ale aby nie ograniczać możliwości projektu wyposażonego w kilka pamięci, wstawiony jest tam szeregowy opornik. W razie potrzeby można go wylutować i podpiąć się kynarem do 3,3 V. Podobnie wejście PDR_ON ma ustawiony swój stan domyślny, ale jest szansa, aby go zmienić, gdyby to się kiedyś okazało potrzebne.
Na górze bloku kontrolera oznaczona na czerwono są porty zasilania. Jest ich sporo. Prawdopodobnie tyle, aby obniżyć łączną impedancję ścieżki zasilania. Analogicznie na dole kontrolera, są porty masy. Po lewej stronie na dole są inne niż główne, porty związane z zasilaniem. Mikrokontroler, aby minimalizować wydzielanie ciepła pracuje na możliwie niskim napięciu od ok. 1,0 V do 1,3 V. Napięcie jest związane z maksymalną dopuszczalną częstotliwością pracy i można je ustawiać w rejestrach kontrolera. Jest szereg sposobów zasilania kontrolera obniżonym napięciem. Można je wygenerować poza kontrolerem i dostarczyć do wejść VDDLDO, można skorzystać z wewnętrznego regulatora LDO, ale wtedy trzeba podać odpowiednio niskie napięcie, aby ciepło nie wydzielało się na LDO, można też wykorzystać wbudowaną przetwornicę SMPS do generowania obniżonego napięcia. W projekcie wykorzystuję kaskadowe rozwiązanie polegające na tym, że wbudowana przetwornica generuje obniżone napięcie i dopiero ono podawane jest na wewnętrzny LDO. Wydaje mi się, że tak jest najefektywniej i zajmuje to mniej miejsca niż zewnętrzne zasilanie. Jest tam 2 A dławik Muraty i cała bateria kondensatorów sugerowana w dokumentacji kontrolera.
Obwody analogowe służą do zasilania przetworników analogowo-cyfrowych i są zasilane z osobnego, zewnętrznego stabilizatora LDO, aby do obwodów analogowych przez zasilanie nie wchodził szum od obwodów cyfrowych. Kontroler ma całkiem niezłe 16-bitowe przetworniki i szkoda byłoby tracić taką dynamikę, oszczędzając na stabilizatorze za 2 zł, przynajmniej na początkowym etapie rozwoju, kiedy jeszcze nie wiemy, jak dokładnych pomiarów potrzebujemy. W projekcie nie ma dużo pomiarów i być może da się na tym oszczędzić. Łatwiej jest jednak zamienić stabilizator na mostek z kynaru niż ciąć ścieżki i wstawiać „na pająka” dodatkowy stabilizator, kiedy okaże się, że pomiary są zbyt mało dokładne.
Kontroler ma jeszcze porty do zasilania stabilizatora dla wewnętrznych obwodów USB podłączone do zewnętrznych kondensatorów. Na samym dole jest jeszcze bateria kondensatorów podłączona do każdego z portów zasilania kontrolera.
Moduły wewnętrzne
Tutaj są przedstawione 4 pary gniazd dla modułów wewnętrznych i obwody z nimi związane. Aby niedoświadczony użytkownik nie włożył odwrotnie modułu (co było możliwe w APL1), zastosowane zostały różne szerokości złączy dla obu stron modułu. Górna „magistralowa” strona ma złącze 2×8 a dolna „zasileniowa” ma 2×6. Złącza mogłyby być mniejsze, lecz aby nie blokować drugiej strony płytki i warstw wewnętrznych, zdecydowałem się na delikatne złącza lutowane powierzchniowo zamiast solidnie osadzonych przewlekanych (jak w APL2). Przez to, że są delikatniejsze i mechanicznie trzymają się na naklejonej warstwie folii miedzianej, mają więcej nóżek po to, aby to obciążenie rozłożyć na większą powierzchnię. Dodatkowo do rzeczywistych lotów będzie potrzebna pokazana na renderingu ramka dociskająca moduły i zabezpieczająca płytę główną przed uszkodzeniem polegającym na oderwaniu się złącza wskutek dużego przeciążenia.
Podobnie jak w APL2 do górnych złączy dochodzą magistrale SPI2 i I2C4. Przechodzą one przez filtr U27 będący zespołem sześciu filtrów typu Pi złożonych z opornika 100 Ω i kondensatorów 17 pF oraz diod Zenera na 5 V po obu stronach. Zadaniem filtra jest zaabsorbować przepięcia ESD mogące się pojawiać przy montażu i dotykaniu modułów oraz wyciąć wyższe harmoniczne sygnałów przesyłanych między modułami i kontrolerem. Pasmo przepustowe filtra to 110 MHz więc sygnały SPI pracującego na max. 20 MHz spokojnie sobie przejdą. Dla I2C tym bardziej.
Ponieważ modułów może być 4, a SPI jest magistralą łączącą punkt z punktem, potrzebne jest adresowanie modułów. Służy o tego dekoder U29. Sygnał MOD_SPI_NCS z kontrolera aktywujący układ SPI na magistrali wchodzi na jego aktywowane niskim poziomem wejście E1 i w zależności od wybranego adresu uaktywnia zaadresowane wyjście dekodera. Dekoder oprócz modułów adresuje jeszcze 2 urządzenia podłączone do magistrali SPI: pamięć FRAM (U24) do przechowywania konfiguracji i moduł rozszerzający we/wy, gdyż w kontrolerze nie ma już wolnych portów, aby sterować liniami we/wy na modułach. W trakcie projektowania modułu łączącego w sobie jednostkę inercyjną i pomiary ciśnienia okazało się, że jest problem z zaadresowaniem tak dużej liczby układów SPI na jednym module. W APL2 na SPI był tylko przetwornik A/C a wszystkie czujniki były analogowe. Teraz używając czujników cyfrowych, trzeba było dołożyć na nóżkach 11 i 13 linie sterowania adresami na module SUB_MOD_ADR0 i ...1. Na więcej nie było miejsca, więc rolę najstarszego bitu adresu pełni jedna z dwu linii we/wy modułu. Dekoder podłączony do modułów, ponieważ nie przesyła danych, więc zamiast filtra EMC ma szeregową rezystancję, która ogranicza ewentualny prąd wyładowania elektrostatycznego, a z pojemnością ścieżek tworzy trochę filtr RC na najwyższe częstotliwości.
Ponieważ moduły wewnętrzne są przewidziane głównie jako nośniki czujników, są obsługiwane przez rdzeń CM4 sterujący autopilotem. Podobnie FRAM zawiera konfigurację autopilota i modułów, wiec siedzi na tej samej magistrali. Analogicznie rozszerzenie we/wy (U28) steruje wyłącznie modułami, wiec jest na magistrali przypisanej do tego rdzenia. W projekcie są jeszcze dwa takie układy, ale one są sterowane z innej magistrali SPI, dostępnej dla rdzenia CM7.
Do parzystych nóżek górnych złączy jest doprowadzona 4-bitowa magistrala QSPI, mogąca pracować z prędkością do 133 MHz. Ze względu na prędkość transmisji nie ma filtra EMC, który na tej częstotliwości zbyt mocno degradowałby sygnał. Zamiast filtra są szeregowe rezystory. Magistrala QSPI jest przewidziana do transferu dużej ilości danych, np. obrazu z kamery, więc nie może być podpięta pod rdzeń CM4 tylko pod CM7. Analogicznie dodatkowa pamięć Flash (U25) jest do użytku rdzenia CM7 więc siedzi na tej samej magistrali. Jest bardzo mało prawdopodobne, aby dało się zastosować więcej niż jeden moduł obrabiający dane z kamery, więc zrezygnowano z adresowania na magistrali QSPI. Żeby jednak rozgraniczyć między pamięcią Flash a modułem, zastosowano inwerter (U46). Niski poziom sygnału MOD_QSPI_CS idący bezpośrednio z kontrolera adresuje pamięć, a wysoki przechodzący przez inwerter (więc finalnie również niski) adresuje moduł, przy okazji przechodząc przez filtr (U26).
Dolne złącza modułów dostarczają zasilania 3,3 V oraz 5,0 V, dostarczają sygnał /RESET, po dwie linie We/Wy do każdego modułu oraz magistralę CAN. Nie widzę specjalnej funkcjonalności dla CAN na modułach wewnętrznych, ale ponieważ było wolne miejsce i nie komplikowało to mocno płytki, więc jest na wszelki wypadek.
W dolnym złączu pozostaje jeszcze do omówienia linia MOD_ID, służąca do identyfikacji modułu. Polega to na tym, że na płycie głównej każde gniazdo modułu ma opornik połączony do napięcia „analogowego”, a drugi opornik na module jest podłączony do masy. Razem oporniki tworzą dzielnik napięcia podłączony portami MODW_ANALOG_ID1 ...4 do obwodów mierzących napięcia analogowe. W zależności od proporcji oporników można uzyskać różne napięcia, które podane na przetwornik A/C są podstawą do identyfikacji modułu. Taki mechanizm był stosowany w APL2. Tam na module był montowany zestaw oporników z 5-bitowej skali 1k, 2k, 4k, 8k i 16k. Każdy typ modułu miał przypisany mu adres i ten moduł można było wetknąć w dowolne gniazdo, gdzie był identyfikowany i mógł być poprawnie obsłużony. Analizując konkurencję, zaobserwowałem, że do identyfikacji dodatkowych modułów używa pamięci EEPROM, gdzie można zapisać sporo więcej, niż tylko identyfikator. Ponieważ każdy moduł ma dostęp do I2C, jest to potencjalna alternatywa rozwojowa, jednak troszkę droższa i wymagająca przy produkcji takiego modułu więcej pracy związanej z zaprogramowaniem tej pamięci.
Moduł nr 2 w górnym gnieździe ma na linii MOD_I2C4_SCL_F układ U16B. Są to dwa tory z 6-torowego filtra NUF6401MN. Rysując płytkę, było już tak gęsto, że nie było jak pociągnąć ścieżki SCL do modułu, a po drodze był niewykorzystany w pełni filtr. Przejście przez niego uprościło prowadzenie ścieżki kosztem większej rezystancji i pojemności na magistrali. Mając w alternatywie nie podłączać I2C do tego modułu, zdecydowałem się na przejście przez filtr. Może to ograniczyć częstotliwość pracy I2C. Gdyby to było krytyczne dla projektu to filtr można przylutować przesunięty o jedną lub dwie sekcje, tak aby sygnał SCL przechodził tylko przez jedną gałązkę filtra albo nie przechodził wcale i trzeba byłoby go przeciągnąć kynarem. To są odwieczne dylematy nowego sprzętu. Dopiero praktyka pokaże, które rozwiązanie jest właściwe.
Moduły zewnętrzne
Ten fragment schematu opisuje część gniazd na dłuższych bokach płytki, podłączonych przez filtry do peryferiów mikrokontrolera. Jeden z filtrów jest na liniach danych i jego zadaniem jest chronić wejścia kontrolera przed wyładowaniem elektrostatycznym oraz tłumić wychodzące i wchodzące zakłócenia elektromagnetyczne. Drugi filtr jest obecny na linii zasilania, bo tamtędy również mogą wchodzić i wychodzić zakłócenia. Tam nie ma ochrony przed elektrostatyką, gdyż linia zasilania ma dużą pojemność (setki uF) i taki impuls zostanie zaabsorbowany w tej pojemności, a dodatkowo linia zasilania ma regulator napięcia, który utrzymuje je na właściwym poziomie. Filtr zasilania składa się z dławika ferrytowego, mogącego przepuścić 2 A prądu stałego, a dla częstotliwości 100 MHz jego impedancja wynosi 100 Ω, więc razem z obecnym kondensatorem 10 uF tworzą filtr o częstotliwości odcięcia (-3 dB) ok. 200 Hz. Gdybym miał szukać słabych stron filtra, to może być nim niskie napięcie pracy kondensatora wynoszące 6,3 V. Przy pracy to jest wystarczające, ale przy podłączaniu wtyczki może pojawić się iskrzenie i wtedy kondensator może się przebić. Gdyby tak się działo, trzeba będzie wymienić kondensatory na takie o wyższym napięciu i być może trochę mniejszej pojemności.
Telemetria
Złącze w standardzie Pixhawka służy do obsługi komunikacji przez radiomodem lub bluetooth. W kontrolerze podłączone jest do UART z kontrolą przepływu (linie CTS i RTS). W APL2 to był główny port do komunikacji ze światem. W przypadku zasilania radiomodemów o dużej mocy (> 500 mW) trzeba zwrócić uwagę, czy ferryt filtra da radę przepuścić wymagany prąd zasilania. Radiomodem potrafi mocno szarpać prądem, a to powoduje, że ferryt pracuje z prądem zmiennym o dużej częstotliwości i jego impedancja wzrasta, przez to rośną straty mocy wydzielane na nim. Ponieważ nie wiemy, co będzie przyłączone do złącza, trzeba mieć to na uwadze. W przypadku wystąpienia problemów, można je rozwiązywać, podłączając równolegle „na barana” dodatkowe dławiki, aby zmniejszyć ich wypadkową impedancję oraz kondensatory, aby energia w nich gromadzona mogła częściowo nasycić impuls pobieranego prądu, Wtedy prąd wysokiej częstotliwości płynie częściowo z kondensatorów odciążając ferryt.
CAN
Złącze w standardzie Pixhawka służy do obsługi czujników pokładowych komunikujących się po magistrali CAN. W obecnej chwili na rynku dostępne są odbiorniki GPS z magnetometrem marki HERE. Niewykluczone, że za jakiś czas będzie więcej dostępnych urządzeń. Pierwotnie na rynku były dostępne urządzenia pracujące z prędkością transmisji 1 Mbita, ale najnowsze mają możliwość pracy z prędkością do 8 Mbitów, więc zastosowano sterownik (U14) zapewniający taką prędkość komunikacji. Ponieważ magistrala CAN musi być terminowana na obu końcach rezystancją 120 Ω, więc ten koniec magistrali jest terminowany szeregowo połączonymi opornikami 62 Ω (R20 i R21). W połowie terminacji jest połączenie przez kondensator (C55) do masy, gdyż tak zaleca producent sterownika. Taki połączenie ma dodatkowo tłumić szum na linii. Magistrala wychodzi na zewnątrz, ale też jest doprowadzona do modułów wewnętrznych, aby też mogły komunikować się z modułami zewnętrznymi.
Sterownik CAN może być wyłączany, gdy nie jest używany, aby zmniejszyć pobór prądu i emisję zakłóceń. Służy do tego pojęcie STB w sterowniku i dochodzący do niego sygnał MODZ_CAN_STBY. Sterowniki CAN zwykle zasilane są napięciem 5 V. Tutaj, zasilany jest z napięcie obecnego w gnieździe. Dodatkowo ma wejście VIO do zasilania części interfejsowej, więc komunikacja ze sterownikiem jest na standardowym poziomie 3,3 V.
GNSS UART8 & I2C
Złącze w standardzie Pixhawk skupiające w sobie podstawowe linie UART i dodatkowo magistralę I2C. Podstawową, historyczną funkcją tego złącza było podłączenie odbiornika GNSS z wbudowanym magnetometrem komunikującym się po I2C. Obecnie jest kilka innych alternatyw podłączenia odbiornika GNSS, ale warto mieć dostępne klasyczne rozwiązanie. Dostępny tutaj UART jest również dostępny na innym złączu w formacie RS422. Ponieważ jest ograniczona liczba dostępnych UART-ów, jeżeli korzystamy z niego w jednym formacie, to w drugim powinien być niedostępny. Tak więc w przypadku użycia go w formacie RS422, złącze może pełnić funkcję wyłącznie jako I2C.
UART8 RS422
Złącze w standardzie Pixhawk pozwalające komunikować się po interfejsie RS422. Pozwala ono na stosowanie długich linii, przy ograniczonej prędkości nawet do kilometra. Z akcesoriów modelarskich na RS422 spotyka się co najwyżej specjalistyczne serwa, ale złącze to zostało dodane ze względu na koncepcję wykorzystania płyty głównej jako stacji naziemnej z możliwością sterowania anteny śledzącej. W realiach wojny na Ukrainie okazało się, że stacja naziemna jest łatwa do wykrycia metodami radiopelengacji i narażona na wrogi ostrzał. Aby zapewnić obsłudze naziemnej elementarne bezpieczeństwo, należy odsunąć ją od stacji. Przy zastosowaniu klasycznego złącza UART TTL czy nawet RS232 odsunięcie się na bezpieczną odległość rzędu 50-100 m nie jest możliwe. RS422 pozwala na uzyskanie łączności na takim dystansie i to jest główny cel obecności tego sterownika na płytce.
Impulsy we/wy
Złącze skupiające w sobie dwa porty licznika umożliwiające pomiar przychodzących impulsów lub generowanie własnych. W APL2 złącze obsługiwało czujnik sonaru mierzącego wysokość od ziemi. Potencjalnie jako wejście może mierzyć prędkości obrotowe np. śmigła, być wejściem licznika Geigera.
Wyjścia otwarty dren
To 4-pinowe złącze ma piny pogrupowane po dwa, w celu zwiększenia obciążalności prądowej i jest wyprowadzeniem na zewnątrz drenów dwu tranzystorów mocy NMOS. Piny 1 i 2 są połączone z tranzystorem pierwszym, piny 3 i 4 z drugim. Parametry tranzystorów pozwalają na przepływ ciągłego prądu 15 A i pracę z napięciem do 60 V. Ich zadaniem jest obsługa wysokoprądowych urządzeń np. reflektor oświetleniowy, zamek elektrozłącza, termiczny zapalnik rac. Na schemacie linią przerywaną zaznaczono przykładowe obciążenia w postaci żarówek. Z jednej strony podłączone są do dodatniego bieguna zasilania, a masa jest włączana tranzystorami.
Ktoś zwrócił mi uwagę, że złącze jest narysowane z błędem, bo obie żarówki są podłączone do tego samego tranzystora, a drugi jest podłączony do masy. Tak to może wyglądać, ale piny złącza S1 i S2 to są blaszki po obu stronach złącza pełniące funkcję mechanicznego utrzymania złącza, aby nie trzymało się płytki na samych pinach. Na schemacie są podłączone do masy, aby ułatwić propagację tego najważniejszego sygnału. S1 i S2 są rysowane po przeciwnej stronie niż sygnały elektryczne i w tym konkretnym przypadku nie było więcej miejsca, aby rozsądniej połączyć te symboliczne żarówki.
Debugowanie/UART7
Jest to złącze do programowania kontrolera przez piny SWDIO i SWDCK. Dodatkowo jest tam UART7, który w projekcie Pixhawk służy jako konsola dla programisty. W tej chwili jeszcze nie wiem, czy jest potrzeba posiadania na stałe konsoli. Jeżeli nie to, to złącze może być wykorzystywane jako kolejny UART z pominięciem pinów programujących, które muszą pozostać w swojej roli. To złącze jako jedyne ma zasilanie z 3,3 V, a nie z 5,0 V jak większość złączy. Wynika to z tego, że programator JTAG wymaga obecności napięcia do zasilania swoich obwodów wyjściowych, aby pracowały na takim samym napięciu jak programowany mikrokontroler.
Obwody SPI CM7
Ta część schematu jest przedłużeniem modułów zewnętrznych i zawiera niemalże zgodne ze standardem Pixhawk gniazdo SPI a przy okazji kilka innych układów podpiętych do tej samej magistrali. Pamiętasz, że magistrala SPI występowała w modułach wewnętrznych? Ta magistrala jest prawie taka sama, różnica polega na tym, że tamta była podłączona do rdzenia CM4 sterującego autopilotem, a ta jest podłączona do rdzenia CM7 sterującego multimediami i całą resztą peryferii. Układy podłączone do magistrali to są expandery IO, czyli 8-bitowe porty równoległe sterowane po SPI. Chodzi o to, że mikrokontroler ma za mało wolnych nóżek, aby obsłużyć wszystkie wymagane funkcje i cześć wolnozmiennych sygnałów może zostać obsłużona za pośrednictwem tak sterownych portów. To są zwykle sygnały konfigurujące pracę, włączające peryferia lub odbierające z peryferiów sporadyczne sygnały. Jednym z takich sygnałów jest LED statusu podłączony do U43. Na schemacie są użyte 3 takie same układy expanderów: U41, U42 i U43. Każdy z nich ma dwa wejścia adresujące, więc mogą pracować na jednym sygnale „Chip Select”.
Domyślnie na porcie SPI będzie pracował wyświetlacz od Raspberry Pi z wejściem SPI, przynajmniej na etapie rozwoju a później jedną z możliwości jest scalony sonar ICU-20201 i zasięgu 5 m. Sonarów może być kilka a wyświetlacz pod względem sterowania to dwa urządzenia: właściwy wyświetlacz i panel dotykowy ekranu. To dlatego złącze ma dwa sygnały „Chip Select” i 3 linie we/wy.
Do sterowania liniami „Chip Select” jest użyty dekoder U40 sterowany dwoma portami wy.: MODZ_ADR0 i ...1. Z wyświetlacza i wszystkich portów wychodzi jedna zbiorcza linia przerwań. Wymaga to skonfigurowania wyjścia INT expanderów jako otwarty dren, a podciąganie jest zapewnione przez opornik R83. Po wykryciu przerwania program będzie musiał odczytać rejestry statusy wszystkich trzech układów, aby stwierdzić skąd pochodziło przerwanie i dopiero będzie mógł je obsłużyć.
Serwomechanizmy i odbiorniki RC
Ta część schematu opisuje obwody podłączone do największego złącza CN12 skupiającego odbiorniki RC i serwa. Wszystkie sygnały przechodzą przez scalone filtry U19, U21 i U23 zabezpieczające przed wyładowaniami elektrostatycznymi i przepływem zakłóceń w obie strony. Pierwsze dwa wejścia służą do analizy sygnału z odbiorników RC. Są podłączone do portu, który może byś konfigurowany jako odbiornik UART, czyli odbierać sygnał S-Bus lub wejście licznikowe, czyli odbierać sygnał PPM, lub inny dający się interpretować przez pomiar czasu. Pomiędzy wyjściem filtra a procesorem jest układ U18 będący dwukanałowym inwerterem. Jego zadaniem jest odwrócić zanegowany sygnał S-Bus do postaci czytelnej dla kontrolera. W przypadku sygnału PPM negacja nie ma znaczenia, wystarczy inaczej interpretować sygnał.
Kolejne dwa kanały tym razem już wyjściowe też mają po drodze inwerter i skierowane są do portów mających nadajnik UART i timer. Te dwa kanały mogą być normalnymi kanałami wyjściowymi do sterowania serw lub regulatorów, ale też mogą być wyjściami S-Bus. Razem z nimi kolejne 6 kanałów wyjściowych tworzy blok 8 kanałów, z których każdy kanał jest osobnym wyjściem licznikowym mogącym pracować z maksymalną częstotliwością 400 Hz lub mniej, jeżeli będzie taki życzenie. Ten blok wyjść domyślnie służy do sterowania wielowirnikowcem, bo tam jest istotna wysoka częstotliwość odświeżania wyjść.
Pozostałe 8 kanałów wyjściowych zrealizowana jest jednym kanałem przy użyciu dekodera 1:8. Kanał sterujący, pracujący z częstotliwością 400Hz wchodzi na wejście E1 dekodera i stamtąd aktywny impuls jest rozdzielany na jedno z 8 wyjść sterowanych trzema liniami adresowymi ADR_SER0..2. Tutaj też są pewne możliwości konfiguracji. Możemy mieć jeden kanał 400 Hz, 2 kanały 200 Hz, 4 kanały 100 Hz lub 8 standardowych kanałów 50 Hz.
W złączu CN12 środkowy rząd pinów służy do dystrybucji zasilania. Zasilanie o ile jest potrzebne, może być podane przez złącze XT300 (CN13), lub standardowo przez wolne wejścia. Napięcie jest mierzone przez dzielnik R25 i R26. Zakres pomiaru sięga 13 V. Oprócz tego jest LED D2 sygnalizujący obecność zasilania na szynie serw. Zasilanie dla odbiorników brane jest z systemowego zasilacza 5V i przechodzi przez podwójny filtr Pi złożony z dławików FE11 i FE14 i kondensatorów C97, C98, C61 i C61. Celem filtra jest możliwie jak najlepsze odfiltrowanie potencjalnych zakłóceń pochodzących z pracy przetwornicy lub innych układów.
Obwody wejściowe zasilania
APL3 ma 3 wejścia zasilające: dwa złącza (CN23 i CN24), takie same jak w Pixhawku oraz USB-C. Każde z wejść jest włączone przez układ typu „hot swap” (U32, U34 i U35) działającym jak idealna dioda, czyli pozwalającym przechodzić napięciom zasilającym tylko do układu, a nie z powrotem. Układy te stertują tranzystorami (T6, T7 i T8) włączającymi dane źródło do wspólnej szyny zasilania. Każde ze źródeł ma pomiar swojego napięcia oraz wyłącznik sterujący wejściem OFF układu. Dzięki temu będzie można opracować strategie wykorzystania pakietów podczas lotu typu, najpierw jeden, potem drugi, na koniec oba.
Wejścia zasilające mają dwa dodatkowe piny dedykowane do oceny stanu pakietu na dwa różne sposoby zależne od posiadanego sprzętu. Te dwa piny wchodzą na 3-polowe zwory, gdzie dany pin może być przekierowany na wejście analogowe do pomiaru napięcia i prądu z zewnętrznego czujnika prądu i napięcia. Może też być przełączony na magistralę I2C, po której mikrokontroler będzie mógł komunikować się z managerem baterii (BMS) i odczytać z niego parametry pakietu.
Posiadając wiele pakietów trudno było by aby każdy z nich miał unikalny adres na magistrali, więc adres dla wszystkich managerów będzie mógł być jeden a przełączany jest sygnał zegarowy SCL idący do pakietu. Do tego służy dwukanałowy multiplekser U33.
Schematy zasilania
W ramce z lewej strony przedstawione są trzy podstawowe schematy zasilania urządzenia, chociaż może być ich więcej. Najprostszy układ polega na tym, że podłączone jest USB-C i oba pakiety. Obciążenie albo jest osobne dla obu pakietów, albo wspólne i wtedy energia z pakietów musi przechodzić przez diodę lub wspominany wyżej układ hot swap, tylko umieszczony nie na autopilocie, ale na obwodach dystrybucji energii. W takim układzie nie mamy informacji o pobieranym prądzie, a napięcie możemy odczytać układu pomiarowego każdego kanału zasilania APL3.
Drugi wariant polega na wykorzystaniu czujnika prądu i napięcia włączonego między pakiet a obciążenie. Wyjścia czujnika podane są na wejścia pomiarowe. W tym układzie mamy zdublowany pomiar napięcia. Inną odmianą tego wariantu jest wykorzystanie „power bricka” z Pixhawka. Tam na wejście będzie podane 5V z przetwornicy a nie napięcie pakietu, ale to nadal będzie działało.
Trzeci najbardziej rozbudowany wariant obejmuje BMS wbudowany w pakiet. Linie komunikacyjne I2C pakietu łączą się z wejściami I2C we wtyczce zasilającej i mikrokontroler może odczytać znacznie więcej parametrów pakietu niż tylko napięcie i prąd. BMS musi znać napięcie każdego ogniwa i licząc energię, wie ile jej jeszcze znajduje się w pakiecie. Jest to istotne, gdy mamy pakiety częściowo rozładowane i człowiekowi lub maszynie łatwiej będzie ocenić czy z tym pakietem jest możliwy dany lot.
Przetwornice
Pierwsza koncepcja zasilania urządzenia polegała na wykorzystaniu zewnętrznej przetwornicy dostarczającej 5 V, tak jak jest to zrobione w Pixhawku, jednak nawet wtedy trzeba było dać przetwornicę, aby z 5 V zrobiła 3,3 V. Przy takim podejściu koncepcja stosowania BMS wydawała się trudniejsza do zrealizowania. Finalnie zdecydowałem się na wysokonapięciową przetwornicę (U36) umożliwiającą pracę z napięciem sięgającej do 38 V czyli pakietu 9S. Pewnym problemem było podejście do zagadnienia stabilizacji napięcia 5 V i pracy z USB ponieważ każda przetwornica obniżająca napięcie musi mieć napięcie wejściowe odpowiednio wyższe, aby mogła działać. Rozwiązaniem okazała się przetwornica (U45), mogąca pracować zarówno przy obniżaniu, jak i podnoszeniu napięcia. Jej wadą jest to, że jest dosyć droga, ale jej zalety przeważyły nad wadami. Może ona pracować z napięciem wejściowym do 36 V czy 8S i to określa górną granicę napięcia wejściowego dla urządzenia. Jeżeli docelowe urządzenie ma pracować z większymi napięciami, potrzebna będzie dodatkowa przetwornica obniżająca napięcie do poziomu poniżej 36 V.
Dopełnieniem obwodów zasilania jest LDO (U31) dostarczające stabilizowane 3,0 V do obwodów analogowych. Zasilana jest z 3,3 V a jej spadek napięcia jest rzędu 100 mV, czyli ma jeszcze 200 mV zakresu regulacji. Gdyby to się okazało zbyt mało, to trzeba będzie ją przełączyć na pracę z 5 V.
Obwody analogowe
W projekcie nie ma dużo pomiarów analogowych, jednak w kontrolerze udało się wygospodarować zaledwie dwa wejścia z przetwornikiem analogowo-cyfrowym (A/C). W związku z tym trzeba było zastosować multiplekser analogowy, aby można było przełączać obwody pomiarowe do dwu dostępnych wejść pomiarowych. Zastosowano multipleksery HER4051 (U37 i U38). Do przełączenia kanałów zastosowano 3 linie MOD_ADR0..2. Jeden kałan przetwornika mierzy jeden z parametrów zasilania, drugi jest wykorzystywany do identyfikacji modułów i obsługi 4 zewnętrznych linii analogowych dostępnych na złączach (CN26 i CN27).
Rejestrator i USB
Rejestrator
Rejestrator, czyli logger, jest narzędziem umożliwiającym zapis danych na karcie micro SD. W APL2 rejestrator działał na interfejsie SPI i dane przesyłał po jednej linii z maksymalną prędkości 20 MHz i umożliwiał zapis logu. Tutaj jest pełen 4-bitowy interfejs z możliwością taktowania go zegarem ponad 100 MHz, aby umożliwić zapis strumienia wideo. Gdy wczytamy się w specyfikację karty SD, to ona ma szereg klas, którym odpowiadają różne prędkości transmisji i różnym napięciom pracy. Aby umożliwić pracę z większymi prędkościami, okazało się że, trzeba obniżyć napięcie na złączach karty do poziomu 1,8V. Aby to zrealizować, zastosowano konwerter napięć U11 zawierający obwody ochrony przed ESD oraz podwójny stabilizator mogący dawać 1,8 V i 3,3 V. Układ ma dwa wejścia włączające poszczególne napięcia EN1 i EN2. Jedno z wejść jest sterowane bezpośrednio, drugie przez inwerter na tranzystorze T9, więc w zależności od poziomu napięcia sterującego pracuje stabilizator 1,8 V lub 3,3 V. Nie byłem pewien, jak zachowają się wyjścia stabilizatora w chwili przełączania, więc połączyłem je przez oporniki 10 Ω aby zapobiec dużym prądom rozładowywania się lub ładowania kondensatorów. Tak przygotowany interfejs karty powinien móc pracować w standardzie UHS-I, wykorzystać karty oznakowane Class 10 i zapewnić transfer umożliwiający zapis obrazu HD na kartę.
USB
Ponieważ od jakiegoś czasu standardem złącza USB jest USB-C, więc zostało ono użyte w projekcie, tym bardziej że zależy nam na zasilaniu z USB co dla klasycznych USB mini czy micro i wydajności 500 mA nie pozwoliłoby na zasilenie urządzenia. Do ochrony linii danych wykorzystano specjalizowany układ filtra U12. Długo zastanawiałem się, czy umożliwić używanie USB jako hosta, tak aby móc podłączać do niego inne urządzenia i finalnie zdecydowałem się, chociaż nigdy tego jeszcze nie robiłem i nie bardzo widzę zastosowanie jako host. To czy urządzenie jest hostem, czy device, zależy od stanu linii CC1 i CC2, które mogą być podciągnięte przez opornik 5,1 k do masy w przypadku device lub do zasilania w przypadku hosta. Urządzenie po drugiej stronie mierzy to napięcie i na podstawie wyniku pomiaru wie z kim ma do czynienia po drugiej stronie. Możliwość przełączania poziomu została zrealizowana przy pomocy dwu tranzystorów T2 i T3. Aby móc pracować jako host, urządzenie musi mieć możliwość zasilenia urządzenia po drugiej stronie. Do tego został użyty dedykowany podwójny przełącznik U44, który włącza napięcie 5 V na złącze i wykrywa przeciążenie.
Pomimo że sygnały wejściowe USB mają indeks HS, co sugeruje HighSpeed, to mikrokontroler posiada jedynie interfejs do FullSpeed, czyli przepustowości 12MBit/s. Aby móc używać FS należałoby dodać zewnętrzny PHY, co wiąże się z zajętością kilku portów dostarczających krytycznie ważne funkcjonalności urządzenia. Robiąc bilans korzyści i strat wyszło mi, że prędkość FS jest wystarczająca i straty funkcjonalności przewyższałyby korzyści większej przepustowości.
Ethernet 100 Mbit
Podstawowym złączem komunikacyjnym APL3 jest Ethernet. Po prostu tylko to łącze potrafi zapewnić przepustowość umożliwiającą przesyłanie obrazu i łatwe włączenie bezzałogowca w sieć. Infrastruktura sieciowa daje dzisiaj szereg możliwości i w przyszłości raczej będzie rosła, niż zanikała. W taki sposób odbywa się komunikacja z dużymi bezzałogowcami, nawet tymi operującymi globalnie, przez satelitarną łączność internetową. W wersji amatorskiej powinien wystarczyć mały router, być może kiedyś uda się zrobić dedykowane łącze internetowe albo zaadoptować coś, co pojawi się na rynku. Mobilny internet nie jest egzotyką, raczej standardem, więc powinno dać się to zrobić.
Łącze Ethernetu wykorzystuje zewnętrzny PHY U30 podłączone do dedykowanych portów kontrolera. W ten sposób można uzyskać 10 lub 100 Mbit łącze pracujące pod kontrolą biblioteki LWIP. Układ jest taktowany kwarcem 25 MHz z mikrokontrolera. Gdyby okazało się, że linia połączeniowa jest zbyt długa i kwarc nie pracuje stabilnie, przewidziano możliwość zastosowania drugiego, lokalnego kwarca. Tak jak każde urządzenie sieciowe są tutaj dwa LED-y mogące sygnalizować podłączenie i pracę z prędkością 100 Mbit. Interfejs układu PHY wymaga sporej ilości oporników podciągających. Niektóre funkcjonalności można ustawić, wybierając to, czy wejście jest podciągnięte do zasilania czy masy. Z braku większego doświadczenia zastosowano standardową konfigurację. Tylko rozwój urządzenia może dać informację czy tak może zostać, czy coś trzeba będzie zmieniać.
W wielu płytkach rozwojowych PHY jest podłączony bezpośrednio do złącza RJ45. Ponieważ urządzenie może podlegać dużym zakłóceniom a w wariancie pracy jako stancja naziemna, może wymagać przedłużenia przewodu ethernetowego do kilkudziesięciu metrów więc zastosowano transformator separujący pomimo że jest to gabarytowo jeden z większych podzespołów na całej płytce. On nie kosztuje dużo i może być wciśnięty gdzieś w kącik, więc nie jest to dużym problemem i potencjalne korzyści przeważają nad uciążliwościami.
Pamięć
Zewnętrzna pamięć jest potrzebna do tego, aby móc odczytać obraz z kamery w pełnej rozdzielczości. Robiąc eksperymenty z kamerą bez pamięci, mogłem pracować na obrazie o rozdzielczości QVGA. Gdyby nie ograniczenia w wyświetlaniu można byłoby rejestrować obraz o rozdzielczości VGA, ale to wciąż mało. Kamera ma maksymalną rozdzielczość 2592×1944, co daje prawie 5 MB danych. Eksperymenty z obróbką obrazu pokazały, że użycie taniej, ale wolnej pamięci dynamicznej bardzo spowalnia obróbkę danych, dlatego potrzebna jest szybka pamięć statyczna. Największą pamięcią statyczną, jaką udało mi się znaleźć za rozsądne, chociaż i tak bardzo duże pieniądze ma 4 MB (2048×16). Ta pamięć wystarczy do obróbki sygnały o rozdzielczości HD, a gdyby trzeba było zachować obraz w pełnej rozdzielczości albo potrzeba byłoby dużo więcej pamięci to oprócz tego jeszcze 512 Mbitowa pamięć dynamiczna. Niewykluczone, że docelowo jedna z tych pamięci okaże się zbędna, ale to dopiero może pokazać praktyka.
Skoro z kontrolera wychodzą już magistrale danych i adresowa podpiąłem pod nie dodatkową pamięć Flash o pojemności 512 Mbit (64 MB). Tam będzie mógł zmieścić ewentualny kod programu, który nie zmieści się w pamięci kontrolera, tam mogą wylądować próbki komunikatów głosowych, tam będzie mógł być przechowywany log z lotów, zapis misji itp. Oprócz pamięci Flash z dostępem 16-bitowym jest jeszcze pamięć 128 Mbit z dostępem 4-bitowym wspominana w rozdziale poświęconym modułom wewnętrznym. Funkcjonalność pamięci dubluje się i tylko praktyka może pokazać, która z nich docelowo lepiej się sprawdzi.
Pamięci równoległe oprócz magistral adresów i danych posiadają jeszcze szereg linii sterujących dostępem do magistrali adresowaniem wewnętrznych struktur czy odświeżaniem. Pamięć Flash posiada sygnały FMC_NOE czyli aktywny niskim poziomem Output Enable, sygnał wystawiający dane na magistralę, FMC_NE3 czyli aktywni niskim poziomem sygnał Enable uaktywniający układ pamięci pod konkretnym zakresem adresów w odróżnieniu od NE1 czy NE2. Sygnał FMC_NWE jast aktywnym niskim poziomem sygnałem zapisu danych (Write Enable). Wejście pamięci WP (Write Protect) aktywne niskim poziomem logicznym jest podłączone do 3,3 V więc domyślnie nie ma zabezpieczenia przed zapisem. Wejście RESET inicjuje pamięć do stanu domyślnego. Wyjście RY/BY (Ready / Busy) określa dostępność pamięci w trakcie zapisu.
Pamięć statyczna oprócz omówionych sygnałów FMC_NE1, FMC_NWE i FMC_NOE ma jeszcze FMC NBL0 (nibble 0) i FMC NBL1 (nibble1) podłączone do wejść LB (Lower Byte) i UB (Upper Byte). Sterują one dostępem do magistrali danych części dolnej danych (bajty D0..D7) i górnej (D8..D15). Pamięć dynamiczna najbardziej skomplikowana z nich pod względem organizacji jest wewnętrznie podzielona na osobno adresowane bloki pamięci. Widać to po magistrali adresowej gdzie adresy kończą się na A12 a adresy A14 i A15 są użyte do adresowania wewnętrznych bloków pamięci. Pamięć ta jest taktowana dedykowanym zegarem FMC_SDCLK i ma sygnał jego bramkowania FMC_SDCKE0. Podobnie jak pamięć statyczna ma osobno sterowane 8-bitowe bloki pamięci FMC_NBL0 i FMC_NBL1. Podobnie jak w innych pamięciach ma sygnał Chip Select aktywujący układ FMC_SDNE0, sygnał pozwalający na zapis danych FMC_SDNWE oraz dwa występujące tylko w pamięciach dynamicznych sygnały odświeżania rzędów FMC_RAS i kolumn FMC_CAS macierzy pamięci. Calym tym galimatiasem zarządza FMC (Flexible Memory Controller) wbudowany w mikrokontroler. Potrafi współpracować z układem DMA, co pozwala zautomatyzować transfery danych z kamery do pamięci, a następnie do interfejsu komunikacyjnego lub karty pamięci.
Multimedia
Kamera DCMI
Kamera jest podłączona do kontrolera przez równoległy interfejs DCMI (Digital Camera Memory Interface). Ponieważ kamera zwykle jest ruchoma, połączenie musi być elastyczne. Dlatego wybrano typowe dla kamer połączenie elastyczną tasiemką. Kamera taktowana jest zegarem 24 MHz generowanym przez jeden z timerów. Wszystkie linie kontrolne i danych przechodzą przez zestaw filtrów EMC a zasilanie przez filtr LC. Układ połączeń w taśmie został tak ustawiony, aby sygnały szybkozmienne były ekranowane masą lub innymi sygnałami wolnozmiennymi. Przez pewien czas miałom pokusę wykorzystać istniejący na rynku układ obecny w dostępnych na AliExpress kamerkach, jednak jest ona na tyle niewygodny, bo większy o 4 żyły i wymaga podania 3 różnych napięć, które muszą być wytworzone na płytce głównej. Wydaje mi się rozsądniejsze umieszczenie stabilizatorów tych napięć na płytce kamery, tak jak to jest z robione w modułach kamer, których używałem do przeprowadzenia testów. Niestety moduły te nie mają wyjścia na tasiemkę, dlatego w pierwszym etapie rozwoju trzeba będzie wykonać jakiś konwerter a docelowo zaprojektować własną płytkę kamery.
Mikrofon
Jest to raczej nietypowe wyposażenie, ale zainspirowały mnie dwa zastosowania. Pierwsze to dron ratowniczy pola walki, za pomocą którego przeprowadzany jest wywiad medyczny z rannym żołnierzem. Drugie zastosowanie to komunikacja ukraińskich dronów z poddającymi się żołnierzami wroga i ich prowadzenie. Oba zastosowania są militarne, ale na rynku cywilnym też można sobie wyobrazić zastosowania. Być może mylę się, ale to okaże się po testach praktycznych. Wybrany został mikrofon komunikujący się po magistrali I2S. Jest tam zegar taktujący linia danych i linia aktywnego kanału, bo mikrofonów może być więcej. Włączanie i zasilanie mikrofonu (U6) jest z linii wyjściowej expadnera IO. Pobiera on na tyle mało prądu, że wydajność portu powinna wystarczyć do jego zasilenia.
Wzmacniacz audio
Poprzez głośnik wzmacniacz ma generować komunikaty głosowe, informując użytkownika o swoim stanie. Gadające urządzenia nie są niczym nowym. Coś takiego miał już SkyAssistant gdy w pierwszej dekadzie XXI wieku komunikował się z użytkownikiem w 16 językach. Wzmacniacz jest układem cyfrowym klasy D. Przyjmuje sygnał w formacie I2S i współdzieli magistralę z mikrofonem. Oba urządzenia wykorzystują jeden z dwu kanałów więc dane do wzmacniacza idą gdy linia kanału ma poziom wysoki a gdy ma niski odbierane są dane z mikrofonu. Wzmacniacz ma moc 2W i wymaga zewnętrznego głośnika, podłączanego do jednego ze złącz.
Zasoby mikrokontrolera
Na tej stronie znajduje się spis użytych zasobów mikrokontrolera, aby łatwiej można było się zorientować co jest już zajęte, a co jeszcze wolne. Pełni rolę notatek porządkujących. Być może będzie przydatne przy pisaniu oprogramowania. Jedną z istotnych rzeczy tam zawartych jest podsumowanie konsumpcji prądu typowej i maksymalnej dla użytych w projekcie układów. Zestawienie to było potrzebne do zaprojektowania zasilacza.
Na ostatniej stronie jest rysunek zwymiarowanej płytki. Wymiary podane na dole dotyczą środka kolejnego modułu wewnętrznego.