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?
- Należy ściągnąć plik UF2. Upewnij się, że plik ma rozmiar powyżej 1MB i został poprawnie pobrany.
- 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.
- Płytka uruchomiła się w trybie ładowania programu (z ang. bootlader mode).
- 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.
- Odłącz płytkę od portu USB i podłącz ją ponownie.
- Otwórz terminal i uruchom środowisko thonny poprzez wpisanie komendy thonny.
- 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).
- Wybierz interpreter języka Python. W tym celu w prawym dolnym rogu należy skonfigurować interpreter (jak na zdjęciu poniżej).
- 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).
- 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).
- 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:
- Ściągnąć plik ssd1306.py z repozytorium micropython-ssd1306.
- Stworzyć nowy plik w środowisku Thonny.
- Zapisać nowo utworzony plik na urządzeniu Raspberry Pi Pico pod nazwą ssd1306.py.
- Można używać biblioteki do obsługi wyświetlacza.
- 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 kabla | sygnał | PROTO |
czarny | GND | GND |
biały | +5V | +5V |
szary | TMR1 – enc B | A33 |
fioletowy | TMR0 – enc A | A34 |
niebieski | AIN1 – H-bridge | B21 |
zielony | AIN2 – H-bridge | B22 |
żółty | PWMA – H-bridge | A40 |
pomarańczowy | ||
czerwony | +3V3 | +3V3 |
brązowy | SHARP | B51 |
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