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.
  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).
  Widok wnętrza autka. Pokazane rozprowadzenie zasilania. Prześledź drogę od baterii (od przełącznika - '+' baterii to czerwony przewód) do układu N298.
Uwaga. Na fotografii powyżej przewody zasilające silniki są podwójne i wielokolorowe. Na tym zdjęciu są tylko czarno-czerwone. To jest obecna konfiguracja autek.
Ta lista poświęcona jest sterowaniu silnikami. Pojazd wyposażony jest w cztery silniki połączone parami tak, że każda para napędza dwa koła po każdej stronie (a zatem koła obracają się jak w czołgu -- koła po jednej stronie mogą obracać się tylko w tą samą stronę). 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: mikrokontroler nie jest w stanie dostarczyć wystarczająco dużo prądu, by poruszyć silnikiem.. 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 przez stabilizator napięcia, utrzymujący stałe napięcie 6V (dwa akumulatory połączone szeregowo dają maksymalnie ok. 8.4V -- to nieco za dużo dla silnika).
  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