SR — Laboratorium

Laboratorium

Laboratorium z kursu Sterowniki robotów dotyczy budowania rozwiązań sprzętowo–programowych ze szczególnym uwzględnieniem aspektów robotycznych. Zakres laboratorium obejmuje:

  • zapoznanie się z mikrokontrolerami ST,
  • debugowanie kodu dla mikrokontrolera w systemie wbudowanym,
  • wykorzystanie peryferiów mikrokontrolera takich jak: liczniki, ADC, DAC, kontroler pamięci DMA, I2C, SPI, USART, USB,
  • obsługa przerwań,
  • komunikacja z urządzeniami zewnętrznymi,
  • sterowanie silnikami przy wykorzystaniu sterowników PID.

Przygotowanie do zajęć

Do każdych zajęć należy się przygotować minimum projekt w programie STM32CubeIDE do każdego z ćwiczeń w ramach laboratorium. Ponadto, jeśli zadanie wymaga wyliczenia wartości parametrów, określenia stałych czasowych itp. należy te obliczenia przygotować przed zajęciami. Dodatkowo zaleca się również przygotowanie szkieletu programu, który implementuje problematykę wskazanym w zadaniu do laboratorium.

Zadania w ramach laboratorium lab05 oraz lab06 wymagają przygotowania w szerszym zakresie, a mianowicie zapoznania się z dokumentacją techniczną układów oraz czujników, które będą dodatkowo wykorzystywane podczas laboratorium.

Zasady zaliczenia

  • praca oceniana jest w trakcie zajęć, po których student otrzymuje ocenę. Ocena ta jest przyznawana zarówno za zrealizowane zadanie jak i odpowiedzi na pytania,
  • ocena końcowa z laboratorium to średnia arytmetyczna ze wszystkich otrzymanych ocen,
  • dopuszcza się jedną nieobecność, przy czym nie zwalnia to z oddania laboratorium. Nieobecność lub poprawę laboratorium można zrealizować na każdych kolejnych zajęciach lub zajęciach odróbkowych. W uzasadnionych przypadkach dopuszcza się większą ilość nieobecności w szczególnych przypadkach, które są rozpatrywane indywidualnie,
  • dopuszcza się możliwość wystąpienia kartkówek lub tzw. wejściówek, które dopuszczają do realizacji zajęć,
  • niedopuszczalne są plagiaty jak również praca niesamodzielna. W przypadku ich wystąpienia ćwiczenie laboratoryjne jest niezaliczone na ocenę niedostateczną. Ponadto, dopuszcza się możliwość niezaliczenia kursu w przypadku rażącego naruszenia tego punktu. Praca może być poddana weryfikacji przez systemy antyplagiatowe,
  • zrealizowane zadania należy umieszczać na eportalu. Zamieszczenie wszystkich zadań na eportalu jest warunkiem koniecznym do uzyskania pozytywnej oceny z ćwiczenia laboratoryjnego.

Eportal

https://eportal.pwr.edu.pl/course/view.php?id=6083

Lab — BHP

Omówienie zasad zaliczenia oraz BHP.

Lab — wprowadzenie

Wprowadzenie do mikrokontrolerów ST na przykładzie płytki ewaluacyjnej NUCLEO-L476RG. Zapoznanie się z cyfrowymi wejściami/wyjściami ogólnego przeznaczenia. Wykorzystanie środowiska programistycznego IDE do edycji i budowy projektu, a także narzędzia ST-Link Utility do wgrywania firmware na mikrokontroler.

Instrukcja: sr_lab01.pdf

Lab — zaawansowane techniki debugowanie

Środowisko STM32CubeIDE, jako narzędzie do debugowania kodu źródłowego. Zapoznanie się z technikami przekierowywania wyjścia funkcji printf() na dwa różne interfejsy (USART oraz SWV). STM32CubeMonitor, jako narzędzie diagnostyczne do wizualizacji i modyfikacji pamięci mikrokontrolera w czasie rzeczywistym.

Instrukcja: sr_lab02.pdf

Lab — liczniki i przerwania

Obsług liczników w trzech podstawowych trybach pracy: generator podstawy czasu, generator sygnału PWM, wejście Input Capture. Obsługa przerwań oraz wykorzystanie funkcji zwrotnych.

Instrukcja: sr_lab03.pdf

Lab — ADC, DAC i DMA; Regulator PID

