Skocz do zawartości

Podłączenie Arduino i niechciany ruch silnika krokowego


radziopoke

Pomocna odpowiedź

Zaczynam przygodę z podłączaniem silników krokowych do Arduino i mam poniższy problem.
Podłączam zasilanie silników (zasilacz 12V), a następnie arduino za pomocą przewodu USB do komputera. W momencie gdy podłączam kabel USB silnik zaczyna kręcić się nieregularnie (w różne strony). I dopiero po wystartowaniu (po ok. sekundzie) programu silnik działa tak jak powinien.
Czy można jakaś zniwelować to niechciane poruszanie się silnika zanim wystartuje program z Arduino?

Posiadam: 
- Arduino Uno (oryginalnie jak i podróbkę, efekt jest taki sam)
- silnik krokowy 1.2A, 4V 
- stepstick A4988
- Kondensador 100uF
- zasilacz 12V 5A

Podłączenie:
Zasilacz 12V podłączony jest przez Kondensador 100uF do GND i VMOT stepsticka.
VDD i GND stepsticka podłączone jest do GND i 5V Arduino
Piny stestick-a A1, A2, B1, B2 - podłączony silnik krokowy
DIR podłączony pod Pin arduino nr 4
STEP podłączony pod Pin arduino nr 5
SLP i RESET są połączone ze sobą

Program:

#define stepPin 5
#define dirPin 4
#define stepTime 1000
#define stopStep 200

int countStep = 0;

void setup() {
    pinMode(stepPin, OUTPUT);
    pinMode(dirPin, OUTPUT);
    digitalWrite(dirPin, LOW);
}

void loop() {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(stepTime);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(stepTime);
    countStep++;
    if (countStep >= stopStep) {
        countStep -= stopStep;
        delay(1000);
    }
}

W przyszłości mam zamiar podłączyć też samo arduino pod ten sam zasilacz za pomocą wejścia VIN, ale nie chcę podłączać bezpośrednio 12V więc czekam za dostawą stabilizatora napięcia 🙂
Ale nadal podejrzewam, że problem będzie występował...

Link do komentarza
Share on other sites

No ale przecież celem programu który pokazałeś jest kręcenie silnikiem zaraz po włączeniu zasilania (a robisz to przez włączenie wtyczki USB) to czego się dziwisz? Rozumiesz w ogóle co wgrywasz do Arduino? Silnik krokowy nie będzie kręcił się sam z siebie, musisz mu generować impulsy STEP i właśnie to robisz natychmiast jak tylko procesor wystartuje. 

Może napisz jak chcesz żeby to działało.

Link do komentarza
Share on other sites

(edytowany)

Może inaczej:

Pozbywając się tego co jest w pętli loop (zostawiając ją pustą), po podłączeniu Adruino silnik i tak przez niecałą sekundę wykonuje jakieś nieregularne ruchy. Po czym się zatrzymuje i nic nie robi (czyli względem tego co jest w funkcji loop).

Inaczej mówiąc wygląda to tak jakby w czasie między podłączeniem USB, a uruchomieniem się programu w arduino były jakieś impulsy z tych pinów. Próbowałem zmienić piny ale efekt jest ten sam.

Edit: odłączyłem Piny STEP i DIR. Po podłączeniu USB silnik i tak wykonał ten nieregularny ruch...

Edytowano przez radziopoke
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

54 minuty temu, radziopoke napisał:

wykonał ten nieregularny ruch

Czy możesz to dokładniej opisać? Bo jak rozumiem raczej na pewno nie wykonuje kilku kroków - to wymaga sensownych impulsów STEP, a jeśli masz na myśli drgnięcie +/- 1..2 kroki to to może oznaczać cechę samego sterownika pozbawionego(?) zasilania 12V. Poza tym w driverze jest licznik określający aktualną fazę ruchu, liczący np. 0..3 (0..7, 0..15 itd w zależności od wybranego trybu mikrokroków) i to od jego zawartości sterowane są mostki obu faz silnika. Po włączeniu zasilania (którego?) powinien się zerować z automatu, ale to oznacza, że silnik w zależności od tego gdzie stanął po poprzednim wyłączeniu zawsze będzie "ściągany" do fazy/kroku nr. 0 i to czasem może spowodować jego drgnięcie i "podjazd" w dowolną stronę (gdzie bliżej względem aktualnego położenia wału) do tej pozycji. 

EDIT: No nie, to wygląda tragicznie i coś jest nie tak z zasilaniem. Pokaż rysunek jak to podłączyłeś, w szczególności zasilania i z czego (dokładnie) bierzesz 12V dla drivera silnika. 

Edytowano przez marek1707
Link do komentarza
Share on other sites

(edytowany)
1 godzinę temu, marek1707 napisał:

EDIT: No nie, to wygląda tragicznie i coś jest nie tak z zasilaniem. Pokaż rysunek jak to podłączyłeś, w szczególności zasilania i z czego (dokładnie) bierzesz 12V dla drivera silnika. 

Dlatego stwierdziłem, że coś musi być nie tak...

A tu schemat (pierwszy raz obsługiwałem program Fritzing):

