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

[ATmega328p][C][Arduino Uno] - Program sterujący robotem kartezjańskim

kubica14 24 Wrz 2013 13:49 1590 0
  • #1 24 Wrz 2013 13:49
    kubica14
    Poziom 9  

    Witam,
    słowem wstępu powiem, że programowaniem AVRów zajmuję się aż od tygodnia ;)
    Nie korzystam z żadnej literatury, a jedynie z jakichś tutoriali w internecie (ciekawe rozwiązania w programach adaptuję u siebie). Generalnie wolę uczyć się w praktyce :)
    Niestety znalazłem się w punkcie, w którym nie potrafię sobie poradzić i dlatego zwracam się do Was.

    Założenia:
    Napisanie programu, który pozwoli mi na ręczne sterowanie robotem kartezjańskim (działającym w 3 osiach X, Y i Z) za pomocą starego (odpowiednio zmodyfikowanego) joysticka z Pegazusa.
    Realizacja ruchów odbywa się za pomocą silników krokowych (unipolarne, 5-przewodowe, wspólny do +12V, sterowanie poprzez klucze).
    Za pomocą joysticka mam określone sterowanie: wybór osi X, wybór osi Y, wybór osi Z (w planach), przy czym wybierając jedną z nich dezaktywowane są pozostałe; sterowanie daną osią prawo/lewo oraz szybko/wolno; wyłączenie hamulca elektrycznego (silnik pozostaje z załączonymi fazami i "trzymie", po nacisnieciu "puszcza"). Przyciski monostabilne, ale nie microswitche tylko hmm... Membranowe?

    Dopóki obsługiwałem jedną oś X miałem problem z regulacją prędkości obrotowej - pierwotnie chciałem aby była ona ustawiona na pewną domyślną wartość, a przyciskami szybko/wolno zmniejszać ją lub zwiększać. Jednakże nie dawało to żadnego efektu, więc póki co pozostałem przy sterowaniu szybko lub wolno.
    Mógłbym prosić o podpowiedź jak to zrealizować w moim programie?

    Drugi problem z którym nie potrafie sobie poradzić to wybór osi. To, którą oś wybrałem sygnalizują mi diody LED (1-3). Po wyborze osi X nie mogę sterować silnikiem. Po wyborze osi Y dzieje się dziwna rzecz. Otóż oś jest aktywowana i sterując w prawo czy to szybko czy to wolno steruje mi naprzemian silnikiem (nie powinien) i diodami LED 4-7 (zastępują niepodłączony silnik). Przy sterowaniu w lewo rzecz się dzieje sporadycznie i nie wiem od czego zależy. Oś Z póki co nie jest wprowadzona do programu.

    Dołączam program w języku C oraz schemat (ATmega jest w płytce Arduino więc na schemacie nie wszystko jest podłączone, Atmega zasilana z USB, reszta z zasilacza).

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Schemat sporządzony w Eagle:
    [ATmega328p][C][Arduino Uno] - Program sterujący robotem kartezjańskim

    EDIT:
    Dodaję film, który to ilustruje:

    Link

    0 0
  • Computer Controls