Obsługa przetwornika ADC. Generowanie sygnału za pomocą przetwornika DAC. Prosta aplikacja generatora sygnałów z wykorzystaniem kontrolera DMA. Wizualizacja wyników za pomocą STMStudio.

Instrukcja: sr_lab04.pdf

Instrukcja (regulator PID): sr_lab04b.pdf

Lab — SPI i I2C

Praktyczne aspekty komunikacji za pomocą SPI i I2C. Obsługa różnych modułów rozszerzeń (X-NUCLEO): komunikacja bezprzewodowa, sterowanie silnikami, obsługa czujników MEMS, itp.

Instrukcja: sr_lab05.pdf

Lab — SPI i I2C

Praktyczne aspekty komunikacji za pomocą SPI i I2C. Obsługa różnych modułów rozszerzeń (X-NUCLEO): komunikacja bezprzewodowa, sterowanie silnikami, obsługa czujników MEMS, itp.

Strojenie regulatora PID

Instrukcja: sr_lab05.pdf

Instrukcja (regulator PID): sr_lab04b.pdf

Lab — Raspberry Pi Pico

Informacje na temat Raspberry Pi Pico można znaleźć w książce Get Started with MicroPython on Raspberry Pi Pico. Opis języka Python wykorzystywanego na Raspberry Pi Pico zanjduje się pod adresem Raspberry Pi Pico Python SDK. Natomiast opis wykorzystania funkcji związanych z bezprzewodową łącznością znajduje się pod adresem Connecting to the Internet with Raspberry Pi Pico W.

Informacje na temat Raspberry Pi Pico są dostępne również tutaj.

Plik MicroPython UF2 dla wersji Raspberry Pi Pico W można znaleźć tutaj.

Jak uruchomić płytkę Raspberry Pi Pico W?

  1. Należy ściągnąć plik UF2. Upewnij się, że plik ma rozmiar powyżej 1MB i został poprawnie pobrany.
  2. Wciśnij i przytrzymaj przycisk BOOTSEL na płytce Raspberry Pi Pico. Trzymając przycisk podłącz płytkę do komputera. Odczekaj 2 sekundy oraz puść przycisk.
  3. Płytka uruchomiła się w trybie ładowania programu (z ang. bootlader mode).
  4. Wgraj plik UF2 na płytkę poprzez jego skopiowanie do nowego urządzenia, które pojawiło się w systemie. Odczekaj około 20 sekund i odłącz płytkę od komputera. Jeśli nowe urządzenie nie pojawiło się w systemie to odłącz płytkę od komputera i powtórz procedurę od pkt. 2.
  5. Odłącz płytkę od portu USB i podłącz ją ponownie.
  6. Otwórz terminal i uruchom środowisko thonny poprzez wpisanie komendy thonny.
  7. W przypadku pierwszego uruchomienia środowiska wybierz tryb standardowy. Później będzie to można zmienić poprzez kliknięcie linku w aplikacji, który znajduje się w prawym górnym rogu (może być wymagane powiększenie okienka aplikacji).
  8. Wybierz interpreter języka Python. W tym celu w prawym dolnym rogu należy skonfigurować interpreter (jak na zdjęciu poniżej).
  1. W zakładce Intrpreter wybierz rodzaj interpretera. Należy wybrać MicroPython (Raspberry Pi Pico). W polu Port należy wybrać urządzenie szeregowe, które odpowiada za podłączoną płytkę Raspberry Pi Pico (tak jak na rysunku poniżej).
  1. Po poprawnym skonfigurowaniu aplikacji i zakładając poprawne wgranie pliku UF2 w lewym dolnym panelu aplikacji Thonny (konsola, (z ang. Shell)) powinna ukazać się informacja podobna do
    MicroPython v1.20.0-68-g3229791b6 on 2023-05-11; Raspberry Pi Pico W with RP2040
    Type „help()” for more information.

    (patrz rys. poniżej).
  1. Uruchom prostą aplikację, która będzie migać diodą LED.
    Uwaga! z racji tego, że jest to płytka Raspberry Pi Pico W diodę należy skonfigurować podają łańcuch znaków „LED” zamiast numeru portu. Przykład działania aplikacji został pokazany poniżej.

Opis zadań

Każde z zadań będzie składać się z trzech części. Dotyczyć będą one:

  • obsługa wbudowanej diody LED za pomocą serwera HTTP,
  • obsługi zewnętrznego modułu,
  • uruchomienie serwera HTTP na RPI Pico do obsługi modułu,

