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

Arduino - płytka Leonardo + sterownik adafruit + dwa silniki krokowe

06 Lut 2015 22:35 1713 13
  • Poziom 7  
    Witam,
    Jestem osobą stawiającą pierwsze kroki w programowaniu silników krokowych, usiłuje zaprojektować mechanizm do poruszania manipulatorem 3D (mój własny pomysł) do jego sterowania posłuży dokładnie 6 silników krokowych model to : "sm-42byg011" są to silniki bipolarne sterowane PWM. Oczywiście wraz z silnikami otrzymałem do swojej płytki (Leonardo) odpowiednie sterowniki model to : "adafruit motor shield v2" przy pisaniu programu korzystam z biblioteki dołączonej do płytki. Jeden motor shield obsługuje dwa silniki krokowe i tu pojawia się mój problem... Mianowicie podczas jednoczesnego uruchomienia obu silników ich prędkość spada dwukrotnie - błąd ten powiela się gdy dokładam kolejne silniki. Jeżeli pracuje tylko jeden silnik, działa on poprawnie - adekwatnie do zadanej prędkości. Czy ktoś może mi wytłumaczyć w czym tkwi problem ???

    Poniżej wstawiam kod mojego programu:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam.
    Szop_en
  • BotlandBotland
  • Specjalista - Mikrokontrolery
    Zapewne w budowie magicznych procedur napędzających silniki. Zgaduję w ciemno, że nie działają one na przerwaniach timera i w związku z tym w danej chwili zajmują się wykonaniem zleconej operacji na jednym silniku, a kiedy ją zakończą - następuje obsługa drugiego. Witaj w świecie Arduino - klocków dla początkujących... środowisko Arduino średnio nadaje się do jakichkolwiek poważniejszych projektów.
  • Poziom 14  
    BlueDraco nie znasz się to się nie wypowiadaj. Przerwania nie maja nic do rzeczy w tych modułach bo komunikacja miedzy nimi jest po i2c. Wiec częstotliwość odpowiedzialna za prędkość silnika generowana jest już przez układ w motorshield. A arduino wysyła tylko odpowiednie rozkazy po i2c do modułu wykonawczego.

    Zwiększasz obciążenie modułu poprzez dodanie drugiego silnika, dlatego zmienia się prędkość, sprawdź czy twój zasilacz ma odpowiednia obciążalność prądową.

    Arduino nadaje się do bardzo skomplikowanych zastosowań wystarczy programować je w C.
  • Poziom 12  
    Dodam, że na arduino w w obecnym czasie jest oparte całe sterowanie drukarek 3D. Sterowanie(jednocześnie) 5 silnikami krokowymi, odczyt z 2 ADC temperatury, komunikacja z LCD, sterowanie przez uart z PC itd. Soft który powstał na ARM(Smothie) nie jest jeszcze zbyt popularny.
  • BotlandBotland
  • Poziom 1  
  • Poziom 7  
    Marek_Skalski sprawdziłem prąd oraz napięcie na wyjściu i są to poprawne wartości. Natomiast przepraszam ale nie za bardzo rozumiem o co chodzi z zasilaniem przez jeden jumper ? - nie widze żadnego zdjęcia
  • Specjalista - Mikrokontrolery
    Jeśli to problem wydajności prądowej (w co ne bardzo wierzę), to odpięcie jednego silnika od płytki seterownika przy zachowaniu bez zmian całej elektronoki i oprogramowania powinno skutkować poprawną pracą drugiego silnika.

    Nie jest ważne, kto i jak generuje same sygnały sterowania silnikiem, ważne jest to, kto i w jaki spodób wydaje mu polecenia. Napisałem"zgaduję w ciemno", bo nie znam Arduino ani "shieldów", ale mam troszkę praktyki w programowaniu. ;)
  • Poziom 7  
    Jesli pracuje jeden silnik to wszystko jest w porządku - jego prędkość jest poprawna, ale kiedy uruchamiam programowo dwa silniki to ich prędkość spada...
  • Poziom 12  
    Po pierwsze są to silniki krokowe(1,8st 200kroków na 1 obrót), więc w ogóle nie rozumiem dlaczego sterujesz je z PWM.
    Ten sterownik(nie znam go) ma wyjścia do 2(lub wiecej)silników?
    edit:
    Sterownik ma 2 opcje, silniki DC lub krokowe.
    W FAQ na stronie sterownika coś mi sie obiło o oczy. Możesz podłączyc 4 DC lub 2 krokowe. Krokowych nie sterujesz szerokością impulsu, czyli sprawa Twojego softu lub podłączenia.
  • Specjalista - Mikrokontrolery
    Napisałem: test na to, czy jest to problłem sprzętu, czy oprogramowania, polega na sprawdzeniu, jak zachowuje się całość po odłączeniu jednego silnika, z oprogramowaniem i sterownikami dla dwóch silników. Stawiam na to, że tak samo, jak przy podłączonych obu silnikach, co by wskazywało na defekt oprgramowania.
  • Poziom 12  
    Cytat:

    .. Mianowicie podczas jednoczesnego uruchomienia obu silników ich prędkość spada dwukrotnie - błąd ten powiela się gdy dokładam kolejne silniki. Jeżeli pracuje tylko jeden silnik, działa on poprawnie - adekwatnie do zadanej prędkości.

    Stawiam na to, że silniki są źle podłączone i ew soft jest napisany na silniki DC.
    PWM to szerokość impulsu -> w wyniku ->napięcie na silnik. Tak zachowa się silnik DC jak podłączy się równolegle drugi(spadają obroty). Prawidłowo podłączony silnik krokowy sterowany impulsami(na dwie cewki) jak podłączy się nawet równolegle drugi silnik nie ma prawa zwolnić. Impuls to jeden krok i koniec.
  • Poziom 7  
    Silnik jest podłączony prawidłowo - zgodnie ze schematem. Więc wnioskuje że to wina tych funkcji które zbyt długo sie wykonują. Postaram sie nad nimi popracować. A jest możliwe zwiększenie częstotliwości podawania impulsów PWM ? czy takie rozwiązanie pomogło by rozwiązać ten problem ?
  • Specjalista - Mikrokontrolery
    Moim zdaniem (dzika spekulacja) jest to efekt błędu w koncepcji tych funkcji, a nie w ich implementacji. Prawdopodobnie trzeba cały moduł stworzyć od nowa, korzystając z przerwania timera.