Systemy wbudowane

Jest to przedmiot składający się z dwóch form dydaktycznych: wykładu oraz laboratoriów. Dodatkowo na przestrzeni semestru studenci przygotowują projekt. Z powodu anomalii w prowadzeniu zajęć tymczasowe zasady zaliczenia są następujące:
  • Kolokwium z wykładu (40% oceny)
  • Projekt z wykładu (60% oceny)
  • Pozytywnie zaliczone laboratoria (sine qua non)

Wykład

Wykład odbywa się we środy, w sali 1.28/C13 o godzinie 15:15.
Od 11 marca wykłady odbywają się w formie prezentacji pdf do pobrania i samodzielnego opracowania.
Termin kolokwium: TBA

  • 26.02:
  • 04.03: systemy: wymagania, specyfikacja, krzywa życia produktu...
  • 11.03/13.03: magistrala CAN, wykład do samodzielnego opracowania: proszę pobrać (link), zapoznać się z treścią slajdów oraz zwrócić szczególną uwagę na pojęcia i teksty zewnętrzne oznaczone symbolem karcianego pika. Zalecam przeczytanie, a przynajmniej przekartkowanie podlinkowanych artykułów i stron WWW. W razie wątpliwości bądź dalszych pytań proszę o kontakt mailowy.
  • 18.03 programowalne procesory, HDL, technologia MOS... (slajdy oraz źródła VHDL). Do samodzielnego zapoznania się. Proszę standardowo przyjrzeć się specjalnie elementom oznaczonym symbolem pika, zajrzeć na YT, poszukać w Wikipedii...
  • 25.03 transmisja UART, wykład do samodzielnego opracowania [slajdy]. Jak zwykle, rzeczy, na które należy zwrócić szczególną uwagę ozaczyłem znakiem karcianego pika.
  • 01.04 protokół SPI, wykład do samodzielnego opracowania [slajdy]. Jak zwykle, rzeczy, na które należy zwrócić szczególną uwagę ozaczyłem znakiem karcianego pika. Tym razem krótko, następny wykład to I2C i czytanie specyfikacji.
  • 08.04 protokół OneWire, wykład do samodzielnego opracowania [slajdy]. Jak zwykle, rzeczy, na które należy zwrócić szczególną uwagę ozaczyłem znakiem karcianego pika. Protokół komunikacji OneWire oraz kilka praktycznych uwag jak czytać dokumentację komponentów (datasheets).
  • 15.04 protokół I2C i PROFIBUS, wykład do samodzielnego opracowania [slajdy]. Kilka pytań i poleceń ozaczyłem znakiem karcianego pika. Protokół komunikacji I2C oraz kilka drobiazgów na temat PROFIBUS (absolutnie nie wyczerpujące!).
  • 22.04 komponenty systemów wbudowanych, wykład do samodzielnego opracowania [slajdy]. Kilka pytań i poleceń ozaczyłem znakiem karcianego pika. Przegląd (skromny) z lotu ptaka różnych procesorów wykorzystywanych do sterowania systemami.
  • 29.04 systemy czasu rzeczywistego (1), wykład do samodzielnego opracowania [slajdy]. Kilka pojęć i poleceń ozaczyłem znakiem karcianego pika. Wprowadzenie do problematyki systemów czasu rzeczywistego oraz planowania zadań. Część pierwsza. W części drugiej przedstawienie schematów planowania.
  • 06.05 systemy czasu rzeczywistego (2), wykład do samodzielnego opracowania [slajdy]. Planowanie zadań. Algorytm EDD, EDF i schemat Bratley'a. Kilka pojęć i poleceń ozanczyłem znakiem karcianego pika.
  • 13.05 systemy czasu rzeczywistego (3), wykład do samodzielnego opracowania [slajdy]. Planowanie zadań z obostrzeniami. Algorytm LDF, modyfikacja do EDF, planista Rate-Monotonic (RM) W tym tygodniu więcej rzeczy do samodzielnego przeanalizowania - oznaczyłem je znakiem karcianego pika.
  • 20.05 systemy czasu rzeczywistego (4), wykład do samodzielnego opracowania [slajdy]. Planowanie zadań w Neutrino QNX: pojęcie wątku w systemie, planowanie sporadyczne, zjawisko odwrócenia priorytetów. Naprawdę zachęcam do przeczytania dwóch artykułów o problemie z Pathfinderem - oznaczyłem je znakiem karcianego pika.
  • 27.05 Kilka słow o bateriach, kilka słów o panelach solarnych. [slajdy]. Oznaczyłem znakiem karcianego pika kilka rzeczy do przeczytania.

Projekt