W trakcie laboratoriów będzie należało uruchomić przynajmniej jeden z modułów:

  • czujnik natężenia światła BH1750 komunikujący się po magistrali I2C,
  • wyświetlacz OLED oparty o sterownik SSD1306,
  • dalmierz ultradźwiękowy HC-SR04,
  • programowalne diody LED WS2812

Nazwa sieci oraz hasło do niej zostaną podane na zajęciach.

Uwaga!

W przypadku występowania błędu OSError: [Errno 98] EADDRINUSE należy płytkę odłączyć i podłączyć ponownie. Jednakże, aby problem nie występował ponownie warto ustawić odpowiednie opcje dla gniazdka (z ang. socket), które zostało stworzone

s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

Spowoduje to, że do wcześniej wykorzystanego adresu będzie można ponownie wymusić przypisanie tego samego portu.

Uwaga!

Próbując podłączyć się do płytki Raspberry Pi Pico i uruchomionego na niej serwera HTTP należy zwrócić szczególną uwagę na adres jaki będzie wpisywany w przeglądarce. Powinien być wykorzystywany protokół HTTP zamiast HTTPS.

Zatem w przeglądarce należy wpisywać adres URL, który jest podobny do:

http://xxx.yyy.zzz.qqq/

Wbudowana dioda LED

W przypadku płytek Raspberry Pi Pico W dioda LED obecna na płytce nie jest dostępna pod pinem numer 25. Należy nią sterować podając jako parametr łańcuch znaków „LED”.

led = Pin("LED", Pin.OUT, value = 0)

Aby uruchomić serwer HTTP, który pozwoli na zmianę stanu diody LED należy wykorzystać materiały dostępne w Connecting to the Internet with Raspberry Pi Pico W. Dane potrzebne do podłączenia się do lokalnej sieci WLAN zostaną podane na zajęciach.

Czujnik światła BH1750

Uruchomienie czujnika natężenie światła BH1750. Należy skonfigurować magistralę I2C na pinach GP2 i GP3, a prędkość transmisji ustawić na 400kHz. W kolejnym kroku należy wyszukać dostępne urządzenia na magistrali I2C. Pozwoli to na pozyskanie adresu urządzenia podpiętego do magistrali. Następnie należy rozpocząć odczyty pomiaru natężenia światła wyrażone w luxach.

W ramach serwera HTTP należy utworzyć prostą stronę HTTP, którą będzie zawierać aktualną wartość wykonanego pomiaru.

Wyświetlacz OLED

Przed przystąpieniem do ćwiczenia należy pobrać i zainstalować bibliotekę ssd1306. Można to zrobić przez wybranie plug-ins i wyszukanie micropython-ssd1306. Do komunikacji z wyświetlaczem zostanie wykorzystana magistrala I2C na pinach GP2 i GP3, a częstotliwość transmisji powinna zostać ustawiona na 400kHz. Następnie na ekranie należy wyświetlić napis np. „Hello World! xxx”, gdzie xxx to inkrementowana liczba co jedną sekundę.

W przypadku problemów z instalacją biblioteki należy wykonać następujące kroki:

  1. Ściągnąć plik ssd1306.py z repozytorium micropython-ssd1306.
  2. Stworzyć nowy plik w środowisku Thonny.
  3. Zapisać nowo utworzony plik na urządzeniu Raspberry Pi Pico pod nazwą ssd1306.py.
  4. Można używać biblioteki do obsługi wyświetlacza.
  5. Stworzyć nowy plik, w którym będzie wykonane ćwiczenie. Pozwoli to na uniknięcie problemu z nadpisywaniem pliku biblioteki.

W drugiej części ćwiczenia należy stworzyć serwer HTTP, do którego przesyłając tekst zostanie on następnie wyświetlony na ekranie.

Dalmierz ultradźwiękowy

Do wykonania pomiaru odległości należy wykorzystać dwa dowolne piny mikrokontrolera RP2040. Jeden z pinów wyzwala pomiar, natomiast drugi pin w momencie osiągnięcia stanu wysokiego informuje o wykryciu odbitej fali dźwiękowej. Czas pomiędzy wyzwoleniem, a wykryciem powrotnej fali dźwiękowej pozwala na określenie odległości. Odległość powinna być mierzona w centymetrach.

Serwer HTTP powinien wyświetlać zmierzoną odległość. Strona powinna odświeżać się co 2 sekundy. Do tego celu można wykorzystać fragment kodu napisany w JavaScript.

Programowalne diody

