Skocz do zawartości

Praca inżynierska na podstawie arduino + silnik krokowy


Bochen

Pomocna odpowiedź

Witam.

Jestem na etapie rozpoczęcia pracy inżynierskiej, której tematem oraz celem głównym jest zaprogramowanie kontrolera, który będzie sterował pracą silnika krokowego.

W temacie elektroniki oraz robotyki jestem prawdziwym amatorem. Miałem doczynienia tylko i wyłącznie z symulatorem mikrokontrolera edsim na zajęciach w szkole. Wybrałem sobie taki temat ze względu na to, iż chciałbym skonstruować slider do nagrywania video, który bez wątpienia przyda mi się w przyszłości. Myślałem, że poradzę sobie z tym za pomocą książek oraz informacji znalezionych w sieci lecz jednak nie jest to takie proste.

Wracając do sedna, kupiłem już większość rzeczy które będą mi potrzebne a dokładnie:

-Arduino starter kit ze strony bootland

-silnik krokowy http://botland.com.pl/silniki-krokowe/3606-silnik-krokowy-42hm48-1684-400-krokowobr-30v-168a-043nm.html

-sterownik silnika http://botland.com.pl/sterowniki-silnikow-krokowych/148-sterownik-silnika-krokowego-a4988-reprap-35v-2a-modul-pololu.html

oraz wszelkie inne elementy mechaniczne potrzebne do skonstruowania slidera.

Problem polega na tym, że nie wiem jakie dobrać zasilanie do arduino oraz silnika. Przeczytałem, że powinny to być oddzielne źródła zasilania dla obydwu elementów.

Drugi problem to połączenie arduino ze sterownikiem silnika oraz samym silnikiem.

Zupełnie nie wiem jak to zrobić. Wiem, że można kupić pewnego rodzaju shieldy które to ułatwiają lecz w moim przypadku pisania pracy inżynierskiej lepiej byłoby gdybym zrobił to "ręcznie" bez żadnych ułatwień.

Trzeci problem to sam program, który będzie odpowiadał za pracę całego zestawu. Nie chcę prosić nikogo o gotowy kod lecz może ktoś z was zna jakiś serwis albo stronę, która pomogłaby mi w napisaniu takiego kodu? Rozpisałem sobie krok po kroku jak miałby działać gotowy program. Nie wiem tylko czy mój pomysł i jest dostatecznie dobry i czy nie ma rozwiązania które będzie lepsze, łatwiejsze i skuteczniejsze.

Z góry bardzo dziękuje za wszelkie porady oraz pomoc.

Link do komentarza
Share on other sites

To może zacznijmy od tego co już masz. Kupiłeś silnik potrzebujący prawie 1.7A/fazę i dający wtedy moment 0.4Nm. Za to sterownik może normalnie oddać 1A (czyli to jego szczyt możliwości w temperaturze pokojowej) a po zastosowaniu dodatkowego radiatora 2A. Pomijając już fakt wątpliwej instalacji radiatora na obudowie układu tego typu, z czysto inżynierskiego punktu widzenia driver jest wyraźnie niedoszacowany. Albo to przewidziałeś i świadomie godzisz się ze zmniejszeniem momentu i prędkości maksymalnej albo pierwsza skucha. Silnik jest dwucewkowy, 4-przewodowy i elektrycznie będzie pasował do wybranego sterownika - to punkt na plus. Schemat połączeń procesor-sterownik podany jest na stronie sklepu a jestem pewien, że więcej dokumentacji jest w karcie katalogowej producenta - nie rozumiem jaki masz problem z połączeniem z Arduino. Wystarczą przecież dwa sygnały: kierunek i krok:

http://botland.com.pl/content/50-podlaczenie-silnikow-krokowych-bipolarnych-oraz-unipolarnych

Teraz zasilanie. Arduino może być zasilane dwoma metodami i obie na pewno znasz. Jeśli nie, to doczytasz. Twój sterownik silnika potrzebuje dwóch zasilań: części logicznej - to musi być zgodne z zasilaniem procesora w Arduino (i może być z niego wzięte) oraz części wykonawczej. Dzięki sterowaniu prądowemu (chopper) driver silnika będzie działał dobrze przy zasilaniu o wiele wyższym niż przewiduje to napięcie pracy silnika. Mimo, że producent podaje 3V/fazę to myślę, że powinieneś driver zasilać np. z 24V. Tak więc potrzebujesz zasilacza dającego np. 5V dla komputerka i 24V dla drivera.

W sprawie sterowania samych silników krokowych zacznij od tego:

http://www.atmel.com/images/doc8017.pdf

lub tego:

http://homepage.cs.uiowa.edu/~jones/step/an907a.pdf

Jak widzisz nie jest to rocket science.

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

Mam jeszcze jedno pytanie.

Zacząłem zastanawiać się nad kupnem shieldow(dokladnie motor i lcd shield) lecz zupełnie nie wiem, który byłby najlepszy. Mógłby mi ktoś pomoc i doradzić jaki wybrać i dlaczego akurat ten? Będę bardzo wdzięczny.

Link do komentarza
Share on other sites