Projekt wykonujecie pojedynczo (zespoły jednoosobowe). Proszę zalogować się na eportal.pwr.edu.pl i odnaleźć kurs "Systemy wbudowane - projekt". Zamieściłem tam już zadania do wykonania w określonym terminie od 18 marca godz. 15:15. W razie trudności lub wątpliwości proszę o kontakt za pomocą forum kursu na eportalu (lepiej) lub przez e-mail (gorzej). Jest to nowa dla mnie forma prowadzenia zajęć, także proszę spodziewać się zmian i modyfikacji w miarę jak będę poznawał możliwości systemu.
Zadaniem projektowym jest stworzenie dokumentacji uprzednio wybranego i skonsultowanego z prowadzącym systemu wbudowanego. Zakres opracowania powinien obejmować:
  • Opis środowiska działania systemu i problemów z tym związanych.
  • Analizę zapotrzebowania na funkcjonalności w systemie.
  • Przedstawienie działania systemu (diagram UML itp.) ze szczególnym uwzględnieniem wygody użytkowania systemu, jego ergonomii, kompletności i tzw. "dobrych praktyk" (tj. logicznych rozwiązań).
  • Zestawienie komponentów systemu oraz ich wzajemne interakcje.
W szczególności, opis projektu powinien obejmować następujące dwa zagadnienia:
  1. Części składowe systemu. Opis komponentów pod kątem ich funkcjonalności (co robią), połączeń (zasilanie, interfejsy we/wy) oraz rodzaju przyjmowanych poleceń i generowanych danych (jakiego typu, jak często, itp.). Ta część powinna też zawierać opis wzajemnej komunikacji między tymi komponentami.
    Przykład: "Waga elektroniczna o rozdzielczości 0,5 g i maksymalnym obciążeniu 2500 g. Sygnały wejściowe (logika TTL): DataRequest, Reset, Tara (aktywne HIGH), sygnały wyjściowe: komunikacja równoległa, 8-bitowa, postać ramek: (...)"
  2. Logika działania. Opis stanów, w jakich system może się znaleźć, mechanizmy przejścia pomiędzy tymi stanami, inne założenia dotyczące np. czasu trwania w każdym z nich.
Konkretne nazwy układów wykonawczych nie są potrzebne, ani precyzyjny schemat połączeń elektrycznych. Opis powinien utrzymywać poziom ogólności diagramu blokowego. Oceniana będzie precyzja i czystość opisu, logika działania systemu.

Laboratoria

Zajęcia odbywają się w salach 317.2 i 317.3 budynku D1.

Proszę zalogować się na eportal.pwr.edu.pl i odnaleźć kurs "Systemy wbudowane - laboratorium". Zamieszczone są tam instrukcje na bieżące laboratorium oraz podany sposób oddawania zadań. Na tę chwilę (01:35, 18 marca) do kursu dostęp mają tylko studenci grupy dra Wodo i mojej, pozostałych proszę o cierpliwość - zostaniecie dopisani do kursu. Z oczywistych względów forma laboratoriów odbiega nieco od założeń, ale nadal pracujemy w okolicach autek tak, żeby gdy pojawi się taka możliwość - wrócić do laboratorium i „rzeczywiście” się nimi pobawić. Jednocześnie zbierajcie informacje i korzystajcie z możliwości, jakie daje eportal - uczę się tego narzędzia, także może różnie być - zobaczmy, jak to działa.

Prowadzący:

  • Patryk Kozieł -
  • Maciej Gębala -
  • Wojciech Wodo -
  • Przemysław Błaśkiewicz -
  1. Obejrzyj dokładnie płytkę Arduino UNO oraz dostępne Ci inne podzespoły pojazdu. Wykorzystaj opis płytki w sieci, aby zidentyfikować: główny mikrokontroler, piny we/wy (jakie mają funkcje?), diodę LED (ile ich jest? do czego służą?), zasilanie, reset.
  2. Uruchom środowisko programistyczne Arduino (możesz uruchomić na swoim laptopie). Połącz płytkę arduino przewodem USB z komputerem. Upewnij się, że w menu Narzędzia/Płytka oraz Narzędzia/Port wybrane są, odpowiednio, "Arduino/Genuino Uno" oraz port w stylu /dev/ttyACM0. Możesz sprawdzić, czy wszystko działa za pomocą Narzędzia/Pobierz informacje o płytce.
  3. Uruchom przykład Przykłady/Basics/Blink i zapoznaj się z kodem oraz samouczkiem. Zajrzyj też do odnośników z rozdziału "Learn more".
  4. Skompiluj kod (znaczek "ptaszka" z lewej strony belki menu). Sprawdź, jakie informacje o skompilowanym kodzie otrzymasz. Przeanalizuj je. Następnie wgraj (przycisk obok) kod na płytkę przyglądając się temu, co się z nią w tym czasie dzieje (wgrywanie możesz powtórzyć, żeby się upewnić). Sprawdź, czy Twoje domysły na temat kodu i faktyczne jego działanie są zbieżne. Jeśli nie - rozwiąż konflikt :)
  5. Pobierz ten kod i otwórz w środowisku. Ponownie przeanalizuj kod, postaw tezę co do tego, co on robi. Skompiluj i wgraj na płytkę. Wybierz Narzędzia/Monitor portu szeregowego (Ctrl+Shift+M), ustaw odpowiedni baudrate i zweryfikuj swoje domysły co do programu.
  6. Korzystając z dwóch przedstawionych programów, napisz swój, który:
    1. pobierze literę przez port szeregowy,
    2. wymruga ją za pomocą diody w kodzie Morse'a.
