Elektroda.pl
Elektroda.pl
X
Relpol przekaźniki
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sterowanie silnikiem krokowym za pomocą arduino 2560 i sterownik A4988

07 Lis 2016 23:06 8004 65
  • Poziom 16  
    Witam.

    Posiadam arduino 2560, sterownik silnika krokowego A4988 Rep Rap oraz silnik krokowy DFRobot.

    Podłączyłem cały układ według tego schematu:
    https://botland.com.pl/content/50-podlaczenie...nikow-krokowych-bipolarnych-oraz-unipolarnych

    Wszystko pięknie działa, ale chciałbym móc sterować tym silnikiem. Mianowicie interesuje mnie zmiana kierunku obracania się silnika oraz chęć zatrzymania go(jedzie w momencie gdy nacisnę guzik,a stoi gdy puszczony). Wiem, że silnikiem steruje się za pomocą STEP i DIR. Nasuwa się pytanie jaki sygnał trzeba podać na te wejścia? Mogę się domyślać, że w przypadku DIR to będzie wysoki oraz niski? A w przypadku STEP nie mam zielonego pojęcia.

    Dziękuję za pomoc.

    Pozdrawiam.
  • Relpol przekaźniki
  • Poziom 12  
    Pin DIR odpowiada za kierunek obrotów (stan niski obroty w jednym kierunku, stan wysoki obroty w kierunku przeciwnym).
    Pin STEP odpowiada za krok, zmiana stanu z niskiego na wysoki powoduje wykonanie pojedynczego kroku lub mikrokroku.
  • Relpol przekaźniki
  • Poziom 16  
    Uwzględniłem przyciski w wyborze kierunku(nie jedzie, w prawo, w lewo).

    Zacząłem sobie utrudniać tzn. Chciałem wykonać połączenie oraz program, który pozwoli na sterowanie za pomocą przycisków jazdą w prawą albo w lewą stronę. Wygenerowałem sygnał na pinie np. 1. Sygnał ten biegnie do przycisków, a następnie z obydwóch przycisków lecą przewody do sterownika(wejście ENABLE), abym wybrał czy może się przemieszczać czy nie . W tym przypadku działa jedynie obracanie silnika bądź nie( nie mam wpływu na kierunek). Tuż za przyciskami wpinam dodatkowe przewody, które biegną do wejść Arduino np. 2,3.

    Chcąc uwzględnić kierunek pisze program, aby ustawiał na DIR (stan wysoki, niski) w zależności od tego z którego pinu 2/3 odczyta stan niski(czyli, aby uruchomić silnik). Nie wiem czemu mi to nie działa.. Siedzę nad tym już kilka godzin i nie znam powodu.

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 16  
    Źle to opisałem.

    Silnik się obraca lecz tylko w jedną stronę po naciśnięciu któregokolwiek przycisku, albo się nie obraca gdy nic nie nacisne.

    Wieczorem podkreślę układ z połączeniami.
  • Poziom 16  
    Wrzucam poprawiony program i schemat mojego ukłądu:
    Kod: c
    Zaloguj się, aby zobaczyć kod



    Sterowanie silnikiem krokowym za pomocą arduino 2560 i sterownik A4988
  • Poziom 16  
    Poprawiłem program, oprócz zmiany sygnału STEP zastąpiłem if'a whilem.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Nie wiem nawet czemu nie wykonuje jednego kroku. Może warunek nie jest spełniany?
  • Poziom 16  
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Teraz silnik się obraca, lecz bez względu na to czy nacisnę przycisk. Odłączyłem pin od generowania sygnału i mimo to silnik się kręci. Tak jakby już na przycisk_1/przycisk_2 z automatu był ustawiony stan wysoki. Przyciski są sprawne. Wiem, że program wchodzi do while, ponieważ po zmianie kierunku silnik obraca się w drugą stronę.

    https://botland.com.pl/tact-switch/5503-tact-switch-6x6-43mm-tht-2pin-przedluzony-5szt.html
  • Pomocny post
    Poziom 36  
    Warlok18 napisał:


    Nie wiem nawet czemu nie wykonuje jednego kroku. Może warunek nie jest spełniany?

    Spróbuj zainstalowac zworkę pomiędzy 'RESET' i 'SLEEP'.
    \
    Sterowanie silnikiem krokowym za pomocą arduino 2560 i sterownik A4988

    e marcus
  • Poziom 16  
    Zwora zamontowana, ale nic się nie zmieniło.

    Ogólnie to nie widzę jakiegokolwiek błędy w programie. Może jakiegoś sygnału nie generuje a jest konieczny?

    Może jakoś inaczej da się sterować silnikiem?
  • Pomocny post
    Poziom 37  
    Witam,
    moim zdaniem przyciski należy zadeklarować jako "INPUT_PULLUP", przy gołym "INPUT" wejście ma ogromną impedancję, procesor odczytuje przypadkowy stan logiczny.

    Pozdrawiam

    Dodano po 20 [minuty]:

    Przyjrzałem się dokładniej, trzeba zrobić jeszcze dodatkowe zmiany w programie.
    Używasz sygnału "generator sygnału" do uaktywniania i dezaktywacji obu przycisków. Należy ten sygnał ustawiać na LOW gdy przyciski mają być aktywne oraz na HIGH gdy mają być nieaktywne. W pętli należy rozpoznawać wciśnięty przycisk jako LOW a puszczony jako high. Taka "ujemna" logika jest potrzebna bo procesor ma możliwość konfiguracji wejścia jako INPUT_PULLUP, nie ma możliwości INPUT_PULLDOWN.
    Jeżeli chcesz zachować "dodatnią" logikę, nie należy używać INPUT_PULLUP a zwykły INPUT, ale musisz zamontować fizyczne rezystory pull-down na obu liniach wejściowych przycisków, około 10 kΩ lub nieco więcej.
  • Poziom 16  
    Poprawiłem kod i dodałem jeszcze jednego while'a

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Teraz już działa poprawnie. Zastosowałem INPUT_PULLUP oraz odłączyłem przewód od pinu 38 "generowany sygnał" i podłączyłem do gnd. Silnik obraca się w jedną oraz w drugą stronę w zależności od przycisku. Ostatni problem to to, że działa non stop. Dodałem dodatkowego while'a. Zatrzymuje silnik tylko gdy nacisnę obydwa przyciski na raz. Zmieniałem warunek z LOW na HIGH i nie pomaga. Też trzeba nacisnąć obydwa przyciski.

    Edit:

    Próbowałem także z operatorem !=, lecz to samo co wyżej.


    EDIT:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Silnik działa w 100% poprawnie.

    Prosiłbym moderatora o niezamykanie tematu. Być może niedługo będę miał kolejne problemy. Mam zamiar lada moment rozwinąć bardziej mój układ i jestem przekonany, że będę potrzebował pomocy.

    Dziękuję wszystkim póki co:)

    Pozdrawiam.
  • Poziom 31  
    Na INPUT_PULLUP pewny masz tylko stan LOW, natomiast w innym przypadku masz stan tzw. nieustalony, niekoniecznie musi to być HIGH, zatem spróbuj tak :

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 37  
    rs6000 napisał:
    Na INPUT_PULLUP pewny masz tylko stan LOW, natomiast w innym przypadku masz stan tzw. nieustalony, niekoniecznie musi to być HIGH, zatem spróbuj tak :

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Bardzo przepraszam, ale to jest nieprawda, pull-up wymusza stan wysoki, robiąc to w "miękki" sposób, to znaczy przez rezystor, który w tym akurat przypadku jest wewnątrz procesora. Ten wysoki stan jest stabilny, ale dzięki swojej "miękkości" zawsze można na pinie wymusić stabilny stan niski, zwierając go do masy czymkolwiek, na przykład przyciskiem, dzięki tej "miękkości" nie zwieramy na twardo zasilania do masy, ale przez jakąś (raczej dużą) rezystancję.

    Możliwe, że jakieś niestabilności działania wynikają z odbijania się styków przycisków.

    Pozdrawiam
  • Moderator Mikrokontrolery Projektowanie
    Zgodnie z dokumentacja mikrokontrolera rezystory pull-up mają kilkadziesiąt kΩ zwykle pomiędzy 30 a 80.
    Stąd wynika ta "miękkość", o której piszecie, a która wyraża prawo Ohma:

    I = U/R = 5V/50kΩ = 100µA


    krzysiek_krm napisał:
    Możliwe, że jakieś niestabilności działania wynikają z odbijania się styków przycisków.

    Tak to jest bardzo prawdopodobne:


    Link


    Szczegóły: http://mikrokontrolery.blogspot.com/2011/04/przycisk-drgania-stykow-debouncing.html

    To jest błędna podpowiedź:
    rs6000 napisał:
    Dlatego pewniejszy jest odczyt == LOW lub =! LOW.

    Nie ma odczytu pewniejszego, tylko odczyt w zależności od tego jak przycisk jest podłączony.
    Jeśli przycisk jest podłączony do pinu i GND oraz włączony jest rezystor pull-up, to rozpoznajemy przyciśnięcie przycisku przyrównując do wartości LOW:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jeśli przycisk jest podłączony do pinu i Vcc oraz ma podłączony zewnętrzny rezystor pull-down, to rozpoznajemy przyciśnięcie przycisku przyrównując do wartości HIGH:

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 16  
    No i znowu powracam:)

    Zaistniała sytuacja, że muszę wykorzystać silnik 1 fazowy(nie większym niż 1.5kW). Chciałbym nim sterować za pomocą arduino. Poszukałem trochę informacji i znalazłem taki oto moduł:

    https://hipros.pl/przekazniki-modul-4-kan-przekaznik-5v-10a-avr-arm,c103,p32,pl.html

    Czy uda mi się za pomocą niego sterować silnikiem 1 fazowym w identyczny sposób jak silnikiem krokowym tzn. na przyciski?

    Pozdrawiam.
  • Poziom 16  
    zapewne będę używał silnika szczotkowego.
  • Poziom 37  
    Witam.

    Po pierwsze, jeżeli ten silnik ma się obracać w obie strony i ma być silnikiem zasilanym prądem przemiennym, musisz zakupić silnik, który ma wyprowadzone połączenia umożliwiające zmianę kierunku obrotów. Silnik, który ma po prostu wyprowadzone dwa przewody do zasilania nie ma takiej możliwości.

    Po drugie, przekaźniki mogą sprawiać problemy. Podczas rozruchu silniki pobierają zazwyczaj prąd znacznie większy od nominalnego, co powoduje przeciążanie styków przekaźnika podczas załączania. Silniki są obciążeniami o charakterze indukcyjnym, przesuwającym fazę napięcia i prądu, co powoduje powstawanie trudnych do ugaszenia łuków elektrycznych na stykach przekaźnika podczas wyłączania. Oba te zjawiska mogą znacznie obniżyć żywotność przekaźnika. Musisz poszukać przekaźników, które mają odpowiednie parametry dla załączania obciążeń silnikowych.

    Równie dobrze można użyć przekaźnika do zmiany kierunku obrotów przy wyłączonym zasilaniu, nie wystąpią wówczas żadne problemy z udarowymi prądami oraz łukami elektrycznymi. Do załączania i wyłączania zasilania można natomiast użyć odpowiednio dobranego przekaźnika półprzewodnikowego, łuki elektryczne w nich nie występują bo nie ma żadnych elementów stykowych, prądy udarowe mogą być ograniczone przez jakieś wbudowane w te przekaźniki zabezpieczenia ewentualnie układy "miękkiego startu".

    Pozdrawiam
  • Poziom 36  
    krzysiek_krm napisał:
    Witam.

    Po pierwsze, jeżeli ten silnik ma się obracać .....


    To nie moze byc pierwszy warunek, lecz jakiś kolejny...
    Po pierwsze, to żaden zwykły jednofazowy silnik AC (nie ważne czy jest to klatkowy (indukcyjny) czy szczotkowy , (albo nawet DC) nie da się wysterowac na wzór sinika krokowego.!...
    Owszem, jeden i drugi można obracac w obydwu kierunkach, można też w tym drugim stosowac regulację obrotów (chociaż z pewnymi ograniczeniami), to zasadniczej funkcji slnika krokowego jaką jest obrót wałka o z góry określony kąt (równoznaczne z ilością krokow lub microkroków) , zatrzymanie go i trzymanie w tej pozycji dowolnie długo mimo występujacego obciążenia, tak jakby był z hamulcem (co jest jego naturalną cechą), przykładowy omawiany silnik AC tego nie spełni niezaleznie jakie wymyślne zastosujesz sterowanie.

    Zatem odpowiadając na pytanie:
    Czy uda mi się za pomocą niego (modułu 4-ch przekaźników) sterować silnikiem 1 fazowym w identyczny sposób jak silnikiem krokowym tzn. na przyciski?”

    Odpowiedź jest króka: NIE

    e marcus
  • Poziom 16  
    Chodziło mo jedynie o sposób sterowania tzn. Zmiana kierunku obracania się silnika oraz włączanie/wyłącznie za pomocą przycisku.

    Czyli nie jest możliwe podłączenie zwykłego silnika 1 fazowego(2 przewody) do tego modułu, tak aby obracał się w obie strony w zależności od sposobu zasilania?

    Pozdrawiam.
  • Poziom 37  
    Witam,

    Warlok18 napisał:
    Czyli nie jest możliwe podłączenie zwykłego silnika 1 fazowego(2 przewody) do tego modułu, tak aby obracał się w obie strony w zależności od sposobu zasilania?

    tak się nie da, zwróć uwagę, że gdy podłączasz silnik prądu przemiennego dołączony dwoma przewodami (na przykład odkurzacz), obraca się zawsze w jedną stronę, niezależnie od sposobu włożenia wtyczki do gniazdka, wynika to z wewnętrznych połączeń w tym silniku, musisz zastosować silnik, w którym te połączenia można zestawić "na zewnątrz" w zależności od pożądanego kierunku obrotów (na przykład silnik od pralki).

    Warlok18 napisał:
    Chodziło mo jedynie o sposób sterowania tzn. Zmiana kierunku obracania się silnika oraz włączanie/wyłącznie za pomocą przycisku.

    To akurat jest możliwe (w przypadku silnika umożliwiającego zmianę kierunku obrotów). Domyślam się, że na początku zastosowałeś silnik krokowy, ot tak po prostu, nie chodziło Ci o żadne precyzyjne pozycjonowanie, statyczne utrzymywanie pozycji, itp.

    Jeżeli potrzebne jest Ci statyczne utrzymywanie pozycji, możesz kupić silnik z hamulcem. Zapewnia on duży poziom bezpieczeństwa, hamulec jest uruchamiany mechanicznie (sprężyną), trzyma nawet po upadku zasilania.

    Pozdrawiam
  • Poziom 16  
    Silniki krokowe używam do przemieszczania wzdłuż i poprzek silnika 1 fazowego, a ten z kolei ma unosić i opuszczać elementy. Silniki krokowe użyłem aby mieć bardzo dużą precyzję. Silnika 1 fazowego chce użyć do podnoszenia elementów nie większych niż ~500kg, dlatego potrzebuje mocniejszego silnika. Zdecydowałem się na silnik 1 fazowy, który tez chciałbym podłączyć do arduino.

    Ogólnie to jest projekt, który wykonuję, konstrukcja już jest gotowa(jedynie wizualizacja 3D) natomiast nad elektroniką i sterowaniem właśnie teraz pracuję tzn. Został mi właśnie ten silnik i hamulec. Ale chyba użyje właśnie silnika wraz z hamulcem( do testów wykorzystam silnik z pralki, bo mam pod ręką, a w projekcie użyję znacznie mocniejszego połączonego z przekładną i bębnem).

    Wracając do silnika. Czyli muszę mieć 4 wyprowadzenie i w zależności gdzie podłącze GND i VCC w tą stronę będzie mi się obracał? Podłączając te 4 przewody do przekaźników i ustalając czy złącze ma być normalnie zamknięte czy normalnie otwarte będe mógł sterować silnikiem? Oczywiście po doprowadzeniu odpowiedniego stanu na wejścia IN1-IN4(sterujące przekaźnikami).
  • Poziom 37  
    Warlok18 napisał:
    Silniki krokowe używam do przemieszczania wzdłuż i poprzek silnika 1 fazowego, a ten z kolei ma unosić i opuszczać elementy. Silniki krokowe użyłem aby mieć bardzo dużą precyzję. Silnika 1 fazowego chce użyć do podnoszenia elementów nie większych niż ~500kg, dlatego potrzebuje mocniejszego silnika. Zdecydowałem się na silnik 1 fazowy, który tez chciałbym podłączyć do arduino.

    Ogólnie to jest projekt, który wykonuję, konstrukcja już jest gotowa(jedynie wizualizacja 3D) natomiast nad elektroniką i sterowaniem właśnie teraz pracuję tzn. Został mi właśnie ten silnik i hamulec. Ale chyba użyje właśnie silnika wraz z hamulcem( do testów wykorzystam silnik z pralki, bo mam pod ręką, a w projekcie użyję znacznie mocniejszego połączonego z przekładną i bębnem).

    Wracając do silnika. Czyli muszę mieć 4 wyprowadzenie i w zależności gdzie podłącze GND i VCC w tą stronę będzie mi się obracał? Podłączając te 4 przewody do przekaźników i ustalając czy złącze ma być normalnie zamknięte czy normalnie otwarte będe mógł sterować silnikiem? Oczywiście po doprowadzeniu odpowiedniego stanu na wejścia IN1-IN4(sterujące przekaźnikami).

    Tego już zupełnie nie rozumiem.
    Zakładałem, że ten (ostatni) silnik jest jednofazowym silnikiem prądu przemiennego i będzie zasilany z sieci 230 VAC, tam nie ma żadnego GND ani VCC. Chyba, że masz na myśli silnik DC, w którym zmianę kierunku obrotów uzyskuje się przez "odwrócenie" zasilania.
    Myślę, że najlepiej będzie, jeżeli w pierwszej kolejności wyszukasz silnik, który spełnia Twoje wymagania: moc, zasilanie AC lub DC, możliwość zmiany kierunku obrotów, hamulec mechaniczny, itp, itd. W dokumentacji tego silnika (lub gdzieś w puszce podłączeniowej) będą stosowne schematy podłączenia silnika dla uzyskania obrotów w obu kierunkach, działania hamulca, itd. Wówczas będzie to można zaimplementować w Twoim układzie.

    Pozdrawiam
  • Poziom 25  
    Do tak prostego sterowania wystarczą przyciski i przekaźniki, arduino jest zbędne.
    Jednak najpierw wybierz silnik a później zastanawiaj się nad jego sterowaniem.
  • Poziom 16  
    Od 2h przeszukuję internet i nie mogę znaleźć silnika 1 fazowego z hamulcem. Na pewnej stronie zauważyłem, że owe silniki z hamulcem są wykonywane na specjalne zamówienie. Szukam silnika z przedziału 0.5-1kW, jak najmniejsza prędkość obrotowa. Przekładnia, którą posiadam ma przełożenie 25. Jeżeli nie uda się znaleźć silnika z prędkością ~1200 obrotów/min to zmienię przekładnię.

    http://www.kacperek.com.pl/silniki-elektryczne/silniki-z-hamulcem-2/


    Tutaj znalazłem silnik 1 fazowy ML90S-4, tylko że nie posiada hamulca. Może da się jakoś dobrać hamulec do tego silnika?

    http://www.kacperek.com.pl/pliki/KATALOG%20SILNIKOW.pdf
  • Poziom 36  
    Warlok18 napisał:
    Od 2h przeszukuję internet i nie mogę znaleźć silnika 1 fazowego z hamulcem.

    Szukaj raczej pod hasłem 'motoreduktory' albo motoreduktory z hamulcem'.
    Tego typu napędy najczęściej wykonuje się z silnikiem trójfazowym (nawt małej mocy) ze względu na duży współczynnik mocy do wagi i gabarytów silnika, oraz łatwośc zmiany kierunku obrotów.

    Cytat:

    Wracając do silnika. Czyli muszę mieć 4 wyprowadzenie i w zależności gdzie podłącze GND i VCC w tą stronę będzie mi się obracał? Podłączając te 4 przewody do przekaźników i ustalając czy złącze ma być normalnie zamknięte czy normalnie otwarte będe mógł sterować silnikiem? Oczywiście po doprowadzeniu odpowiedniego stanu na wejścia IN1-IN4(sterujące przekaźnikami).

    Nezupełnie...
    Tak lub podobnie byłoby z silnikiem DC. Silnik AC o którym piszesz nie ma określonego GND i VCC - chociż i silniki DC nie mają takiego oznaczenia podłączeń, gdze jednak wystarcza odwrócic biegunowośc podlączenia. Procedura ta wymaga kombinacji przekaźników w ukladzie mostka H. Jezeli masz przekaźniki 3-stykowe to wystarczy 2 przekaźniki aby skonfigurowa takie podłaczenie. Podobnie możesz to zastosowac dla silnika AC posiadającego dwa uzwojenia (4- przewody). Wystarczy odwrócic kierunek podłączenia uzwojenia rozruchowego lub pomocniczego co również mozesz uskutecznic na dwóch przekaźnikach, a całośc załączac trzecim. Pod rozwage nalezy wziąc dopuszczalne obciązenie pradowe styków przekaźników.


    e marcus