[PROJEKT] Sterowanie silnikami za pomocą Raspberry Pi i sterownika DRV8835

W projekcie wykorzystano moduł sterownika silników z układem DRV8835 dołączony do komputera Raspberry Pi. Taka konfiguracja pozwala sterować prędkością oraz kierunkiem obrotów silników prądu stałego.

Do realizacji projektu będziemy potrzebować:

Układ DRV8835 pozwala na sterowanie dwoma silnikami prądu stałego. Silniki mogą być zasilane napięciem od 1,5 V do 11 V. Maksymalnie jeden silnik może pobierać 1,2 A (chwilowo 1,5 A). Możliwe jest połączenie szeregowe kanałów, co pozwoli na zwiększenie wydajności prądowej, a w rezultacie na podłączenie silnika, który będzie mógł pobierać do 2,4 A (chwilowo 3 A). Używanie modułu jest bardzo łatwe – wystarczy moduł dołączyć do 40-pinowego złącza znajdującego się na Raspberry PI (pamiętając o odpowiedniej orientacji), co pokazano na rysunku 1.

Rysunek 1. Moduł ze sterownikiem DRV8835 wpięty w Raspberry Pi 3

UWAGA!
Podłączenie wyższego napięcia zasilania niż maksymalne zalecanie (powyżej 11 V), spowoduje uszkodzenie układu DRV8835.

Moduł posiada 3 złącza śrubowe. Jedno do podłączenia zasilania silników (baterie lub zasilacz), a dwa kolejne do podłączenia silników (złącza o lewej na rysunku 1). W moim przypadku podłączone silniki oraz zasilanie (z pakietu Li-pol 7,4 V) wygląda następująco (rysunek 2).

Rysunek 2. Układ wykorzystywany w projekcie 

W projekcie użyłem Rasbperry Pi 3 z wgranym systemem Raspbian Jessie with Pixel (wersja z dnia 2.03.2017). Najnowsze wersje systemu można znaleźć na stronie Raspberry Pi.

Po włączeniu naszego Rasbperry PI oraz zalogowaniu warto zaktualizować system oraz inne komponenty systemu do najnowszej wersji, można to wykonać poleceniami:

Podczas wykonywania drugiego polecenia zostaniemy zapytani, czy zgadzamy się na aktualizacje, naciskamy klawisz i zatwierdzamy klawiszem enter.

Rysunek 3. Potwierdzenia aktualizacji systemu

Po procesie aktualizacji możemy przystąpić do instalacji narzędzi oraz biblioteki do obsługi sterownika silników. Ponieważ biblioteka WiringPi niezbędna do prawidłowego działania sterownika silników wykorzystuje do swojego działania Python, musimy zainstalować interpreter języka Python. Zrobimy to za pomocą polecenia:

Następnie instalujemy bibliotekę WiringPi-Python poleceniem:

Po poprawnej instalacji, przystępujemy do pobrania biblioteki do obsługi naszego sterownika DRV8835. Musimy wpisać w terminalu następujące polecenie:

Gdy biblioteka zostanie pobrana, przechodzimy do utworzonego folderu drv8835-motor-driver-rpi poleceniem:

Oraz instalujemy bibliotekę poleceniem:

Od teraz możemy korzystać z naszego sterownika silników. Następnie uruchomimy przykład:

W pierwszych linijkach została załączona biblioteka pololu_drv8835_rpi do programu za pomocą polecenia:

Następnie zostały stworzone dwie tablice test_forward_speeds (wartości 0…480…0) oraz test_reverse_speeds (wartości 0…-480…0). Wartość -480 odpowiada za obroty z maksymalną prędkością do tyłu, natomiast wartość 480 za obroty z maksymalną prędkością do przodu. Jak widać, aby sterować kierunkiem obrotów silniku, należy uwzględnić przed wartością znak. Te wartości są umieszczane w funkcji motors.motor1.setSpeed(x) (sterowanie pierwszym silnikiem) oraz motors.motor2.setSpeed(x) (sterowanie drugim silnikiem). Aby poruszać dwoma silnikami jednocześnie, należy wykorzystać funkcje motors.setSpeeds(x, y) i w nawiasie podać prędkość odpowiednio dla pierwszego i drugiego silnika. I tak np. aby poruszyć silnikiem pierwszym na połową prędkości, należałoby w programie umieścić następujący kod.

Wróćmy do kodu przykładowego programu. Po stworzeniu tablic test_forward_speeds oraz test_reverse_speeds, zaczyna się główna cześć naszego programu. Rozpoczyna się ona od linii, która zawiera polecenie try:. Na początku naszego programu prędkość obu silników ustawiana jest na 0, poleceniem:

Następnie wyświetlany jest komunikat „Motor 1 forward” informujący użytkownika, że silnik 1 obraca się do przodu:

Następnie w kodzie znajduje się pętla for wykorzystująca wcześniej zadeklarować tablice test_forward_speeds. Dzięki niej silnik jest powoli rozpędzany od wartości zerowej do maksymalnej prędkości (wartość 480). Po osiągnięciu wartości 480, silnik zaczyna zwalniać, aż do zatrzymania, czyli wartości 0 (zgodnie z wartościami jakie zawiera tablica test_forward_speeds)

Następnie zostaje wykonana pętla for, jednak teraz zmieniony jest kierunek obrotu silnika 1. Silnik rozpędza się do wartości -480, czyli do tyłu z maksymalną prędkością. Gdy ją osiągnie, zaczyna zwalniać do 0 (zgodnie z wartościami jakie zawiera tablica test_reverse_speeds).

Po wykonaniu tego fragmentu kodu, identyczna sekwencja zostaje wykonana dla silnika 2.

Aby uruchomić program, należy w konsoli wpisać następującą komendę (musimy być w folderze drv8835-motor-driver-rpi ) :

W każdej chwili można przerwać działanie programu naciskając kombinacje klawiszy CRTL+C.

Po wykonaniu całego programu w konsoli zobaczymy następujący widok:

Rysunek 4. Komunikaty wyświetlane podczas działania programu example.py

Działanie programu zostało zaprezentowane na wideo:

 

Do pobrania

O autorze