Za zadanie postawiliśmy sobie stworzenie na bazie STM32F3DISCOVERY kompletnego układu będącego w stanie sterować modelem poduszkowca i redukować jego dużą bezwładność. Nie każdy czytelnik może być świadomy problemu, więc pokrótce przybliżymy go. Poduszkowiec porusza się na tzw. poduszce powietrznej dzięki temu unosi się nad ziemią i może poruszać się po dowolnym terenie takim jak bagna, woda, asfalt. Istnieje jednak duży problem związany z tym zjawiskiem – pomiędzy podłożem, a poduszkowcem nie występują siły tarcia. Nasz poduszkowiec zachowuje się więc podobnie do samochodu na lodzie. Aby umiejętnie „latać” tego typu maszyną potrzebne jest duże doświadczenie zdobyte przez wiele godzin treningu. Nasze rozwiązanie ma zapewnić automatyczną kompensację bezwładności, czyli redukcję tego poślizgu. Reasumując dajemy kontroler (w naszym przypadku pad podłączony do laptopa) laikowi który nigdy nie miał styczności z tego typu modelami i nie musimy się bać, że nasz kolega straci nad nim kontrolę, bo model, dzięki naszemu systemowi, będzie robił dokładnie to co chcemy i automatycznie korygował poślizg.

W części pierwszej filmu pokazujemy typowego użytkownika poduszkowca oraz panel operatorski, który pomaga zorientować się jaka jest aktualnie zadawana wartość ciągu i skrętu.

Druga część przedstawia krótki lot pokazowy. Niestety nie dysponujemy większą powierzchnią żeby pokazać bardziej spektakularne manewry.

W trzeciej części poduszkowiec ma włączony wyłącznie ciąg przedni bez żadnego skrętu. Widać wyraźnie jak stara ustawić się do zadawanego zewnętrznego momentu. Wszystkie ruchy silników odbywają się w jedną stronę, ponieważ o stronie skrętu decydujemy dopiero gdy użytkownik zada jakiś skręt maszyny.

Dlaczego wybraliśmy akurat płytkę STM32F3DISCOVERY do realizacji tego projektu? Powód jest dość prozaiczny – koszt. Ten projekt jest naszą pracą inżynierską na Politechnice Gdańskiej. Jako studenci niestety byliśmy dość mocno ograniczeni przez nasz budżet. Patrząc na koszt kupna płytki ewaluacyjnej oraz czujnika (np. żyroskopu) oddzielnie, był większy niż kupna płytki F3, w której oprócz żyroskopu można znaleźć akcelerometr oraz magnetometr. Jako dodatkowy czynnik który skłonił nas do korzystania w ogóle z produktów z rodziny STM32, to fakt że firma STMicroelectronics dostarcza bardzo bogate i dość przejrzyste biblioteki, które pozwalają mocno skrócić główny kod programu, oraz pomagają przy pisaniu programu przez osoby które nie miały wcześniej styczności z mikrokontrolerami. Na fotografii 1 przedstawiamy wygląd naszego poduszkowca.

Fot. 1. Wygląd kompletnego poduszkowca

Fot. 1. Wygląd kompletnego poduszkowca

Poduszkowiec wyposażono w trzy silniki. Dwa z nich służą do wytworzenia ciągu poziomego. Ich skręt realizujemy poprzez skręt serwomechanizmów. W przypadku tylnego silnika serwo skręcają łopaty kierujące powietrze za silnikiem. Natomiast przedni silnik zamontowany jest na skrętnej kolumnie. Regulacja prędkości odbywa się przez skręt serwo sparowanego z testerem serwo, którego tutaj używamy do wysłania sygnału do regulatora prędkości. Całość, łącznie z płytką STM32F3DISCOVERY zasilana jest przez jeden pakiet Li-Po. Trzeci silnik służy do wytworzenia ciągu pionowego. Ze względu na duże zużycie prądu posiada on osobne zasilanie drugim pakietem. Budowę tych mechanizmów pokazano na fotografii 2 i 3.

Fot. 2. Serwo poruszające stery kierunku

Fot. 2. Serwo poruszające stery kierunku

 

Fot. 3. Tester serw spełniający rolę enkodera współpracującego z regulatorem prędkości

Fot. 3. Tester serw spełniający rolę enkodera współpracującego z regulatorem prędkości

