Skocz do zawartości

Sterowanie wieloma silnikami - Arduino


Niko

Pomocna odpowiedź

Witam kolegów.

Chciałbym sterować za pomocą Arduino uno większą liczbą silników, a konkretie dziesięcioma. Silniki są zwykłe (nie krokowe). Zależy mi jedynie, żeby działały w obie strony. Zastanawiam się czy znacie jakiś dobry sposób, aby to zrealizować; jakiś sterownik, układ? Do tej pory sterowałem max 2 silnikami za pomocą sterownika L293D. Myślałem nad zamówienie zaprojektowanej przez siebie płytki z 5 takimi modułami, ale głównym problemem jest ograniczona liczba pinów na arduino. Potrzebowałbym czegoś, gdzie mógłbym podać adres danego silnika i czy ma się kręcić w prawo, czy w lewo.

Będę wdzięczny za wszelkie podpowiedzi.

Link do komentarza
Share on other sites

No to przecież liczbę linii we/wy każdego Arduino możesz powielać praktycznie do nieskończoności za pomocą prostych i takich układów rejestrów cyfrowych. Podłączasz je wprost, równolegle lub do któregoś interfejsu szeregowego i masz tyle linii na ile Ci starczy pieniędzy.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

A ja mam inny pomysł. Jak ma być tylko prawo-lewo i bez kontroli przedkości to wejście pwm podłączamy do + zasilania, jeden pin sterujący dajesz bezpośrednio do ardu a drugi przez bramkę not (inwerter) do tego samego pinu w ardu i tym sposobem za pomocą 10 pinów sterujesz 10 silnikami, proste? 😃

Link do komentarza
Share on other sites

Mechano, zależy mi, żeby użyć jak najmniejszej liczby pinów, bo muszę tam jeszcze kilka rzeczy podłączyć.

Czyli mam zbudować schemat taki jak na tym poglądowym rysunku?

Tylko jak za pomocą tego rejestru sterować prawo-lewo? One tylko dają impulsy dodatnie, czy można zamieniać z uziemieniem?

Link do komentarza
Share on other sites

Ja nie chciałem użyć rejestru tylko bramki NOT.

Pokaże ci schemat jak by to miało wyglądać z dwoma silnikami, dwoma pinami i jednym mostkiem. Musisz tylko to skopiować 5x dla 10 silników.

Link do komentarza
Share on other sites

Nie oszczędzaj głupio na wyjściach. Co za różnica, czy podłączysz jeden czy dwa rejestry? Szczypiesz się o 1.50 zł?

Bardzo niebezpieczne i niewygodne jest robienie urządzenia, w którym po włączeniu zasilania procesor nie ma pełnej kontroli nad silnikami. Za każdym razem wszystko będzie od razu ruszało a jednym wyjściem (na silnik) będziesz mógł zmieniać jedynie kierunek obrotów. Ani nie będziesz mógł się skupić na jednym konkretnym napędzie, ani nie będzie sekundy spokoju podczas pisania programu. Wszystko będzie wyło i jęczało chyba, że co chwila będziesz wyłączał zasilanie albo odpinał silniki - masakra. Minimum dwa wyjścia na mostek dają przynajmniej szansę kontrolowanego ruszania i zatrzymywania oraz wybór kierunku. Podłączasz L293 dokładnie wg aplikacji "dwukierunkowej" - każdy driver do osobnego zacisku silnika czyli tak jak robiłeś dotychczas. Zaprojektuj to tak, by po włączeniu zasilania i w trakcie programowania procesora rejestry automatycznie się zerowały, co samoczynnie wyłączy wszystkie napędy. Dopiero podanie stanu wysokiego na jedno lub drugie wyjście włączy ruch w lewo lub w prawo. 5 modułów po dwa silniki w każdym to 10 niezależnych mostków H. Każdy potrzebuje 2 sygnałów więc razem to 20 linii. Tyle wychodzi z 3 rejestrów 74HC594 i jeszcze masz 4 linie dodatkowo wolne. Każdy następny rejestr obniża cenę zakupu 🙂 i dodaje 8 kolejnych wyjść. To naprawdę nic nie kosztuje a masz przynajmniej porządnie zrobione sterowanie. Oszczędzanie pojedynczych złotówek w jednostkowo robionych urządzeniach jest bez sensu.