stepper.thumb.jpg.e9769df6591f4b4c4de4311cd25a38bd.jpg

I gdy mam takie połączenie to podłączam kabel USB pod arduino

Edytowano przez radziopoke
Link do komentarza
Share on other sites

Bardzo to dziwne. Jeśli coś takiego dzieje się także gdy odłączysz sygnały STEP i DIR to raczej problem leży w samym sterowniku a raczej w sytuacji, gdy dostaje zasilanie VMOT a brakuje mu (przynajmniej na początku) 5V. Po dołączeniu wtyczki USB zasilanie się pojawia, ale albo jest złe/słabe/dziwne bo np. notebook nie podaje od razu poprawnego i silnego 5V ale dopóki Arduino się nie zenumeruje wysła coś słabego, co nie wystarcza do pracy drivera i procesora jednocześnie. Ja bym sprawdził co dzieje się na Vcc podczas tych kilku sekund drgawek. Być może też scalak drivera zwyczajnie nie lubi sytuacji gdy brakuje mu zasilania logiki i gdy ono wstaje później niż to główne, głupieje. Podłącz się czymś do +5V o popatrz czy tam jest wszystko stabilnie od samego początku. Dobrym testem byłoby odpalenie konfiguracji z dodatkowego, pewnego zasilacza 5V (zamiast z USB) albo z jednego 12V podłączonego także do VIN.

Link do komentarza
Share on other sites

Podłączenie pod 5V jak i podciągnięcie pod VIN 12V daje ten sam efekt... 

Podłączyłem również miernik pod te 5V. W momencie podłączenia wskakuje 5V i na tej wartości się zatrzymuje.

Jako, że miałem już miernik na wierzchu sprawdziłem VREF na stepstickach (bo aktualnie testuję 2 z 5 które posiadam). Ustawione miałem wcześniej 0.96V, a teraz jak mierzyłem na jednym z nich było 1.24V, a na drugim 1.22V... Więc trochę coś nie tak... Skalibrowałem je na nowo, ale tym razem na 0.90V i przetestowałem. Silnik tylko lekko drgnął (więc to już nie było by tak źle). Ale odłączyłem i odstawiłem na bok na kilkanaście minut. Po podłączeniu sytuacja się powtórzyła z tym dużym drganiem. Zmierzyłem VREF na stepsticku i 1.12V. Jakim cudem to wzrosło?

 Próba nr 3. Znowu ustawiłem VREF na 0.90V. Po kilkunastu minutach sprawdziłem ponownie. Wynik: 0.81V. Coś mi tu mocno nie pasuje... Zostawiam tak do jutra i zmierzę jutro. Na wszelki wypadek przy każdej z prób mierzyłem też napięcie zasilania z zasilacza. Na gniazdku zasilacza: 12.59V - 12.60V (przy wszystkich próbach). Za stabilizatorem 100uF było przeważnie w okolicach 11.90V (plus minus 0.02V). A przy ostatniej próbie 11.76V.

To co odkryłem to właśnie wina stepstika i za wysokiego lub za niskiego napięcia VREF (raz ustawiłem 0.6V) na spesticku, że silnik ma takie duże drgawki.

Czy da się coś zrobić by VREF nie ulegało zmianie? Czy raczej stepsticki do wymiany...

Link do komentarza
Share on other sites

Dzisiejsze mierzenie: 0.87V (a, powinno być 0.81 bo tak zostawiłem).

Wymieniłem stepstick na kolejny z tej serii i ustawiłem 0.80V. Po kilkunastu minutach stan 0.80V. Jeżeli chodzi o drżenie niestety nadal występuje choć trochę słabiej/krócej (silnik przekręcił się o jakieś 45 stopni). Chyba jednak muszę zamówić inne stepsticki tylko nie chciałbym wydawać majątku...

Link do komentarza
Share on other sites

Najpierw podłącz USB a później 12V.Silnik nie wykona ruchu jeśli nie ma zasilania.W momencie podłączenia USB dzieją się różne rzeczy w kontrolerze.Też miałem ten problem i jedynym rozsądnym rozwiązaniem moje pierwsze zdanie.

Link do komentarza
Share on other sites

Wspominałem o tym wcześniej. Ostatecznie chcę mieć możliwość podłączenia jednego źródła zasilania dla samego Arduino jak i silników. Dlatego rozwiązanie, które podałeś jest tylko tymczasowe... Aktualnie czekam za dostawą z Chin innych sterowników krokowych. Tym razem zamówiłem TMC2208 (zapewne jeszcze ze dwa tygodnie oczekiwania).

Link do komentarza
Share on other sites

Udało mi się rozwiązać problem 🙂 Aż dziwne, że wpadłem na to dopiero po tygodniu. 

Miałem ze sobą połączone piny SLEEP i RESET. Po to by silnik mógł działać. Okazało się, że zamiast łączenia ich ze sobą, pin RESET należy podłączyć pod jakikolwiek pin Arduino. Dopóki na RESET nie zostanie ustawiony stan wysoki to silnik nawet nie drgnie. Więc na starcie wystarczy mu dać stan wysoki 😛 

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!

Anonim
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.