Jeśli - jak piszesz - dopiero zacząłeś się zastanawiać to nic dziwnego, że nie wiesz. To nie przychodzi od razu. Poszukaj co jest dostępne, jakie ma parametry, poszperaj w kartach katalogowych użytych tam scalaków, porównaj ceny ze swoimi możliwościami finansowymi, pomyśl jak chcesz rozwiązać interfejs użytkownika itd. Czy parę klawiszków + prosty, znakowy LCD? A może coś graficznego? Maluchy OLED są fajne, ale.. małe. Większe TFT to już rozdzielczości 320x200 i często touch screen. Do tego wszystkiego są potrzebne i są dostępne biblioteki, ale nie wiemy czego potrzebujesz. Jakiej odpowiedzi się spodziewasz? Że ktoś powie "ten będzie najlepszy dla Ciebie bo jest ładny, kolorowy, tani i podoba się mojej żonie"? Kupisz to? Przecież nie znamy Twoich kryteriów oceny ani szczegółów projektu. To Twoja praca więc zacznij poświęcać na nią czas. Pisz gdy jakiegoś szczegółu nie będziesz mógł się domyślić lub technika trochę Cię przerośnie albo gdy wybór z kilku konkretnych modeli będzie naprawdę trudny - może ktoś będzie akurat to wiedział, ale pytania w stylu "Na czym mam oprzeć mój projekt - proszę o uzasadnienia" są na poziomie pracy inżynierskiej trochę śmieszne, nie sądzisz?

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

Ok problem z doborem części jest już za mną.

Teraz niestety mam problem z kodem.

Podpiąłem joystick, którym chce sterować kierunkiem oraz prędkością silnika.

Odczytałem sobie pozycję joysticka na serialu.

Pozycja 0 to wartość z przedziału ok. 490-510.

W if'ach założyłem trochę większy zakres specjalnie aby wykluczyć "pomyłkę".

void manualMode()
{
  int value = 0; 
  int kierunek;
  int predkosc;

  value = analogRead(sensorY); 

  Serial.println(value);

  if(value > 540)
  {
   predkosc = map(value, 540, 1023, 0, 100);
   kierunek = 1;
  }

  if(value > 440 && value < 540)
  {
    predkosc = 0;
  }

  if(value < 440)
  {
   predkosc = map(value, 0, 440, 100, 0);
   kierunek = -1;  
  }

  if(predkosc > 0)
  {
    silnik.setSpeed(predkosc);
    silnik.step(kierunek);
  }


if(digitalRead(ok) == LOW)
    {
     lcd.clear();
     lcd.setCursor(0, 0);
     lcd.print("Stop");
     delay(2000);
     lcd.clear();
     state = 0; 
    }
}

problem polega na tym, że niezależnie czy przechyle joystick w lewo lub prawo silnik kręci się w tą samą stronę. czy mógłby mi ktoś powiedzieć czemu tak się dzieje?

drugi problem jest taki, że prędkość silnika przy maksymalnym wychyleniu nie osiąga 100 tylko mniej ale to juz drugorzędny problem, którym mam zamiar zająć się po rozwiązaniu problemu pierwszego.

Mam jeszcze pytanie. Jak oceniacie tą metode sterowania? W internetach widziałem kilka rozwiązań takiego sterowania. Tą napisałem sam, ponieważ wydaje się najprostsza lecz nie wiem czy najlepsza.

__________

Komentarz dodany przez: Treker

Kody programów należy umieszczać w tag'ach . Tym razem już poprawiłem, pamiętaj na przyszłość 🙂

Link do komentarza
Share on other sites

Skoro posiadłeś umiejętność wypisywania wartości zmiennej value, to dlaczego nie zrobisz tego samego dla prędkości i kierunku? Będziesz wtedy widział czy mają oczekiwane wartości, prawda? A jeśli tu mają dobre, to może tajemnicze silnik.step coś nie działa? Nawiasem mówiąc, co za głupia nazwa dla metody ustawiającej kierunek pracy silnika, spodziewałbym się raczej silnik.dir lub czegoś w tym rodzaju.

Dlaczego nie wywołujesz ustawiania prędkości, gdy ta jest zerowa? Jak w takim razie zatrzymujesz silnik?

A tak w ogóle, to nie mamy ani schematu ani pełnego kodu. To jakaś tajemnica czy konkurs na Wrożbitę Roku?

Link do komentarza
Share on other sites

Mam pytanie odnośnie stepper shielda, oraz obsługi czujników krańcowych.

http://botland.com.pl/arduino-shield-kontrolery-silnikow-i-serw/2690-dwukanalowy-sterownik-silnikow-krokowych-a4988-35v2a-dfrobot-shield-dla-arduino-.html

Pytanie odnośnie wyprowadzen do wszystkich portow. Posiadaja one oddzielne ("własne") wyprowadzenia do gnd i vcc oraz jedno wyprowadzenie do obslugi dobrze rozumiem?

Co do czujników krańcowych to chciałem spytać, jak je podłączyć? Czytałem co oznaczają skróty NO NC oraz C lecz nie bardzo wiem jak to zastosować w praktyce.

Link do komentarza
Share on other sites

C to wyprowadzenie "środkowe" (Common). Jest ono zwierane z NO (Normal Open) podczas aktywacji czujnika. W tym samym czasie połączenie C z NC (Normal Closed) jest rozłączane.

EDIT: Korzystasz z dowolnej z 4 kombinacji w zależności od tego czy chcesz mieć zwarcie czy rozwarcie i kiedy.

Link do komentarza
Share on other sites

ok mniej wiecej rozumiem.

Chcę użyć dwóch krańcówek tak aby w stanie "wolnym" były rozwarte i silnik krokowy mógł normalnie pracować, a w momencie wciśnięcia zmieniał się stan oraz następuje przerwanie pracy silnika.

Istnieje taka możliwość aby zaprogramować to używając tylko jednego portu cyfrowego na arduino?

Link do komentarza
Share on other sites

Jasne, po prostu połącz je równolegle (przy normalnie otwartych) albo szeregowo (przy normalnie zamkniętych) -- wtedy który nie wciśniesz, efekt będzie taki sam. W programie możesz pamiętać w którą stronę się ruszałeś, więc będziesz wiedzieć która to krańcówka...

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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.