UWAGA! Od ubiegłych zajęć nastąpiła zmiana w autkach:
  1. Pojawiło się zasilanie bateryjne, podłączone do silników. Mogą one obracać kołami, w związku z tym, aby nie spowodować niekontrolowanego ruszenia pojazdu stojącego na biurku, przed włączeniem zasilania należy ustawić pojazd na podstawie z gąbki! Dostępny jest wyłącznik główny, odcinający zasilanie bateryjne. Jeśli Arduino podłączone jest przez kabel USB, to nadal będzie zasilane (ale tylko płytka).
Ta lista poświęcona jest sterowaniu silnikami. Pojazd wyposażony jest w dwa niezależne silniki napędzające przednie koła. W jaki sposób sterować silnikiem? Oczywiście przez podanie napięcia na jego dwa bieguny (są też inne silniki, posiadające więcej wejść, ale o tych innym razem). Chcielibyśmy, aby to Arduino sterowało silnikiem, podobnie jak w poprzednim tygodniu sterowało diodą (włącz/wyłącz). Jednakże nie można podłączyć silnika bezpośrednio do któregoś z pinów Arduino, o czym szerzej na wykładzie. Dlatego też w autku zamontowany jest moduł z układem L298, który będzie pośredniczył pomiędzy Arduino a silnikiem i odpowiednio włączał/wyłączał zasilanie pobierane bezpośrednio z baterii.
  1. Układ N298. Pobierz specyfikację układu. Przeanalizuj schemat na pierwszej stronie. Potraktuj obecne tam tranzystory NPN jako elektronicznie włączniki: jeśli na bazie (B) jest „HIGH”, to tranzystor przewodzi między emiterem (E) a kolektorem (C). Przeanalizuj, co się stanie, jeśli na „In1”, „In2”, „EnA” pojawią się różne kombinacje stanów LOW i HIGH. (W tym schemacie zasilanie z baterii podłączane jest do „+Vs” (na środku u góry) i do wspólnej „ziemi” -- symbol krótkiej, grubej, poziomej kreski np. na dole schematu). Silnik podłączany jest do wyjść „OUT1” i „OUT2”. Spróbuj wyobrazić sobie, jak za pomocą tego układu można sterować kierunkiem obracania się kół.
  2. Programowanie ruchu. Na autku znajdziesz taśmę 6 przewodów, które „pod pokładem” są połączone jak na powyższej fotografii. Uwaga. Autka w wersji 2.0 mogą mieć odwrócone kolory taśmy! Korzystając z dotychczas osiągniętych wyników, spróbuj podłączyć te przewody do pinów 2-13 na Arduino tak, by móc sterować jazdą w przód i do tyłu silnikami po prawej i lewej stronie. (Podpowiedź: przewody biały i żółty [wejścia „EnA” i „EnB” układu N298] podłącz do pinów zasilania „+5V” w okolicach baterii. Po podłączeniu pozostałych przewodów możesz na nich ustawiać stany „HIGH” i „LOW” tak, jak w przypadku świecenia diodą LED.)
  3. Sterowanie prędkością. Odłącz teraz przewody żółty i biały od zasilania „+5V” i podłącz je do pinów Arduino oznaczonych falką (~), są to: 3, 5, 6, 9, 10, 11. Są to piny, na których można wykonać operację analogWrite(), co spowoduje, że średnie napięcie na tym pinie można zmieniać pomiędzy 0V („LOW”) a 5V („HIGH”). [Więcej o tej technice, zwanej PWM - Pulse Coded Modulation na wykładzie.] Przetestuj, jak kręcą się koła dla różnych wartości zapisywanych do pinów En1 i En2 (zapisanie za niskich wartości może sprawić, że koła nie będą się poruszać).
  4. Rozbudowa biblioteki. Pobierz archiwum, rozpakuj i otwórz w środowisku Arduino. Przeanalizuj kod i uruchom go ustawiwszy uprzednio autko na podstawce! Dopisz do klasy Wheels metodę goForward(int cm) oraz goBack(int cm), której wywołanie spowoduje, że autko przemieści się o liczbę centymetrów podaną jako parametr.
Treść laboratoriów, materiały i mechanizm oddawania zadań na eportal.pwr.edu.pl - kurs "Systemy wbudowane - laboratorium".

Materiały pomocnicze w sieci i na papierze

  • Kurs Arduino na forbot.pl podstawy Arduino i środowisko oraz następne
  • Jedno z możliwych połączeń dla kompletnego autka:
    silnik: 10 - biały, 9 - fioletowy, 8 - szary, 6 - żółty, 5 - zielony, 4 - niebieski
    serwo: 3
    infra red: 2