Aby kierować powietrzem z silnika ciągu pionowego tzw. wentylatora zbudowaliśmy tunel (fotografia 4). Powietrze to rozprowadzane jest do poduszki powietrznej specjalnymi kanałami umieszczonymi w środku kadłuba. Reszta powietrza trafia pod poduszkowiec i wytwarza tzw. film powietrzny na którym ślizga się pojazd.

Fot. 4. Silnik służący do wytworzenia ciągu pionowego

Fot. 4. Silnik służący do wytworzenia ciągu pionowego

Aktualnie ze wszystkich czujników dostępnych na płytce STM32F0DISCOVERY wykorzystujemy wyłącznie żyroskop. Na jego wyjściu otrzymujemy wartość zmiany momentu obrotowego, dzięki temu możemy ciągle monitorować co się dzieje z naszym modelem.

Dwa silniki odpowiadają za sterowanie (ciąg poziomy), a trzeci ma za zadanie wytworzyć poduszkę powietrzną która na unieść model (ciąg pionowy). Silniki ciągu poziomego tworzą razem moment korygujący, który przeciwstawia się momentowi rzeczywistemu zmierzonemu przez żyroskop.

Prosty wzór poniżej pokazuje w jaki sposób obliczamy moment korygujący i od czego on zależy.

FY – ciąg całkowity poduszkowca

Mp – moment potrzebny do skrętu

Mrz – moment rzeczywisty

Mk – moment korygujący

Jc – moment bezwładności poduszkowca

δ’’ – zmiana kąta skrętu poduszkowca

F=  F1Y  + F2Y

F1Y = F1 · cosβ                       F2Y  = F2 · cosα

FY = F1(cosβ + cosα)

Mk = Mrz – Mp

Mk = F1X · X + F2X · Y

F1X = F1 · sinβ                       F2X  = F2 · sinα

Mk = F1(X · sinβ + Y · sinα)

Mp = δ’’ · Jc

 

Na listingu 1 pokazano sposób w jaki jest to realizowane przez nasz mikrokontroler. Obszerny komentarz wyjaśnia dokładnie jakie zmienne są używane dalej.

List. 1

List. 1

Dodatkowe zmienne pomocnicze, które upraszczają obliczenia wykonywane przez mikrokontroler (listing 2).

List. 2

List. 2


List. 2

Aby dodatkowo uprościć obliczenia ustalamy priorytet dla tylnego silnika. Na bieżąco liczone są dwie dodatkowe wartości – maksymalny moment jaki jest w stanie wygenerować skręcony o 25 stopni tylny silnik. Jeśli wartość ta jest osiągnięta, skręcany jest przedni silnik (max. 80 stopni). W ten sposób udało się uniknąć liczenia funkcji dwóch zmiennych, która mocno obciążałaby mikrokontroler. Następnie ustalany jest kierunek skrętu silników w zależności od momentu zadawanego przez użytkownika. Na koniec dodane jest zabezpieczenie przez skrętem silników w przypadku braku ciągu (listing 3).

List. 3

List. 3

W naszym modelu sterowanie jest realizowane poprzez odpowiednie ustawienie kątów serwomechanizmów. Serwomechanizmy są sterowane sygnałem PWM, który wysyłamy bezpośrednio z mikrokontrolera STM32F3.

Sygnał PWM (Pulse Width Modulation) jest sygnał o stałej częstotliwości i amplitudzie, zmienia się tylko szerokość stanu wysokiego (tzw. wypełnienie sygnału). W naszym przypadku jest to sygnał od ok. 0,5 ms do 2,5 ms (rysunek 5).

 

Rys. 5. Zależność wartości współczynnika PWM i położenia osi serwomechanizmu

Rys. 5. Zależność wartości współczynnika PWM i położenia osi serwomechanizmu

Wszystkie sygnały PWM obsługiwane są przez Timer 3. Poniżej (listing 4) przedstawiamy jego konfigurację. Wykorzystujemy 3 kanały. Pierwszy odpowiada za tylne serwo, drugi za przednie, natomiast trzeci obsługuje regulator prędkości.

List. 4

List. 4

List. 5

List. 5

