Sterownik silników DC - DRV8835 z przetwornicą step down S7V7F5


Mamy już podwozie, czas dobrać sterownik do naszych silników. W tym celu atrakcyjnym rozwiązaniem jest sterownik dwukanałowy DRV8835.

Występuje w różnych konstrukcjach, z których my wykorzystamy rozwiązanie dedykowane do Raspberry Pi B+.

Ten konkretny model dostępny jest np. na stronach jego producenta, firmy Pololu.

Rozwiązanie to zostało przygotowane specjalnie pod model Raspberry Pi B+ i dla tego celu stworzona została specjalna biblioteka, do sterownaia silnikami.

Ale my posłużymy się software'owym rozwiązaniem generatora PWM czyli bilbioteką PIGPIO.

Po rozpakowaniu paczuszki znaleźć możemy takie oto elementy - płytkę i gniazda, które należy samodzielnie przylutować.



Lutowanie nie jest najprostszą czynnością (co zobaczycie na kolejnych zdjęciach :) ) ale kilka ciekawych poradników w internecie można znaleźć. W swoim czasie też odważę się na taki poradniczek, bo odrobina praktyki i lutowanie staje się całkiem przystępne.



Kilka słów o tym konkretnym sterowniku. Zasilany jest od 2V do 11V, chwilowy prąd do 1,5A. Posiada dwa niezależne kanały którymi można sterować silniki. Czy to znaczy, że można nim sterować do dwóch silników? Nie, ale o tym później... :)

Poniżej możecie zobaczyć jak wygląda płytka z bliska, oraz jakie piny są faktycznie wykorzystywane. Są to piny zasilające 5V i 3,3V, wszystkie piny GND, oraz cztery piny sygnałowe o numerach 5, 6, 12 i 13 według nomenklatury BCM.

Raspberry Pi steruje silnikami właśnie poprzez te cztery piny sygnałowe. Jak możecie zauwżyć na płytce jest opis gdzie piny 5 i 6 należą do grupy "DIR" czyli "direction". Odpowiadają za kierunek w którym obracają się silniki. O kierunku obrotu decyduje czy na danym pinie podany jest sygnał niski czy wysoki.
Piny 12 i 13 odpowiadają za prędkość obrotów silnika i sterowane są sygnałem PWM podawanym przez Raspberry Pi.



Silniki montujemy odpowiednio do gniazd M2B i M2A, oraz M1B i M1A. I tu bardzo konstruktywna uwaga. Jeżeli mamy podwozie napędzane czterema silnikami, bez skrętnych osi (jak w czołgu) możemy dwa silniki z tej samej strony podwozia podpiąć pod jeden kanał sterownika (np. M2B i M2A). Należy tylko upewnić się że kabelki od silników są tak samo podłączone, aby sterowane jednym sygnałem nie kręciły się w przeciwną stronę. Jeżeli tak się stanie wystarczy przepiąć kable jednego silnika odwrotnie.

Zasilanie silników podpinamy pod styki GND i VIN.

Na uwagę zasługują jeszcze trzy styki, które oznaczyłem po lewej stronie czerwoną ramką. Styki te opisane są odpowiednio 5V, GND, VOUT. Jak wyjaśniałem we wcześniejszym wpisie o możliwościach zasilania Raspberry Pi, można zasilać malinę za pośrednictwem pinów. Wtedy też nasza malina nie potrzebuje zasilania przez zasilacz sieciowy z gniazdka, czyli mamy uwolnione podwozie.

Aby było to możliwe, należy posłużyć się przetwornicą step up/step down, czyli taką która transformuje napięcie do poziomu 5V. Przetwornica dedykowana dla tego rozwiązania to S7V7F5. Zakres pracy od 2,7V do 11,8V. Prąd pracy - przy zmniejszaniu napięcia 1A, przy podnoszeniu napięcia 500 mA.

Przetwornica wygląda o tak...