W ramach ćwiczenia należy stworzyć aplikację, która będzie zapalać diody WS2812 w określonym kolorze i z danym natężeniem. Do tego celu należy wykorzystać bibliotekę neopixel. Nie jest wymagane jej instalowanie, ponieważ jest ona bezpośrednio dostępna w firmware.

Strona internetowa powinna pozwalać na zdalne wybranie diody, której stan ma być zmodyfikowany, zmianę koloru w formacie RGB oraz poziomu jasności (od 0 do 1).

Lab — termin odróbczy

Materiały dodatkowe

en.DM00334043 STM32 ST-LINK Utility for STM32 MCUs

en.CD00262073 STM32 ST-LINK utility software description, User manual

en.DM00103564 STM32 configuration and initialization C code generation

en.DM00104712 STM32CubeMX for STM32 configuration and initialization C code generation, User manual

en.DM00105918 STM32 Nucleo-64 board

en.DM00105823 STM32 Nucleo-64 board, User manual

Description of STM32L4 HAL and Low-layer drivers

en.CD00291613 STM Studio run-time variables monitoring and visualization tool for STM32 microcontrollers

en.CD00291015 Getting started with STM-STUDIO, User manual

en.DM00027105 ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32

en.DM00026748 ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32, User manual

en.DM00108832 STM32L476xx, Ultra-low-power ARM® Cortex®-M4 32-bit MCU+FPU, 100DMIPS, up to 1MB Flash, 128 KB SRAM, USB OTG FS, LCD, analog, audio

en.DM00083560 STM32L4x5 and STM32L4x6 advanced ARM®-based 32-bit MCUs, Reference manual

161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide (http://www.freertos.org/Documentation/RTOS_book.html)

FreeRTOS_Reference_Manual_V9.0.0 (http://www.freertos.org/Documentation/RTOS_book.html)

Moduły rozszerzeń:

en.brstm32ode STM32 Open Development Environment

en.DM00089896 LSM303C, Ultra-compact high-performance eCompass module: 3D accelerometer and 3D magnetometer

en.DM00125142 Getting started with X-NUCLEO-NFC03A1 NFC card reader board based on CR95HF for STM32 Nucleo, User manual

en.DM00154104 X-NUCLEO-6180XA1 proximity and ambient light sensor expansion    board based on VL6180X for STM32 Nucleo, User manual

en.DM00168396 Getting started with the Sub-1 GHz expansion board based on SPSGRF-868 and SPSGRF-915 modules for STM32 Nucleo, User manual

en.DM00226187 Getting started with the X-NUCLEO-IHM07M1 motor driver expansion board based on the L6230 for STM32 Nucleo, User manual

en.DM00237629 Getting started with X-NUCLEO-IHM02A1; two-axis stepper motor driver expansion board based on L6470 for STM32 Nucleo, User manual

en.DM00245012 Getting started with X-NUCLEO-IDW01M1 Wi-Fi expansion board based on SPWF01SA module for STM32 Nucleo, User manual

en.DM00285104 X-NUCLEO-53L0A1 ranging and gesture detection sensor expansion board based on VL53L0X for STM32 Nucleo, User manual

en.DM00333132 Getting started with the X-NUCLEO-IKS01A2 motion MEMS and environmental sensor expansion board for STM32 Nucleo, User manual

TWR-MOTOR TWR-MOTOR — Moduł napędowy do zestawu Freescale Tower (źródło)

Opis wyprowadzeń modułu TWR-MOTOR:

kolor kablasygnałPROTO
czarnyGNDGND
biały+5V+5V
szaryTMR1 – enc BA33
fioletowyTMR0 – enc AA34
niebieskiAIN1 – H-bridgeB21
zielonyAIN2 – H-bridgeB22
żółtyPWMA – H-bridgeA40
pomarańczowy  
czerwony+3V3+3V3
brązowySHARPB51

Dokumentacja dla modułów i układów z ćwiczenia lab06 i lab07:

kamodbar_spi dokumentacja modułu KAmodBAR-SPI

MPL115A1 czujnik ciśnienia

kamodexp1 dokumentacja modułu KAmodEXP1

MCP23S08 ekspander portów GPIO

DM00140895 dokumentacja czujnika LPS22HB — barometr

hts221 dokumentacja HTS221 — higrometr

lsm6dsl dokumentacja LSM6DSL — trójosiowy akcelerometr i trójosiowy żyroskop

lsm303agr dokumentacja LSM303AGR — trójosiowy akcelerometr i trójosiowy magnetometr