http://www.tme.eu/pl/katalog/#search=74hc594&s_field=accuracy&s_order=DESC

Link do komentarza
Share on other sites

Tylko jak za pomocą tego rejestru sterować prawo-lewo? One tylko dają impulsy dodatnie, czy można zamieniać z uziemieniem?

Rejestry nie dają żadnych impulsów tylko po prostu '0' albo '1' cyfrową i taki stan utrzymuje się dopóki sam go nie zmienisz lub wyłączysz zasilanie.

Link do komentarza
Share on other sites

marek1707, mi kompletnie nie chodzi o koszta. Po prostu nie znam się na elektronice, dlatego nie do końca rozumiem jak mam to zrobić. Czy mógłbyś mniej więcej naszkicować to co opisałeś?

Link do komentarza
Share on other sites

Sam to za chwilę zrobisz:

1. Weź schemat blokowy, który już nam pokazałeś - pięć mostków i pięć silników.

2. Nie wiem czy chcesz z jednego L293 sterować dwoma silnikami (tak chyba robiłeś dotychczas?) ale jeśli tak, dorysuj do każdego drivera jeszcze po jednym silniku. Mamy zatem 5xL293 i 10 silników.

3. Każdy silnik będzie wymagał 2 sygnałów: "lewo" i "prawo". Tak więc do każdego L293 przychodzą 4 sygnały: lewo-prawo dla jednego silnika i to samo dla drugiego. W sumie masz 20 sygnałów z 5 mostków.

4. Na dole rysujesz tyle rejestrów 8-bitowych, by ich wyjść starczyło na 5 mostków. Narysuj 3 prostokąty-rejestry obok siebie, każdy mający 8 wyjść. Podłącz te 20 sygnałów od mostków do któychkolwiek wyjść rejestrów. Mogą być po kolei, procesorowi w Arduino i tak będzie wszystko jedno.

5. Na razie nie zastanawiaj się w jaki sposób dane do tych rejestrów będą wpisywane. Gdy będziesz miał schemat, pokaz go. Będziemy myśleć co dalej 🙂

Jeżeli silniki mają być większe i chcesz jeden L293 poświęcić na jeden silnik, do każdego L293 będą szły tylko dwa sygnały i do 10 silników potrzebujesz 10 sztuk L293. Sygnałów sterujących też oczywiście będzie 20. W tym przypadku narysuj trochę innych schemat, ale także pokaż go na Forum.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Dzięki za zaangażowanie. Zrobiłem to w ten sposób.

Teraz jak z przesylem danych z pinów? Mam zawsze podawać w parze, jeden niski, jeden wysoki? Zgadza się?

Link do komentarza
Share on other sites

Dobrze. Teraz zajmiesz się rejestrami - ich podłączeniem i zrozumieniem jak to działa. No, może w odwrotnej kolejności.

1. Dane do rejestrów wprowadzane są szeregowo lub równolegle. Szeregowo to znaczy bit po bicie a równolegle znaczy wszystkie od razu. Jeżeli rejestr jest 8-bitowy to znaczy, że ma 8 osobnych przerzutników z których każdy pamięta 1 bit. Jak łatwo się domyślić 8-bitowy rejestr równoległy ma 8 wyjść, ale potrzebuje też 8 wejść. 8-bitowy rejestr szeregowy (tzw. SIPO - Serial In Parallel Out) też ma 8 wyjść, ale wystarczy mu już tylko jeden wejście. I właśnie taki wykorzystamy. Arduino ma wygodny interfejs szeregowy tzw. SPI (Serial Peripherial Interface), wprost stworzony do podłączania takich rejestrów. Najlepiej, gdybyś w tym miejscu poczytał coś o tym interfejsie, choćby opis biblioteki go obsługującej:

