Sterowanie silnikami DC za pomocą pyMCU i sterownika DRV8833

Jak kontrolować prędkość i kierunek obrotu silników prądu stałego z wykorzystaniem mikrokontrolera pyMCU i sterownika DRV8833

Silniki prądu stałego mają różnorakie zastosowania. Znajdziemy je w robotach, czy wielu urządzeniach domowego użytku. Konstruując roboty, np. samochody wyposażymy je w dwa czy cztery silniczki, których zadaniem będzie poruszanie pojazdu. W najprostszym przypadku możemy włączać i wyłączać zasilanie. Nie pozwala to jednak na kontrolę prędkości obrotów silnika, czy na jazdę wstecz. Żeby rozwiązać problem sterowania silników DC opracowano sterowniki silników - układy scalone z mostkiem H. Na rynku dostępnych jest wiele płytek z takimi sterownikami. Różnią się ilością obsługiwanych silników, interfejsem, czy maksymalnym amperażem obsługiwanych silników. Niektóre wbudowane są w płytki do kompleksowej obsługi robotów (shieldy Arduino, RaspiRobot, PicoBorg, Rover 5).

W tym artykule przedstawię sterownik Pololu DRV8833 obsługiwany przez pyMCU. Jest to tani sterownik obsługujący dwa silniki o niewielkiej mocy (takie jak w prostych zestawach robotów dla Arduino, czy Raspberry). Inne sterowniki obsługuje się podobnie jak nie identycznie.

Jeden z wielu zestawów robota do samodzielnego montażu z dwoma silnikami DC

Pololu DRV8833

Schemat płytki przedstawiony jest poniżej. Dostarczana jest bez przylutowanych pinów i trzeba zrobić to samemu. Wprawa w lutowaniu się przyda bo to bardzo mała płytka.

Pololu DRV8833

Jak zaznaczono na schemacie po prawej od góry podłączamy zasilanie dla silników, a następnie mamy po dwa piny na silnik. Po lewej uziemienie (GND) dla mikrokontrolera i po dwa piny do sterowania silnikami (jeden pin steruje ruchem "do przodu", a drugi "do tyłu"). W czasie pracy sterownik może się mocno rozgrzać i trzeba uważać by się nie poparzyć.

Mikrokontroler może włączyć lub wyłączyć silnik. Może także kontrolować prędkość silnika. Odbywa się to za pomocą modulacji szerokości impulsów - PWM. Mikrokontroler dzieli czas na bardzo krótkie odcinki (cykle). W każdy z cykli przez jakiś ułamek czasu pin jest w stanie wysokim (prąd płynie), a w pozostałym w stanie niskim (0V, prąd nie płynie). Zmieniając czas trwania stanu wysokiego można uzyskać dowolne napięcie między 0V a napięciem stanu wysokiego (np. 5V jak w Arduino, czy pyMCU). Sterownik silnika reaguje na to napięcie i przekazuje odpowiedni procent mocy na silnik.

Sterowanie z pyMCU

pyMCU ma pięć pinów PWM, czyli wystarczy na dwa i pół silnika... Wszystko łączymy według schematu płytki DRV8833. GND do GND, oraz dwa piny PWM dla każdego z podłączonych silników. Poniżej zestaw z jednym silnikiem.

pyMCU sterujące silnikiem poprzez DRV8833
sterownik silników DC DRV8833
Piny PWM na płytce pyMCU

Po podłączeniu wszystkiego (wliczając zasilania dla silników) nic się nie stanie. To mikrokontroler zawiaduje pracą silnika. Żeby to robił będziemy potrzebować skryptu, takiego jak ten:

from time import sleep

import pymcu

mb = pymcu.mcuModule()
mb.pwmOn(1)

for i in range(5, 10):
    mb.pwmDuty(1, i*100)
    sleep(2)

mb.pwmOff(1)

Skrypt ten włącza PWM na pierwszym pinie, a później ustawia "duty cycle" - współczynnik wypełnienia (od 0 do 1023). Im większa wartość tym więcej cyklu zajmuje stan wysoki i tym więcej mocy otrzymuje silnik. W zależności od silnika i jego zasilania niskie wartości współczynnika wypełnienia mogą być zbyt małe by uruchomić silnik. Skrypt co dwie sekundy będzie zwiększał współczynnik aż dojdzie do 1000, po czym się wyłączy. Drugi pin robi to samo, tyle że silnik będzie obracał się w przeciwną stronę.

blog comments powered by Disqus

Kategorie

Strony