Posiada trzy wyjścia VIN (napięcie wejściowe), GND (masa) i VOUT (napięcie wyjściowe, czyli 5V). Dzięki temu możemy przyporządkowaćpiny do DRV8835 i odpowiednio:
- 5V podłączamy do VIN,
- GND podłączamy do GND,
- VOUT podłączamy do VOUT.

Po zlutowaniu wygląda to tak... (widać też amatorszczyznę w lutowaniu - przypaliłem gniazda, ale na szczęście nieznacznie, przez co dalej mogą spokojnie pracować).



Tak przygotowany sterownik montujemy na Raspberry Pi nakładając wtyk szyny zaczynając od skrajnych pinów w rogu maliny.

Następnie montujemy silniki i zasilanie. Na poniższym schemacie widać jak należy połączyć te elementy do sterownika. Jeżeli chcemy jednym kanałem sterować dwoma silnikami (np. po tej samej stronie podwozia) należy przyłączyć oba silniki do tych samych gniazd.

Montując koszyk na baterie, lub każde inne zasilanie, należy mieć na uwadze, aby podłączać kabelki w taki sposób aby napięcie źródła nie było aktywne. Tzn. albo sam koszyk na baterie, albo wyłącznie wtyk do akumulatora, bez akumulatora. Zasilanie podłączymy dopiero w momencie gdy napiszemy kod.



Po zamontowaniu wszystkich kabelków nasz pojazd powinien prezentować się w sposób następujący...



Oczywiście pozostaje jeszcze kwestia przymocowania raspberry pi i zasilania do naszego podwozia. Jeżeli nie mamy możliwości przykręcenia tych elementów, bardzo dobrze sprawdzają się rzep przylepny obustronnie, oraz paski zaciskowe.

Teraz czas na kod w Python'ie. Aby nasz robot przejechał się kawałek, wystarczy nam dosłownie kilka linijek kodu.

	import pigpio	# importujemy biblioteki
	import RPi.GPIO as GPIO
	import time
	
	GPIO.setmode(GPIO.BCM)	# definiujemy zasady pracy pinów dla biblioteki GPIO
	GPIO.setwarnings(False)
	
	GPIO.setup(5,GPIO.OUT)	# określamy charakter pinów in czy out
	GPIO.setup(6,GPIO.OUT)
	
	silnik=pigpio.pi() 	# inicjujemy bibliotekę PIGPIO
	silnik.set_PWM_frequency(12,50)	# określamy częstotliwość sygnału PWM
	silnik.set_PWM_frequency(13,50)
	
	GPIO.output(5,True)		# ustalamy kierunek obrotu na obu kanałach sterownika
	GPIO.output(6,True)
	
	silnik.set_PWM_dutycycle(12,100)	# podajemy wartość wypełnienia sygnału, czyli prędkość silników
	silnik.set_PWM_dutycycle(13,100)
	time.sleep(1)	# program odczekuje 1 sekundę, czyli przez 1 sekundę robot jedzie
		
	GPIO.output(5,False)	#zmieniamy kierunek na jednym kanale, czyli skręcamy
	time.sleep(.2)		# obracamy kołą w przeciwnych kierunkach przez 200 ms
	
	GPIO.output(5,True) # znów określamy ten sam kierunek obrotu silników
	time.sleep(1)		# nie zmieniając prędkości jedziemy do przodu przez 1 sekundę
	
	silnik.set_PWM_dutycycle(12,0)	# zatrzymujemy robota
	silnik.set_PWM_dutycycle(13,0)
	GPIO.cleanup()
	

Zapisujemy plik pod dowolną nazwą. Dla naszych potrzeb nazwijmy go silnik.py

Teraz aby odpalić program włączamy lxterminal.

Zanim odpalimy program musimy odpalić bibliotekę pigpio. Robimy to wpisując komendę:

sudo pigpiod

Następnie wpisujemy komendę:

sudo python silnik.py

Jeżeli inaczej nazwałeś plik to musisz w powyższej komendzie wprowadzić jego nazwę.

Działa??

efekt powinien być zbliżony do tego jaki prezentuje na poniższym filmiku.



:)