http://arduino.cc/en/Reference/SPI

lub to:

http://atmega32.republika.pl/22.htm

albo choćby to:

http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus#Mode_Numbers

W każdym razie działanie SPI sprowadza się do wysyłania bajtów danych, które procesor wpisuje do swojego SPDR. Dane pojawiają się bit po bicie na nóżce MOSI. Żeby jednak coś co te dane odbiera (np. Twój rejestr) wiedziało kiedy już "wziąć" następny bit, wysyłany jest też tzw. zegar - SCK. No i to wszystko: procesor "pokazuje" pierwszy bit danych na MOSI a zaraz potem robi stan 1 na SCK. To właśnie narastające zbocze SCK jest informacją dla rejestru odbiorczego, że trzeba zapamiętać kolejny bit. Potem SCK jest opuszczane na 0, wystawiany jest kolejny bit na MOSI i tak w kółko, 8 razy 🙂

2. Teraz przyjrzyj się rejestrowi:

http://www.nxp.com/documents/data_sheet/74HC_HCT594.pdf

Jeżeli kupisz właśnie taki, to na Fig.1 masz narysowane blokowo jego wnętrze. Na razie skup się na tym górnym prostokącie, czyli "8-Stage Shift Register". To jest właśnie ta część, która umie odbierać dane szeregowe wysłane przez procesor po SPI. To coś ma tylko trzy wejścia:

a. DS - tędy "wchodzą" bity, wysyłane z procesora przez nóżkę MOSI,
b. SHCP - to jest zegar, czyli sygnał "wsuwający" kolejny bit do rejestru - pasuje jak ulał do SCK procesora,
c. /SHR - to wejście zeruje cały rejestr przesuwający a kreska nad nazwą oznacza, że zerowanie następuje przy stanie niskim.

3. No to teraz podłącz taki rejestr do swojego Arduino. Znajdź na schemacie wyjścia MOSI i SCK i podłącz je do jednego, 8-bitowego, teraz już konkretnego rejestru 74HC594. Położenie sygnałów w prawdziwej obudowie masz na rysunku Fig.6.

4. A co jeśli potrzebujesz więcej rejestrów? Procesor nie ma więcej interfejsów SPI, prawda? Na szczęście jest na to sposób, a nawet dwa:

4a. Możesz rejestry połączyć szeregowo, jak wagoniki w kolejce. Wszystkie dostają ten sam zegar SCK (czyli wszystkie jednocześnie przesuwają swoje dane) a wejście kolejnego łączysz z wyjściem poprzedniego. Jeśli wrócisz do Fig.1, to masz tam po prawej stronie wyjście Q7S z którego "wypadają" nadmiarowe bity. Oznacza to, że mając trzy takie rejestry połączone szeregowo każdy będzie przekazywał następnemu dane które wcześniej odebrał:

- Załóżmy, że w 3 rejestrach jest informacja XYZ a rejestr X jest podłączony najbliżej procesora (do MOSI), za nim Y a na końcu łańcuszka stoi Z.

- Wysyłasz pierwszy bajt (8 bitów), nazwijmy go A: mamy AXY, bo A wepchnęło się do pierwszego rejestru przesuwając w prawo wszystko co było dalej.

- Wysyłasz drugi bajt, tym razem B: masz już BAX.

- Wysyłasz trzeci bajt C: w rejestrach mamy teraz CBA 🙂

Tak więc wystarczy trzy razy użyć SPI (wywołać funkcję transfer() z biblioteki SPI) by załadować 24 bity do trzech rejestrów. Proste?

4b. Możesz je połączyć quasi-równolegle, ale o tym kiedy indziej.

Uzupełnij swój schemat o sygnały SPI (MOSI i SCK) wychodzące z Arduino i podłączone do rejestrów. Na razie narysuj tylko wejścia DS i SHCP oraz wyjścia Q7S rejestrów i odpowiednio je podłącz. Powinien powstać 3-wagonikowy, 24-bitowy pociąg 🙂 Do roboty.

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.