Sterowanie z użyciem systemów wbudowanych

Sterowanie przy użyciu systemu wbudowanego pozwala – w przeciwieństwie do tradycyjnych systemów sterowania, takich jak: PLC, PAC oraz bazujących na technologii PC – tworzyć rozwiązania idealnie dopasowane do wymagań obiektu. Najbardziej znaną grupę systemów wbudowanych stanowią mikrokontrolery, ale w artykule omawiamy także rodziny ASIC i FPGA.

Wbudowane systemy wykonują bardzo zróżnicowane zadania. Gromadzą tymczasowe dane i sterują prototypowymi urządzeniami, a także stanowią „mózgi” sprzętu elektronicznego powszechnego użytku. Cechują się bardzo różnym stopniem złożoności – od telekomunikacyjnych urządzeń przełączających do prostych układów realizujących funkcję budzika. Wielu zastosowaniom towarzyszą liczne wymagania, także odnośnie architektury sprzętu. To, czy rozwiązanie spełnia najlepiej kryteria użytkownika, nie zależy tylko od tego, jak dobry produkt jest w stanie stworzyć przy jego użyciu, ale także od cyklu życia tego produktu. Trzy architektury jednostek obliczeniowych CPU nadają się znakomicie do systemów wbudowanych: mikrokontrolery, układy FPGA (Field Programmable Gate Array) oraz ASIC (Application Specific Integrated Circuit).

Największą zaletą mikrokontrolerów jest możliwość przystosowania ich do wielu różnych zastosowań. Programuje się je w łatwych do nauczenia językach programowania, takich jak C lub C++. Wiele aplikacji z mikrokontrolerami jest jednak tak złożonych, że wymaga zastosowania systemu operacyjnego, takiego jak Linux czy Windows Embedded. Z kolei największą wadą mikrokontrolerów jest… możliwość przystosowania ich do wielu różnych zastosowań. Problem polega na częstej konieczności zaawansowanego programowania i wykorzystania pochłaniającego zasoby systemu operacyjnego. Dla wielu aplikacji wykorzystanie mikrokontrolerów stanowi przerost formy nad treścią.    

Charakterystyka układów ASIC i FPGA  
Dwie technologie wyróżniają się jako alternatywa dla mikrokontrolerów: układy FPGA o programowalnej matrycy bramek (stanowią jedną z rodzin układów programowalnych – przyp. red.) oraz układy specjalizowane ASIC, które realizują konkretne funkcje, założone przy produkcji układu.

Obie stanowią sprzętową implementację algorytmów boolowskich. Obie mają wysoką elastyczność zastosowania oraz realizują szeroki wachlarz funkcji logicznych zarówno prostych, jak też bardzo złożonych. Programowanie obu rodzin układów odbywa się przy użyciu tzw. języków opisu sprzętu HDL (Hardware Description Language), takich jak: VHDL oraz Verilog, zamiast tradycyjnego oprogramowania producentów niezależnych i języków wysokiego poziomu.

Różnice między przedstawionymi technologiami układów elektronicznych to:

  • koszt opracowania projektowego układu (NRE),
  • koszty zmienne,
  • możliwość ponownego programowania,
  • skalowalność,
  • czas potrzebny na wyprodukowanie określonej serii.

Układy FPGA charakteryzuje możliwość reprogramowania. Ułatwia to fazę tworzenia i doskonalenia prototypu, dokonywania drobnych korekt produkcyjnych, a także późniejszą modernizację i aktualizację funkcjonalności układu. W ten sposób skraca się czas,jaki mija od rozpoczęcia projektu do momentu wprowadzenia gotowego rozwiązania na rynek. Platforma FPGA to różnorodne układy programowane w taki sam sposób. Dzięki temu można dzielić koszty między różnymi projektami – w przeciwieństwie do projektów z układami ASIC i mikrokontrolerami.

Wikipedia opisuje układy FPGA jako układy elektroniczne zawierające programowalne elementy logiczne nazywane „blokami logicznymi” oraz programowalne połączenia między nimi. Bloki logiczne mogą być zaprogramowane do wykonywania podstawowych funkcji bramek logicznych, takich jak: AND lub XOR bądź bardziej złożonych kombinacji funkcji wykonujących operacje matematyczne lub dekodowanie sygnału.

Rodzinę ASIC stanowią układy o strukturze wewnętrznej przystosowanej do realizacji określonych zadań. Nie są to więc układy ogólnego zastosowania. Układem ASIC jest na przykład układ scalony zastosowany w telefonie komórkowym, wykonujący z góry założone funkcje i zaprojektowany specjalnie w tym celu. Projekt układu ASIC typu full-custom (użytkownik dostarcza producentowi pełną specyfikację, na podstawie której wykonywany jest chip) określa wszystkie warstwy wewnętrzne układu. Po złożeniu tworzą one elementy logiczne i połączenia między nimi. Zamiana kodu w postaci HDL na projekt układu scalonego odpowiada za duże koszty NRE układów ASIC.
Wykorzystanie FPGA lub ASIC rozpoczyna się od programów HDL. Zanim jednak wygenerowany będzie kod HDL, warto gruntowanie przetestować wszystkie zastosowane algorytmy, wykorzystując w tym symulację programową i sprzętową.

