L293: sterowanie silniczkami DC z Arduino

Podłączenie silników DC (stało-prądowych) do mikrokontrolera wymaga kilku dodatkowych zabiegów. Przede wszystkim musicie być świadomi tego, że silniki pobierają prąd. Oczywiste? Jasne, przecież każde urządzenie elektroniczne/elektryczne go pobiera. Problem w tym, że silniki pobierają go zazwyczaj DUŻO. Znacznie więcej, niż Arduino może zapewnić ze zwykłego pinu logicznego (D0..D12). Najczęściej nie ma więc możliwości, żeby sterować takim silniczkiem bezpośrednio z pinów Arduino. Niektóre bardzo małe (lub słabe) silniczki pobierają na tyle mało prądu, że można się o to pokusić. Ale w żadnym wypadku nie jest to zalecane – i są to naprawdę wyjątki.
W związku z tym, oprócz Arduino i silniczków – będziecie potrzebowali kilka dodatkowych elementów. Najprostszym sposobem na sterowanie silniczkami DC jest układ L293.

L293
L293

Silniki DC – prądu stałego

Decydując się na konkretny silniczek, upewnijcie się co jego parametrów:

  • Napięcie znamionowe,
  • Przekładnia,
  • Natężenie prądu na biegu jałowym,
  • Natężenie prądu przy zatrzymanym wale.

Napięcie znamionowe to takie, przy którym silniczek pracuje optymalnie. Silniczki mogą mieć różne napięcie znamionowe, np. 3V, 5V, 12 – więcej i mniej. Weźmy na przykład silniczek o napięciu znamionowym 5v. Czy będzie się kręcił, jeżeli podacie mniejsze napięcie? Tak, ale wolniej. Jeżeli jednak napięcie będzie zbyt małe, silniczek nie będzie miał „siły”, żeby wystartować. Z kolei jeżeli podacie zbyt duże napięcie – może się przepalić i będzie do wyrzucenia.

dagu_00Przykładowo, popularne silniczki Dagu:

motor_00Dla tego silniczka, napięcie znamionowe (ang. suggested voltage) wynosi 4.5V. Przy takim napięciu będą pracowały optymalnie i takie napięcie jest dla nich całkiem bezpieczne. Silniczki takie powinny również działać na np. 6V (4 baterie AA), ale oczywiści wiąże się to już z pewnym ryzykiem i może wpłynąć na ich trwałość.

Na zamieszczonym powyżej rysunku podano jeszcze więcej parametrów silnika, np. szybkość obrotową „no load speed”.

Szybkość obrotowa podawana jest najczęściej jako ilość obrotów, jakie wykonuje wał bez obciążenia. Tutaj nazywa się to „no load speed” i podano ją w „rpm” – „revolutions per minute” czyli obroty na minutę. W tym przypadku, przy napięciu 4.5V, wał silniczka wykona 90 obrotów, co daje 1 obrót w ciągu 750ms.

Tak naprawdę, same silniczki obracają się dużo szybciej. W żółtej części znajduje się przekładania, która redukuje ich obroty!

Oczywiście szybkość poruszania się napędzanego przez takie silniki robota, będzie też zależna od wielkości jego opon.

Użyjcie tego kalkulatora, żeby obliczyć szybkość poruszania się robota w zależności od obrotów silnika (rpm) i średnicy koła (wheel diameter): Robot speed calculator. Wyniki i dane podajcie w  calach:)

Kolejnymi bardzo ważnymi parametrami są natężenie prądu pobierane przez silnik. Rozważa się tutaj 2 stany:

  • Bieg jałowy, gdy silnik pracuje bez obciążenia, nic nie jest podłączone do jego wału (np. koło, minimalny moment obrotowy),
  • Zatrzymanie wału – gdy silnik nie jest w stanie obrócić wału (maksymalny moment obrotowy).

W przypadku biegu jałowego, silnik pobiera minimalny prąd potrzebny mu, żeby obrócić wał – dla tego konkretnego modelu 190-250mA. Oczywiście nawet założenie kółka na taką oś już sprawi, że pobór prądu się zwiększy.

Silniki DC pobierają większy prąd przy starcie. Potrzebują „siły”, żeby zacząć się obracać!

Drugi skrajny przypadek ma miejsce, gdy wał gwałtownie się zatrzyma. W tym przypadku natężenie pobieranego prądu może urosnąć do całkiem sporych wartości. Dla prezentowanego silnika –  nawet 1.2A!

Nagły skok natężenia prądu może być niebezpieczny dla całego układu – musicie to przewidzieć w swoich konstrukcjach!

Możecie sprawdzić natężenie prądu przy zatrzymanym silniku za pomocą multimetru chwytając za wał lub osadzone na nim kółko:

measure_powerPamiętajcie, że do mierzenia prądu – multimetr wpina się „szeregowo”.

W praktyce budowy robotów mobilnych sytuacja całkowitego zatrzymania wału nie występuje jednak za często. Po prostu – nawet przy uderzeniu w ścianę, kółka zaczną się ślizgać po podłodze. Silniki nie będą miały łatwo, ale do całkowitego zatrzymania wału nie dojdzie.

Po co nam L293?

L293 to całkiem sprytny czip, który pozwala na sterowanie silnikami DC. Zamiast podłączać silniki do zasilania, podłączamy je do czipu L293. Podając odpowiednie sygnały na wejścia czipy L293, możemy uruchamiać silnik, zatrzymywać, regulować szybkość ich obrotów oraz (!) zmieniać kierunek ich obrotów.

