Sterownik silników DC został wykonany w oparciu o 32-bitowy mikrokontroler oparty na rdzeniu ARM. Podstawowe przeznaczenie urządzenia to sterowanie napędami platform mobilnych zarówno dwukołowych jak i czterokołowych.
To co przede wszystkim odróżnia ten projekt od innych sterowników silników to wsparcie dla środowiska ROS (Robot Operating System) oraz obliczanie danych odometrycznych, czyli względnego przesunięcia i orientacji platformy na podstawie informacji z enkoderów. Wykorzystanie urządzenia wraz ze środowiskiem ROS może znacznie przyspieszyć zarówno proces tworzenia jak i uruchamiania oraz testowania robotów mobilnych. Wraz z urządzeniem dostarczane jest API w języku C++ oraz dedykowana aplikacja do konfiguracji i diagnostyki sterownika. Poniżej przedstawiono możliwości urządzenia.
Funkcjonalności sterownika
- obsługa do 4 silników DC,
- napięcie zasilania silników w przedziale 6 – 24 V DC,
- ciągły prąd do 8 A na silnik przy zapewnieniu odpowiedniego chłodzenia,
- prąd maksymalny do 20 A na silnik,
- komunikacja z komputerem przez USB (HID),
- obsługa do 4 enkoderów inkrementalnych (wejścia A, B) z poziomami logicznymi 3,3 V lub 5 V,
- dwa tryby sterowania:
- zamknięta pętla prędkościowa z regulatorem PID,
- brak pętli sprzężenia zwrotnego,
- dobór parametrów regulatorów PID dla każdego silnika oddzielnie,
- układ monitorujący, który zatrzymuje silniki w przypadku utraty komunikacji,
- szereg zabezpieczeń zarówno sterownika jak i silników,
- dwa tryby dla różnych typów platform mobilnych: dwukołowych (możliwość połączenia równoległego kanałów) i czterokołowych,
- obliczanie danych odometrycznych, czyli względnego przemieszczenia i orientacji platformy na podstawie danych z enkoderów,
- 4 wyjścia cyfrowe o obciążalności do 1 A każde (np. do hamulców), napięcie wyjściowe równe napięciu zasilania silników,
- 4 wejścia cyfrowe (możliwość skonfigurowania ich jako: stop awaryjny, przycisk deadman, ograniczenie prędkościowe lub do innego celu),
- niewielkie zużycie energii w trybie stand-by,
- graficzny interfejs użytkownika (GUI) do konfiguracji i diagnostyki modułu sterownika,
- udostępnione API w C++,
- dostępny moduł w środowisku ROS Hydro/Indigo/Jade/Kinetic do obsługi urządzenia.
- wymiary 70 x 70 x 20 mm,
- waga około 200 g.
Poniżej przedstawiono schemat blokowy urządzenia zawierający między innymi interfejsy enkoderów, blok mikrokontrolera, stopień mocy oraz moduły wejść i wyjść cyfrowych.

Schemat blokowy sterownika silników
Węzeł w środowisku ROS
Poniższy diagram przedstawia strukturę modułu obsługującego urządzenie w środowisku ROS. Węzeł subskrybuje takie informacje jak zadana prędkość liniowa i kątowa robota oraz stany wyjść cyfrowych. Natomiast publikowane są względne przesunięcia, orientacja robota, stany wejść cyfrowych, napięcie wejściowe oraz stan urządzenia. Wykorzystywane są jedynie standardowe typy wiadomości frameworka ROS. Kod węzła w C++ został umieszczony na GitHubie: https://github.com/mdrwiega/md_drive_controller .

Struktura węzła ROS obsługującego sterownik silników
Projekt części elektronicznej
Część elektroniczna urządzenia została zaprojektowana w programie KiCad (open-source). Wykorzystano go również do wygenerowania poniższej wizualizacji.
Testy urządzenia
Sterownik silników został przetestowany w robocie mobilnym, opisanym w temacie: System autonomicznej nawigacji robota mobilnego w środowisku ROS. Poprawność działania systemu odometrycznego została potwierdzona z wykorzystaniem systemu śledzenia ruchu (motion capture) OptiTrack.