Proces tworzenia algorytmu
Początek tworzenia algorytmów pracy związany jest oczywiście z wymaganiami aplikacji i poczynionymi założeniami. Na przykład automatyczna kosiarka zostanie przetestowana całkowicie komputerowo, zaś algorytm sterowania będzie dodatkiem do wcześniej opracowanych modułów w języku C lub C++, pochodzących z różnych wcześniejszych projektów. Moduły będą wywoływane przez napisany specjalnie do tego zastosowania program nadrzędny, który stanowi opakowanie dla systemu wbudowanego. Program ten zostanie uruchomiony w specjalnym środowisku symulacyjnym – zawierającym także inne moduły symulujące silniki, sterowniki, czujniki i graficzny interfejs użytkownika.

Test poprawności i modyfikacje algorytmu sprawdzane są in silico, aby ustalić, czy algorytm pracuje poprawnie i czy zawsze pozostaje pod kontrolą. Dopiero po takim teście można przenieść go do platformy sprzętowej, która stanowi pierwszy prototyp zautomatyzowanej kosiarki do trawy. Następny krok to nowa seria testów. Algorytm pełni tutaj rolę pilota testowego dla platformy sprzętowej.

Podsystemy sprzętowe będą już prawdopodobnie przetestowane z wykorzystaniem systemów pomiarowych i sterujących, połączonych z komputerem klasy PC. Wynika to z faktu, że procedury testowe takich podsystemów są inne od procedur testowania algorytmów. Z wyłączeniem potrzeby weryfikacji współdzielonych zasobów sprzętowych. Ostatnim etapem testu komponentów sprzętowych jest ich integracja oraz kontrola współpracy między nimi. Do tej bowiem pory wszystkie testowane były oddzielnie.

Integracja systemu rozpoczyna się zwykle od sprawdzenia poprawności działania opracowywanego algorytmu podczas pracy na zintegrowanym komputerze jednopłytowym (SBC). Sprawdzany jest odpowiednik projektowanego algorytmu, napisany w języku wysokiego poziomu. To jest pierwszy moment, w którym algorytm w pełni kontroluje docelową platformę sprzętową.

Tu ujawniają się problemów, które wynikają z zależności pomiędzy sprzętem a oprogramowaniem, jak również z interakcji między poszczególnymi komponentami sprzętu. Sprzęt i oprogramowanie w systemach wbudowanych są tak silnie współzależne, że jakakolwiek zmiana jednego z nich wymusza zmianę drugiego. Elastyczność i możliwość reprogramowania SBC jest konieczna, aby procedura debugowania była wykonalna.  

Implementacja sprzętowa
Po rozwiązaniu wszystkich problemów można przejść do następnego etapu. Polega on na stworzeniu prototypu, który będzie wyglądał i pracował dokładnie tak, jak ostateczna wersja systemu. Układy ASIC oraz FPGA będą umieszczane w podobnych obudowach zawierających małą płytkę, na której będą umieszczone – poza samymi układami – pozostałe chipy.  

Układy FPGA wymagają dodatkowego elementu na płycie głównej – chipu programującego. FPGA mają tę samą piętę achillesową, co dynamiczne pamięci RAM – ich zawartość jest ulotna. Odłączenie zasilania od układu FPGA powoduje wymazanie programu (są układy FPGA programowalne wielokrotnie, zachowujące swoją konfigurację przy braku zasilania – przyp. tłum.). Pomimo tego projektanci wciąż chętnie implementują swoje algorytmy w FPGA.
Moduł sterowania ma podobną obudowę do wersji ASIC, jedank mozna go wielokrotnie programować. Również w tym przypadku mamy jednak do czynienia z piętą achillesową. Dopóki system jest używany i sprawdza się, trudno o lepszą alternatywę. Jest jednak duże prawdopodobieństwo, że wraz z upływem czasu pojawi się potrzeba zaktualizowania struktury układu, w celu dopasowania go do nowych wymagań. Niestety, w przypadku układów ASIC uruchomienie produkcji nowej partii jest bardzo kosztowne.  

Nawet jeśli projekt układu przeradza się w standardowy produkt używany w tysiącach urządzeń, względy ekonomiczne przemawiają za FPGA. Tylko w przypadku produkcji miliona lub większej ilości egzemplarzy układu możliwa jest amortyzacja ogromnych kosztów NRE, poniesionych na przeniesienie algorytmu pracy na strukturę układu ASIC (koszt takiego układu wykonanego w obecnie stosowanej technologii liczony jest zwykle w mln USD – przyp. tłum.). Oczywiście w przypadku produktów masowych warunek ten jest możliwy do spełnienia.

Przeniesienie algorytmu pracy do języka HDL dla FPGA może być trudne lub łatwe, zależnie od posiadanych narzędzi do konwertowania istniejących, gotowych rozwiązań programowych do języka HDL dla wybranej platformy sprzętowej. Dla przykładu, firma Mathworks współpracowała z producentami układów ASIC i FPGA, aby opracować biblioteki, które pomogą inżynierom generować kod HDL dla algorytmów utworzonych w Matlabie i Simulinku. Dostępne są także biblioteki konwertujące kod z języka C/C++ na HDL.

Oczywiście dobra praktyka inżynierska nakazuje, aby po każdej dużej zmianie w systemie przeprowadzić wszystkie procedury testowe jeszcze raz. Symulacje i testy będą konieczne, aby mieć pewność, że zaprogramowany przy użyciu HDL układ FPGA będzie wykonywał dokładnie tę samą procedurę, co oryginalny algorytm. Podobna sytuacja ma miejsce, kiedy konwertuje się program z FPGA do układu ASIC custom-design.  
C.G. Masi  
Artykuł pod redakcją inż. Łukasza Urbańskiego