L293 „załatwia” też sprawę prądów pobieranych przez silniki (przynajmniej w pewnych granicach). Zależnie od wersji przenosi do 2A prądu (w skokach, normalnie do 1A).

To wszystko potrafi L293.

Piny L293

Układ L293 zamknięto w 16-nóżkowej obudowie typu DIP. Możecie go używać z płytkami przewlekanymi lub stykowymi. Zobaczcie, co oznaczają poszczególne wyprowadzenia:

L293: wyjścia
L293: piny wejścia/wyjścia i zasilania

Zacznijmy od zasilania, bo to ono może wprowadzić Was w błąd. L293 ma dwa piny zasilania:

  • Pin 8 (+Vcc2): zasilanie dla podłączonych do niego silników (max 36V)
  • Pin 16 (+Vcc1): zasilanie samego czipu (max 7V).

Pamiętajcie, jak oznacza się piny na czipach: liczymy je idąc po literce 'U’ zaczynając od lewego górnego rogu. W ten sposób, dla 16-pinowego układu, pin 16 znajduje się naprzeciw 1.

pinsPierwszy pin jest często oznaczony kropka, góra ukladu mała wpustką.

Dobrze zapamiętajcie, który pin zasilający do czego służy. Nie ma problemu, jeżeli używacie zasilania np. 5V dla silników. Pin zasilający czip (fizyczny 16, Vcc1) wytrzyma do 7V. Problemy mogą się pojawić, jeżeli używacie np. silników 12v. Pin Vcc2 (8) spokojnie je wytrzyma (a właściwie nawet 3 razy więcej). Ale wprowadzenie 12v na pin 16 może „usmażyć” L293.

Podłączenie na płytce stykowej

Poniższy przykład zakłada użycie 2 silników typu dagu i zastawu zasilającego z 4x baterii AA.

Włóżcie teraz L293 na płytkę stykową i podłączcie zasilanie:

pic_07

UWAGA: rysunki są schematami – powstrzymajcie się z włączeniem zasilania do momentu, kiedy skończycie montować układ i upewnicie się, że wszystko jest poprawnie podłączone!

Ja używam pudełek zasilających A4 z wyłącznikiem.

Zakładam tutaj, że używacie pojemnika z 4xAA. To razem 6V – trochę za dużo jak na zasilanie Arduino przez pin 5V – używam więc Vin. Podłączam:

  • + z baterii: na Vin Aruino oraz pin zasilający silniki Vcc2 (fizyczny 8) – możecie podłączyć do lewej szyny zasilania płytki stykowej (czerwonej),
  • 5V z Arduino na Vcc1 (pin 16); możecie podłączyć do prawej szyny zasilającej,
  • Masę z baterii na masę z Arduino i płytki stykowej (niebieskie szyny); pamiętajcie o połączeniu szyny niebieskiej po lewej i prawej stronie (czarna zworka na samym dole rysunku).

Trochę na granicy… 6V to właściwie nawet trochę za mało dla stabilizatora na płytce Arduino… Układ może być niestabilny – zwłaszcza, jeżeli zamiast baterii użyjecie akumulatorów Ni-Mh (lub trochę już rozładowanych baterii).

Teraz podłączcie masy. Układ ma 4 masy na pinach: 4, 5, 12, 13. Podłączcie je wszystkie (czarne zworki):

pic_08

Pamiętajcie: masy Arduino i zestawu baterii muszą być połączone! Podłączcie wszystkie 4 masy.

Teraz podłączcie silniki: jeden wepnijcie do wyjść 1Y i 2Y, a drugi – 3Y i 4Y. Wyjścia te znajdują się powyżej i poniżej mas. Wygląda to tak:

pic_09

Zajmiemy się teraz włączeniem sterowania dla silników. Piny 1,2EN (fizyczny 1) oraz 3,4EN (9) muszą być w stanie wysokim, żeby wyjścia 1/2Y oraz 3/4Y zadziałały. Połączcie je z 5v, jak na rysunku (niebieskie zworki):

pic_0A

Pozostaje podłączyć sterowanie. Układ L293 umożliwia kontrolowanie 2 silników i kręcenie nimi do przodu i do tyłu – a nawet 4, jeżeli obracających się tylko jedną stronę (pamiętajcie o maksymalnym prądzie przenoszonym przez układ!). Nam zależy na jeździe w obie strony, wykorzystamy więc wejścia 1A i 2A (pierwszy silnik) oraz 3A i 4A (drugi silnik). Ja podłączyłem je następująco:

  • Piny 1A (pin 2 L293) i 2A (pin 7) (wejścia sterujące silnika 1) – do D11 i D10,
  • Piny 3A (pin 10) i 4A (pin 15) (wejścia sterujące silnika 2) – do D5 i D3

Teraz układ wygląda tak (przybyły szare kable):

pic_0BOstatecznie zmontowany układ wygląda tak:

l293_engines_battery_00

Sterowanie

W takim układzie, silnikami sterujemy zmieniając wartości pinów sterujących – u mnie 10 i 11 dla jednego silnika oraz 3 i 5 dla drugiego.

W powyższym przykładzie:

  • Funkcje „forwardMe” i „reverseMe” służą do obracania silnikami do przodu i tyłu przez zadaną ilość milisekund,
  • Funkcja „stop” służy do zatrzymania silników,
  • W pętli programu: przez sekundę jedziemy do przodu, zatrzymujemy się na sekundę – a potem przez sekundę do tyłu.

A tak to działa:

Źródła

4 komentarze do “L293: sterowanie silniczkami DC z Arduino”

Dodaj komentarz