Na listingu 5 przedstawiamy część kodu odpowiedzialną za obsługę Timera 3. Wartości alfa, beta oraz ciag są wyrażone w stopniach skrętu serwomechanizmu. Zastosowaliśmy eksperymentalnie dobrany przelicznik z stopni skrętu serwo na ms stanu wysokiego. W przypadku przedniego serwo trzeba było zastosować dwustopniowy przelicznik ze względu na nieliniowe działanie serwo.

Ciężko byłoby mówić o jakimkolwiek sterowaniu nie mając żadnej komunikacji komputer-model. W naszym projekcie postawiliśmy na przesyłanie danych przez Bluetooth. Zdecydowaliśmy się na niego gdyż jest prosty w obsłudze i relatywnie tani (rysunek 6). Nie zapewnia takiego zasięgu jak komunikacja radiowa, ale jest bardziej odporny na zakłócenia. Mamy w planach zwiększyć jego zasięg przez zastosowanie anteny.

Rys. 6. Schemat systemu zdalnego sterowania modelem poduszkowca

Rys. 6. Schemat systemu zdalnego sterowania modelem poduszkowca

Poniżej zamieszczamy najważniejsze wycinki programu zawierającego obsługę pada i komunikacji. Został on napisany w języku C#. Ustawienia portu komunikującego się z modułem BTM-222 (listing 6).

List. 6

List. 6

Obsługa pada, a także wysyłanie danych do modułu realizujemy w timerze ustawionym na 20 ms. To pozwala na częste odświeżanie stanu joysticków. Aktualny stan joysticków zapisywany jest do trzech zmiennych w przedziale od 0 do 200. To pozwala na wysłanie jednej zmiennej w ramach 1 bajtu. Dodatkowo program umożliwia jazdę bokiem. Uaktywnia się ją przez przytrzymanie przycisku „7” na padzie. W tym trybie obydwa silniki skręcają się w jedną stronę i mają ten sam kąt. Umożliwia to omijanie przeszkód i zapewnia większą kontrolę nad pojazdem.

Istnieje także możliwość wyłączenia redukcji bezwładności. Tą część (listing 7) dopisaliśmy ze względów porównawczych – było nam to potrzebne do pracy inżynierskiej.

List. 7

List. 7

List. 7

Wszystkie dane wysyłane są w ramach 5 kanałów. Pierwszy to znak początku ramki danych. Następnie wysyłamy dane dotyczące ciągu i skrętu zadanego przez użytkownika w trybie redukcji. Czwarty kanał służy do obsługi klawiszy, natomiast piąty wykorzystujemy do skrętu drugiego silnika w trybie wyłączonej redukcji.

Poniżej przedstawiamy wygląd panelu operatorskiego (rysunek 7). Aby rozpocząć komunikację z poduszkowcem wystarczy nacisnąć przycisk „Podłącz”. Po podłączeniu na bieżąco będą wyświetlane wartości ciągu i skrętu.

Rys. 7. Widok okna programu sterującego ruchem poduszkowca

Rys. 7. Widok okna programu sterującego ruchem poduszkowca

Na rysunku 8 przedstawiono schemat podłączeń do płytki zestawu z mikrokontrolerem STM32.

Rys. 8. Schemat połączeń elektrycznych „wokół” zestawu STM32F3DISCOVERY

Rys. 8. Schemat połączeń elektrycznych „wokół” zestawu STM32F3DISCOVERY

 Dzięki zastosowaniu płytki STM32F3DISCOVERY udało nam się przekształcić trudną do okiełznania maszynę w całkiem intuicyjny pojazd. Redukcja momentu skręcającego powoduje, że poduszkowiec łagodniej pokonuje zakręty i nie wchodzi w tak duży ślizg boczny. Dużym ułatwieniem jest obsługa dwóch silników za pomocą jednego joysticka. W standardowych modelach RC każde serwo skręcane jest przez osobny drążek, co dodatkowo utrudnia jego obsługę. Co więcej, niskie zużycie energii przez płytkę nie powoduje znacznego skrócenia czasu pracy całego urządzenia. Warto także zauważyć, że naszą przygodę z mikrokontrolerami zaczęliśmy na początku pracy inżynierskiej. Jest to dowód na to, że programowanie mikrokontrolerów z rodziny STM32 nie jest tak skomplikowane, jak mogłoby się wydawać.

Grzegorz Białobrzeski, Tomasz Dobrzycki